Change indices in transaction tree widget to relative numbers.
This commit is contained in:
@@ -19,6 +19,7 @@ CREATE TABLE GeneralInfo(
|
||||
NumberOfTransactions INTEGER,
|
||||
TraceEnd INTEGER,
|
||||
NumberOfRanks INTEGER,
|
||||
NumberOfBankgroups INTEGER,
|
||||
NumberOfBanks INTEGER,
|
||||
clk INTEGER,
|
||||
UnitOfTime TEXT,
|
||||
@@ -41,6 +42,7 @@ CREATE TABLE CommandLengths(
|
||||
WRA INTEGER,
|
||||
REFA INTEGER,
|
||||
REFB INTEGER,
|
||||
REFSB INTEGER,
|
||||
PDEA INTEGER,
|
||||
PDXA INTEGER,
|
||||
PDEP INTEGER,
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE GeneralInfo(
|
||||
NumberOfTransactions INTEGER,
|
||||
TraceEnd INTEGER,
|
||||
NumberOfRanks INTEGER,
|
||||
NumberOfBankgroups INTEGER,
|
||||
NumberOfBanks INTEGER,
|
||||
clk INTEGER,
|
||||
UnitOfTime TEXT,
|
||||
@@ -41,6 +42,7 @@ CREATE TABLE CommandLengths(
|
||||
WRA INTEGER,
|
||||
REFA INTEGER,
|
||||
REFB INTEGER,
|
||||
REFSB INTEGER,
|
||||
PDEA INTEGER,
|
||||
PDXA INTEGER,
|
||||
PDEP INTEGER,
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE GeneralInfo(
|
||||
NumberOfTransactions INTEGER,
|
||||
TraceEnd INTEGER,
|
||||
NumberOfRanks INTEGER,
|
||||
NumberOfBankgroups INTEGER,
|
||||
NumberOfBanks INTEGER,
|
||||
clk INTEGER,
|
||||
UnitOfTime TEXT,
|
||||
@@ -41,6 +42,7 @@ CREATE TABLE CommandLengths(
|
||||
WRA INTEGER,
|
||||
REFA INTEGER,
|
||||
REFB INTEGER,
|
||||
REFSB INTEGER,
|
||||
PDEA INTEGER,
|
||||
PDXA INTEGER,
|
||||
PDEP INTEGER,
|
||||
|
||||
@@ -19,6 +19,7 @@ CREATE TABLE GeneralInfo(
|
||||
NumberOfTransactions INTEGER,
|
||||
TraceEnd INTEGER,
|
||||
NumberOfRanks INTEGER,
|
||||
NumberOfBankgroups INTEGER,
|
||||
NumberOfBanks INTEGER,
|
||||
clk INTEGER,
|
||||
UnitOfTime TEXT,
|
||||
@@ -41,6 +42,7 @@ CREATE TABLE CommandLengths(
|
||||
WRA INTEGER,
|
||||
REFA INTEGER,
|
||||
REFB INTEGER,
|
||||
REFSB INTEGER,
|
||||
PDEA INTEGER,
|
||||
PDXA INTEGER,
|
||||
PDEP INTEGER,
|
||||
|
||||
@@ -40,28 +40,33 @@
|
||||
#include "timespan.h"
|
||||
#include <QString>
|
||||
|
||||
struct GeneralInfo {
|
||||
struct GeneralInfo
|
||||
{
|
||||
public:
|
||||
unsigned int numberOfTransactions;
|
||||
unsigned int numberOfPhases;
|
||||
Timespan span;
|
||||
unsigned int numberOfRanks;
|
||||
unsigned int numberOfBankgroups;
|
||||
unsigned int numberOfBanks;
|
||||
unsigned int banksPerRank;
|
||||
unsigned int groupsPerRank;
|
||||
unsigned int banksPerGroup;
|
||||
QString description;
|
||||
QString unitOfTime;
|
||||
unsigned int clkPeriod;
|
||||
unsigned int windowSize;
|
||||
unsigned int controllerThread;
|
||||
|
||||
public:
|
||||
GeneralInfo(unsigned int numberOfTransactions, unsigned int numberOfPhases, Timespan span,
|
||||
unsigned int numberOfRanks, unsigned int numberOfBankgroups, unsigned int numberOfBanks,
|
||||
const QString &description, QString unitOfTime, unsigned int clkPeriod,
|
||||
unsigned int windowSize, unsigned int controllerThread) :
|
||||
numberOfTransactions(numberOfTransactions) , numberOfPhases(numberOfPhases), span(span),
|
||||
numberOfRanks(numberOfRanks), numberOfBankgroups(numberOfBankgroups), numberOfBanks(numberOfBanks),
|
||||
description(description), unitOfTime(unitOfTime), clkPeriod(clkPeriod),
|
||||
windowSize(windowSize), controllerThread(controllerThread) {}
|
||||
banksPerRank(numberOfBanks / numberOfRanks), groupsPerRank(numberOfBankgroups / numberOfRanks),
|
||||
banksPerGroup(numberOfBanks / numberOfBankgroups), description(description), unitOfTime(unitOfTime),
|
||||
clkPeriod(clkPeriod), windowSize(windowSize), controllerThread(controllerThread) {}
|
||||
|
||||
GeneralInfo() {}
|
||||
};
|
||||
|
||||
@@ -113,20 +113,20 @@ QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const
|
||||
break;
|
||||
case ColorGrouping::Thread:
|
||||
return ColorGenerator::getColor(static_cast<unsigned int>
|
||||
(transaction->Thread()));
|
||||
(transaction->thread));
|
||||
break;
|
||||
case ColorGrouping::Transaction:
|
||||
default:
|
||||
return ColorGenerator::getColor(transaction->Id());
|
||||
return ColorGenerator::getColor(transaction->id);
|
||||
}
|
||||
}
|
||||
|
||||
int Phase::getYVal(const TraceDrawingProperties &drawingProperties) const
|
||||
{
|
||||
if (isBankwise())
|
||||
return transaction->Bank();
|
||||
return transaction->bank;
|
||||
else
|
||||
return transaction->Rank() * drawingProperties.banksPerRank;
|
||||
return transaction->rank * drawingProperties.banksPerRank;
|
||||
}
|
||||
|
||||
Qt::BrushStyle Phase::getBrushStyle() const
|
||||
|
||||
@@ -81,16 +81,16 @@ shared_ptr<Phase> PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName,
|
||||
{Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, std::shared_ptr<Timespan>()));
|
||||
else if (dbPhaseName == "RD")
|
||||
return shared_ptr<Phase>(new RD(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)},
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
|
||||
else if (dbPhaseName == "RDA")
|
||||
return shared_ptr<Phase>(new RDA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)},
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
|
||||
else if (dbPhaseName == "WR")
|
||||
return shared_ptr<Phase>(new WR(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)},
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
|
||||
else if (dbPhaseName == "WRA")
|
||||
return shared_ptr<Phase>(new WRA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)},
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->SpanOnDataStrobe()))));
|
||||
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
|
||||
else if (dbPhaseName == "PDNA")
|
||||
return shared_ptr<Phase>(new PDNA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
|
||||
Timespan(span.End() - clk * cl.PDXA, span.End())}, std::shared_ptr<Timespan>()));
|
||||
|
||||
@@ -48,14 +48,15 @@ typedef unsigned int ID;
|
||||
class Transaction
|
||||
{
|
||||
private:
|
||||
unsigned int address, burstlength, thread, channel, rank,
|
||||
bankgroup, bank, row, column;
|
||||
Timespan span;
|
||||
Timespan spanOnDataStrobe;
|
||||
ID id;
|
||||
std::vector<std::shared_ptr<Phase>> phases;
|
||||
|
||||
public:
|
||||
const unsigned int address, burstlength, thread, channel, rank,
|
||||
bankgroup, bank, row, column;
|
||||
const Timespan span;
|
||||
const Timespan spanOnDataStrobe;
|
||||
const ID id;
|
||||
|
||||
Transaction(ID id, unsigned int address, unsigned int burstlength,
|
||||
unsigned int thread, unsigned int channel, unsigned int rank,
|
||||
unsigned int bankgroup, unsigned int bank, unsigned int row, unsigned int column,
|
||||
@@ -69,54 +70,6 @@ public:
|
||||
bool isSelected(traceTime time, double yVal,
|
||||
const TraceDrawingProperties &drawingproperties) const;
|
||||
|
||||
unsigned int Address() const
|
||||
{
|
||||
return address;
|
||||
}
|
||||
unsigned int Burstlength() const
|
||||
{
|
||||
return burstlength;
|
||||
}
|
||||
unsigned int Thread()
|
||||
{
|
||||
return thread;
|
||||
}
|
||||
unsigned int Channel() const
|
||||
{
|
||||
return channel;
|
||||
}
|
||||
unsigned int Rank() const
|
||||
{
|
||||
return rank;
|
||||
}
|
||||
unsigned int Bankgroup() const
|
||||
{
|
||||
return bankgroup;
|
||||
}
|
||||
unsigned int Bank() const
|
||||
{
|
||||
return bank;
|
||||
}
|
||||
unsigned int Row() const
|
||||
{
|
||||
return row;
|
||||
}
|
||||
unsigned int Column() const
|
||||
{
|
||||
return column;
|
||||
}
|
||||
ID Id() const
|
||||
{
|
||||
return id;
|
||||
}
|
||||
const Timespan &Span() const
|
||||
{
|
||||
return span;
|
||||
}
|
||||
const Timespan &SpanOnDataStrobe()
|
||||
{
|
||||
return spanOnDataStrobe;
|
||||
}
|
||||
const std::vector<std::shared_ptr<Phase>> &Phases() const
|
||||
{
|
||||
return phases;
|
||||
|
||||
@@ -69,7 +69,7 @@ void TraceNavigator::navigateToTime(traceTime time)
|
||||
|
||||
void TraceNavigator::navigateToTransaction(ID id)
|
||||
{
|
||||
navigateToTime(traceFile.getTransactionByID(id)->Span().Begin());
|
||||
navigateToTime(traceFile.getTransactionByID(id)->span.Begin());
|
||||
}
|
||||
|
||||
|
||||
@@ -162,25 +162,25 @@ void TraceNavigator::selectTransaction(ID id)
|
||||
void TraceNavigator::selectTransaction(const shared_ptr<Transaction>
|
||||
&transaction)
|
||||
{
|
||||
selectTransaction(transaction->Id());
|
||||
selectTransaction(transaction->id);
|
||||
}
|
||||
|
||||
void TraceNavigator::selectNextTransaction()
|
||||
{
|
||||
if (selectedTransactions.empty()
|
||||
|| selectedTransactions.front()->Id() ==
|
||||
|| selectedTransactions.front()->id ==
|
||||
traceFile.getGeneralInfo().numberOfTransactions)
|
||||
selectFirstTransaction();
|
||||
else
|
||||
selectTransaction(selectedTransactions.front()->Id() + 1);
|
||||
selectTransaction(selectedTransactions.front()->id + 1);
|
||||
}
|
||||
|
||||
void TraceNavigator::selectPreviousTransaction()
|
||||
{
|
||||
if (selectedTransactions.empty() || selectedTransactions.front()->Id() == 1)
|
||||
if (selectedTransactions.empty() || selectedTransactions.front()->id == 1)
|
||||
selectLastTransaction();
|
||||
else
|
||||
selectTransaction(selectedTransactions.front()->Id() - 1);
|
||||
selectTransaction(selectedTransactions.front()->id - 1);
|
||||
}
|
||||
|
||||
void TraceNavigator::selectFirstTransaction()
|
||||
@@ -199,7 +199,7 @@ void TraceNavigator::selectNextRefresh()
|
||||
shared_ptr<Transaction> nextRefresh;
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
nextRefresh = traceFile.getNextRefresh(SelectedTransactions().front()->Id());
|
||||
nextRefresh = traceFile.getNextRefresh(SelectedTransactions().front()->id);
|
||||
else
|
||||
nextRefresh = traceFile.getNextRefresh(0);
|
||||
|
||||
@@ -212,7 +212,7 @@ void TraceNavigator::selectNextActivate()
|
||||
shared_ptr<Transaction> nextActivate;
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
nextActivate = traceFile.getNextActivate(SelectedTransactions().front()->Id());
|
||||
nextActivate = traceFile.getNextActivate(SelectedTransactions().front()->id);
|
||||
else
|
||||
nextActivate = traceFile.getNextActivate(0);
|
||||
|
||||
@@ -226,7 +226,7 @@ void TraceNavigator::selectNextPrecharge()
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
nextPrecharge = traceFile.getNextPrecharge(
|
||||
SelectedTransactions().front()->Id());
|
||||
SelectedTransactions().front()->id);
|
||||
else
|
||||
nextPrecharge = traceFile.getNextPrecharge(0);
|
||||
|
||||
@@ -239,7 +239,7 @@ void TraceNavigator::selectNextActb()
|
||||
shared_ptr<Transaction> nextActb;
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
nextActb = traceFile.getNextActb(SelectedTransactions().front()->Id());
|
||||
nextActb = traceFile.getNextActb(SelectedTransactions().front()->id);
|
||||
else
|
||||
nextActb = traceFile.getNextActb(0);
|
||||
|
||||
@@ -253,7 +253,7 @@ void TraceNavigator::selectNextPreb()
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
nextPreb = traceFile.getNextPreb(
|
||||
SelectedTransactions().front()->Id());
|
||||
SelectedTransactions().front()->id);
|
||||
else
|
||||
nextPreb = traceFile.getNextPreb(0);
|
||||
|
||||
@@ -266,7 +266,7 @@ void TraceNavigator::selectNextRefb()
|
||||
shared_ptr<Transaction> n;
|
||||
|
||||
if (!SelectedTransactions().empty())
|
||||
n = traceFile.getNextRefb(SelectedTransactions().front()->Id());
|
||||
n = traceFile.getNextRefb(SelectedTransactions().front()->id);
|
||||
else
|
||||
n = traceFile.getNextRefb(0);
|
||||
|
||||
@@ -277,13 +277,13 @@ void TraceNavigator::selectNextRefb()
|
||||
bool TraceNavigator::transactionIsSelected(const shared_ptr<Transaction>
|
||||
&transaction) const
|
||||
{
|
||||
return transactionIsSelected(transaction->Id());
|
||||
return transactionIsSelected(transaction->id);
|
||||
}
|
||||
|
||||
bool TraceNavigator::transactionIsSelected(ID id) const
|
||||
{
|
||||
for (const auto &transaction : selectedTransactions) {
|
||||
if (transaction->Id() == id)
|
||||
if (transaction->id == id)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -307,12 +307,12 @@ Timespan TraceNavigator::getSpanCoveredBySelectedTransaction()
|
||||
if (!hasSelectedTransactions())
|
||||
return Timespan(0, 0);
|
||||
|
||||
traceTime begin = SelectedTransactions().at(0)->Span().Begin();
|
||||
traceTime end = SelectedTransactions().at(0)->Span().End();
|
||||
traceTime begin = SelectedTransactions().at(0)->span.Begin();
|
||||
traceTime end = SelectedTransactions().at(0)->span.End();
|
||||
|
||||
for (const auto &transaction : selectedTransactions) {
|
||||
if (transaction->Span().End() > end)
|
||||
end = transaction->Span().End();
|
||||
if (transaction->span.End() > end)
|
||||
end = transaction->span.End();
|
||||
}
|
||||
|
||||
return Timespan(begin, end);
|
||||
|
||||
@@ -66,7 +66,7 @@ void TransactionTreeWidget::AppendTransaction(const shared_ptr<Transaction>
|
||||
&transaction)
|
||||
{
|
||||
QTreeWidgetItem *node = new TransactionTreeItem(this, transaction,
|
||||
navigator->GeneralTraceInfo().controllerThread);
|
||||
navigator->GeneralTraceInfo());
|
||||
addTopLevelItem(node);
|
||||
}
|
||||
|
||||
@@ -89,33 +89,33 @@ void TransactionTreeWidget::ContextMenuRequested(QPoint point)
|
||||
|
||||
TransactionTreeWidget::TransactionTreeItem::TransactionTreeItem(
|
||||
QTreeWidget *parent, const shared_ptr<Transaction> &transaction,
|
||||
unsigned int controllerThread) : QTreeWidgetItem(parent,
|
||||
transactionTreeItemType)
|
||||
const GeneralInfo &generalInfo)
|
||||
: QTreeWidgetItem(parent, transactionTreeItemType)
|
||||
{
|
||||
this->setText(0, QString::number(transaction->Id()));
|
||||
this->id = transaction->Id();
|
||||
this->setText(0, QString::number(transaction->id));
|
||||
this->id = transaction->id;
|
||||
|
||||
QTreeWidgetItem *time = new QTreeWidgetItem({"Timespan"});
|
||||
AppendTimespan(time, transaction->Span());
|
||||
AppendTimespan(time, transaction->span);
|
||||
this->addChild(time);
|
||||
this->addChild(new QTreeWidgetItem( {"Lenght", prettyFormatTime(transaction->Span().timeCovered())}));
|
||||
this->addChild(new QTreeWidgetItem({"Lenght", prettyFormatTime(transaction->span.timeCovered())}));
|
||||
this->addChild(new QTreeWidgetItem({"Channel", QString::number(transaction->channel)}));
|
||||
this->addChild(new QTreeWidgetItem({"Rank", QString::number(transaction->rank)}));
|
||||
this->addChild(new QTreeWidgetItem({"Bankgroup", QString::number(transaction->bankgroup % generalInfo.groupsPerRank)}));
|
||||
this->addChild(new QTreeWidgetItem({"Bank", QString::number(transaction->bank % generalInfo.banksPerGroup)}));
|
||||
this->addChild(new QTreeWidgetItem({"Row", QString::number(transaction->row)}));
|
||||
this->addChild(new QTreeWidgetItem({"Column", QString::number(transaction->column)}));
|
||||
this->addChild(new QTreeWidgetItem({"Address", QString("0x") + QString::number(transaction->address, 16)}));
|
||||
|
||||
this->addChild(new QTreeWidgetItem( {"Channel", QString::number(transaction->Channel())}));
|
||||
this->addChild(new QTreeWidgetItem( {"Rank", QString::number(transaction->Rank())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Bankgroup", QString::number(transaction->Bankgroup())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Bank", QString::number(transaction->Bank())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Row", QString::number(transaction->Row())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Column", QString::number(transaction->Column())} ));
|
||||
this->addChild(new QTreeWidgetItem( {"Address", QString("0x") + QString::number(transaction->Address(), 16)} ));
|
||||
|
||||
if (transaction->Thread() != controllerThread) {
|
||||
this->addChild(new QTreeWidgetItem( {"Burstlength", QString::number(transaction->Burstlength())}));
|
||||
this->addChild(new QTreeWidgetItem( {"Thread", QString::number(transaction->Thread())}));
|
||||
if (transaction->thread != generalInfo.controllerThread)
|
||||
{
|
||||
this->addChild(new QTreeWidgetItem({"Burstlength", QString::number(transaction->burstlength)}));
|
||||
this->addChild(new QTreeWidgetItem({"Thread", QString::number(transaction->thread)}));
|
||||
}
|
||||
|
||||
QTreeWidgetItem *phasesNode = new QTreeWidgetItem(this);
|
||||
phasesNode->setText(0, "Phases");
|
||||
phasesNode->addChild(new QTreeWidgetItem( {"", "Begin", "End"} ));
|
||||
phasesNode->addChild(new QTreeWidgetItem({"", "Begin", "End"}));
|
||||
|
||||
for (std::shared_ptr<Phase> phase : transaction->Phases()) {
|
||||
AppendPhase(phasesNode, *phase);
|
||||
|
||||
@@ -71,7 +71,7 @@ private:
|
||||
public:
|
||||
static constexpr int transactionTreeItemType = 1001;
|
||||
TransactionTreeItem(QTreeWidget *parent,
|
||||
const std::shared_ptr<Transaction> &trans, unsigned int controllerThread);
|
||||
const std::shared_ptr<Transaction> &trans, const GeneralInfo &generalInfo);
|
||||
ID Id()
|
||||
{
|
||||
return id;
|
||||
|
||||
Reference in New Issue
Block a user