Change indices in transaction tree widget to relative numbers.

This commit is contained in:
Lukas Steiner
2020-08-26 16:16:16 +02:00
parent aa7ae09e2b
commit 7b5cbe03e0
11 changed files with 69 additions and 103 deletions

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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() {}
};

View File

@@ -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

View File

@@ -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>()));

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;