diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/DRAMSys/traceAnalyzer/data/tracedb.cpp index 29dcc652..ffd9ede3 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.cpp +++ b/DRAMSys/traceAnalyzer/data/tracedb.cpp @@ -149,76 +149,90 @@ shared_ptr TraceDB::getTransactionByID(ID id) } -shared_ptr TraceDB::getNextActivate(ID currentTransactionId) +shared_ptr TraceDB::getNextActivate(traceTime time) { QSqlQuery query(database); QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName = 'ACT' LIMIT 1"; + "WHERE PhaseBegin > :traceTime AND PhaseName " + "IN ('ACT','ACTB') ORDER BY PhaseBegin ASC LIMIT 1"; query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); + query.bindValue(":traceTime", time); executeQuery(query); return parseTransactionFromQuery(query); } -shared_ptr TraceDB::getNextPrecharge(ID currentTransactionId) +shared_ptr TraceDB::getNextPrecharge(traceTime time) { QSqlQuery query(database); QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName IN ('PRE','PREA') LIMIT 1"; + "WHERE PhaseBegin > :traceTime AND PhaseName " + "IN ('PRE','PREA','PREB','PRESB') ORDER BY PhaseBegin ASC LIMIT 1"; query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); + query.bindValue(":traceTime", time); executeQuery(query); return parseTransactionFromQuery(query); } -shared_ptr TraceDB::getNextActb(ID currentTransactionId) +// shared_ptr TraceDB::getNextActb(ID currentTransactionId) +// { +// QSqlQuery query(database); +// QString queryText = queryTexts.queryHead + +// "WHERE TransactionID > :currentID AND PhaseName = 'ACTB' LIMIT 1"; +// +// query.prepare(queryText); +// query.bindValue(":currentID", currentTransactionId); +// executeQuery(query); +// return parseTransactionFromQuery(query); +// } + +// shared_ptr TraceDB::getNextPreb(ID currentTransactionId) +// { +// QSqlQuery query(database); +// QString queryText = queryTexts.queryHead + +// "WHERE TransactionID > :currentID AND PhaseName = 'PREB' LIMIT 1"; +// +// query.prepare(queryText); +// query.bindValue(":currentID", currentTransactionId); +// executeQuery(query); +// return parseTransactionFromQuery(query); +// } + +shared_ptr TraceDB::getNextRefresh(traceTime time) { QSqlQuery query(database); QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName = 'ACTB' LIMIT 1"; - + "WHERE PhaseBegin > :traceTime AND PhaseName " + "IN ('REFA','REFB','REFSB','SREF','SREFB') ORDER BY PhaseBegin ASC LIMIT 1"; query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); + query.bindValue(":traceTime", time); executeQuery(query); return parseTransactionFromQuery(query); } -shared_ptr TraceDB::getNextPreb(ID currentTransactionId) +std::shared_ptr TraceDB::getNextCommand(traceTime time) { QSqlQuery query(database); QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName = 'PREB' LIMIT 1"; - + "WHERE PhaseBegin > :traceTime ORDER BY PhaseBegin ASC LIMIT 1"; query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); + query.bindValue(":traceTime", time); executeQuery(query); return parseTransactionFromQuery(query); } -shared_ptr TraceDB::getNextRefresh(ID currentTransactionId) -{ - QSqlQuery query(database); - QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName IN ('REFA') LIMIT 1"; - query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); - executeQuery(query); - return parseTransactionFromQuery(query); -} - -shared_ptr TraceDB::getNextRefb(ID currentTransactionId) -{ - QSqlQuery query(database); - QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName = 'REFB' LIMIT 1"; - - query.prepare(queryText); - query.bindValue(":currentID", currentTransactionId); - executeQuery(query); - return parseTransactionFromQuery(query); -} +// shared_ptr TraceDB::getNextRefb(ID currentTransactionId) +// { +// QSqlQuery query(database); +// QString queryText = queryTexts.queryHead + +// "WHERE TransactionID > :currentID AND PhaseName = 'REFB' LIMIT 1"; +// +// query.prepare(queryText); +// query.bindValue(":currentID", currentTransactionId); +// executeQuery(query); +// return parseTransactionFromQuery(query); +// } ID TraceDB::getTransactionIDFromPhaseID(ID phaseID) { diff --git a/DRAMSys/traceAnalyzer/data/tracedb.h b/DRAMSys/traceAnalyzer/data/tracedb.h index f5f5ba56..fcce5a48 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.h +++ b/DRAMSys/traceAnalyzer/data/tracedb.h @@ -86,12 +86,13 @@ public: QString queryText); std::vector> getTransactionsInTimespan( const Timespan &span); - std::shared_ptr getNextPrecharge(ID currentTransactionId); - std::shared_ptr getNextActivate(ID currentTransactionId); - std::shared_ptr getNextRefresh(ID currentTransactionId); - std::shared_ptr getNextPreb(ID currentTransactionId); - std::shared_ptr getNextActb(ID currentTransactionId); - std::shared_ptr getNextRefb(ID currentTransactionId); + std::shared_ptr getNextPrecharge(traceTime time); + std::shared_ptr getNextActivate(traceTime time); + std::shared_ptr getNextRefresh(traceTime time); + std::shared_ptr getNextCommand(traceTime time); +// std::shared_ptr getNextPreb(ID currentTransactionId); +// std::shared_ptr getNextActb(ID currentTransactionId); +// std::shared_ptr getNextRefb(ID currentTransactionId); std::shared_ptr getTransactionByID(ID id); diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp index 86ea4bc1..13b0526c 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp @@ -201,85 +201,85 @@ void TraceNavigator::selectLastTransaction() } -void TraceNavigator::selectNextRefresh() +void TraceNavigator::selectNextRefresh(traceTime time) { shared_ptr nextRefresh; - if (!SelectedTransactions().empty()) - nextRefresh = traceFile.getNextRefresh(SelectedTransactions().front()->id); - else - nextRefresh = traceFile.getNextRefresh(0); + nextRefresh = traceFile.getNextRefresh(time); if (nextRefresh) selectTransaction(nextRefresh); } -void TraceNavigator::selectNextActivate() +void TraceNavigator::selectNextActivate(traceTime time) { shared_ptr nextActivate; - if (!SelectedTransactions().empty()) - nextActivate = traceFile.getNextActivate(SelectedTransactions().front()->id); - else - nextActivate = traceFile.getNextActivate(0); + nextActivate = traceFile.getNextActivate(time); if (nextActivate) selectTransaction(nextActivate); } -void TraceNavigator::selectNextPrecharge() +void TraceNavigator::selectNextPrecharge(traceTime time) { shared_ptr nextPrecharge; - if (!SelectedTransactions().empty()) - nextPrecharge = traceFile.getNextPrecharge( - SelectedTransactions().front()->id); - else - nextPrecharge = traceFile.getNextPrecharge(0); + nextPrecharge = traceFile.getNextPrecharge(time); if (nextPrecharge) selectTransaction(nextPrecharge); } -void TraceNavigator::selectNextActb() +void TraceNavigator::selectNextCommand(traceTime time) { - shared_ptr nextActb; + shared_ptr nextCommand; - if (!SelectedTransactions().empty()) - nextActb = traceFile.getNextActb(SelectedTransactions().front()->id); - else - nextActb = traceFile.getNextActb(0); + nextCommand = traceFile.getNextCommand(time); - if (nextActb) - selectTransaction(nextActb); + if (nextCommand) + selectTransaction(nextCommand); } -void TraceNavigator::selectNextPreb() -{ - shared_ptr nextPreb; - - if (!SelectedTransactions().empty()) - nextPreb = traceFile.getNextPreb( - SelectedTransactions().front()->id); - else - nextPreb = traceFile.getNextPreb(0); - - if (nextPreb) - selectTransaction(nextPreb); -} - -void TraceNavigator::selectNextRefb() -{ - shared_ptr n; - - if (!SelectedTransactions().empty()) - n = traceFile.getNextRefb(SelectedTransactions().front()->id); - else - n = traceFile.getNextRefb(0); - - if (n) - selectTransaction(n); -} +// void TraceNavigator::selectNextActb() +// { +// shared_ptr nextActb; +// +// if (!SelectedTransactions().empty()) +// nextActb = traceFile.getNextActb(SelectedTransactions().front()->id); +// else +// nextActb = traceFile.getNextActb(0); +// +// if (nextActb) +// selectTransaction(nextActb); +// } +// +// void TraceNavigator::selectNextPreb() +// { +// shared_ptr nextPreb; +// +// if (!SelectedTransactions().empty()) +// nextPreb = traceFile.getNextPreb( +// SelectedTransactions().front()->id); +// else +// nextPreb = traceFile.getNextPreb(0); +// +// if (nextPreb) +// selectTransaction(nextPreb); +// } +// +// void TraceNavigator::selectNextRefb() +// { +// shared_ptr n; +// +// if (!SelectedTransactions().empty()) +// n = traceFile.getNextRefb(SelectedTransactions().front()->id); +// else +// n = traceFile.getNextRefb(0); +// +// if (n) +// selectTransaction(n); +// } bool TraceNavigator::transactionIsSelected(const shared_ptr &transaction) const diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.h b/DRAMSys/traceAnalyzer/presentation/tracenavigator.h index 374c3f08..28bc8af7 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracenavigator.h +++ b/DRAMSys/traceAnalyzer/presentation/tracenavigator.h @@ -87,12 +87,13 @@ public: void selectPreviousTransaction(); void selectLastTransaction(); void selectFirstTransaction(); - void selectNextRefresh(); - void selectNextActivate(); - void selectNextPrecharge(); - void selectNextActb(); - void selectNextPreb(); - void selectNextRefb(); + void selectNextRefresh(traceTime time); + void selectNextActivate(traceTime time); + void selectNextPrecharge(traceTime time); + void selectNextCommand(traceTime time); +// void selectNextActb(); +// void selectNextPreb(); +// void selectNextRefb(); void addSelectedTransactions(const std::vector> &transactions); diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp index d00e708f..fef381a1 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp @@ -98,40 +98,42 @@ void TracePlot::setUpActions() SLOT(on_executeQuery())); selectNextRefresh = new QAction("Select next refresh", this); - selectNextRefresh->setShortcut(QKeySequence("alt+r")); addAction(selectNextRefresh); QObject::connect(selectNextRefresh, SIGNAL(triggered()), this, SLOT(on_selectNextRefresh())); selectNextActivate = new QAction("Select next activate", this); - selectNextActivate->setShortcut(QKeySequence("alt+a")); addAction(selectNextActivate); QObject::connect(selectNextActivate, SIGNAL(triggered()), this, SLOT(on_selectNextActivate())); selectNextPrecharge = new QAction("Select next precharge", this); - selectNextPrecharge->setShortcut(QKeySequence("alt+p")); addAction(selectNextPrecharge); QObject::connect(selectNextPrecharge, SIGNAL(triggered()), this, SLOT(on_selectNextPrecharge())); - selectNextActb = new QAction("Select next atcb", this); - selectNextActb->setShortcut(QKeySequence("alt+b")); - addAction(selectNextActb); - QObject::connect(selectNextActb, SIGNAL(triggered()), this, - SLOT(on_selectNextActb())); + selectNextCommand = new QAction("Select next command", this); + addAction(selectNextCommand); + QObject::connect(selectNextCommand, SIGNAL(triggered()), this, + SLOT(on_selectNextCommand())); - selectNextPreb = new QAction("Select next preb", this); - selectNextPreb->setShortcut(QKeySequence("alt+q")); - addAction(selectNextPreb); - QObject::connect(selectNextPreb, SIGNAL(triggered()), this, - SLOT(on_selectNextPreb())); - - selectNextRefb = new QAction("Select next refb", this); - selectNextRefb->setShortcut(QKeySequence("alt+s")); - addAction(selectNextRefb); - QObject::connect(selectNextRefb, SIGNAL(triggered()), this, - SLOT(on_selectNextRefb())); +// selectNextActb = new QAction("Select next atcb", this); +// selectNextActb->setShortcut(QKeySequence("alt+b")); +// addAction(selectNextActb); +// QObject::connect(selectNextActb, SIGNAL(triggered()), this, +// SLOT(on_selectNextActb())); +// +// selectNextPreb = new QAction("Select next preb", this); +// selectNextPreb->setShortcut(QKeySequence("alt+q")); +// addAction(selectNextPreb); +// QObject::connect(selectNextPreb, SIGNAL(triggered()), this, +// SLOT(on_selectNextPreb())); +// +// selectNextRefb = new QAction("Select next refb", this); +// selectNextRefb->setShortcut(QKeySequence("alt+s")); +// addAction(selectNextRefb); +// QObject::connect(selectNextRefb, SIGNAL(triggered()), this, +// SLOT(on_selectNextRefb())); setColorGroupingPhase = new QAction("Group by Phase", this); addAction(setColorGroupingPhase); @@ -176,7 +178,7 @@ void TracePlot::setUpContextMenu() contextMenu->addMenu(goToSubMenu); QMenu *selectSubMenu = new QMenu("Select", contextMenu); - selectSubMenu->addActions({selectNextRefresh, selectNextActivate, selectNextPrecharge, selectNextActb, selectNextPreb, selectNextRefb}); + selectSubMenu->addActions({selectNextRefresh, selectNextActivate, selectNextPrecharge, selectNextCommand /*, selectNextActb, selectNextPreb, selectNextRefb */}); contextMenu->addMenu(selectSubMenu); contextMenu->addActions({showQueryEditor, insertComment, exportToPdf, toggleCollapsedState}); @@ -446,33 +448,42 @@ void TracePlot::on_executeQuery() void TracePlot::on_selectNextRefresh() { - navigator->selectNextRefresh(); + traceTime time = invTransform(xBottom, contextMenuMouseDown.x()); + navigator->selectNextRefresh(time); } void TracePlot::on_selectNextActivate() { - navigator->selectNextActivate(); + traceTime time = invTransform(xBottom, contextMenuMouseDown.x()); + navigator->selectNextActivate(time); } void TracePlot::on_selectNextPrecharge() { - navigator->selectNextPrecharge(); + traceTime time = invTransform(xBottom, contextMenuMouseDown.x()); + navigator->selectNextPrecharge(time); } -void TracePlot::on_selectNextActb() +void TracePlot::on_selectNextCommand() { - navigator->selectNextActb(); + traceTime time = invTransform(xBottom, contextMenuMouseDown.x()); + navigator->selectNextCommand(time); } -void TracePlot::on_selectNextPreb() -{ - navigator->selectNextPreb(); -} - -void TracePlot::on_selectNextRefb() -{ - navigator->selectNextRefb(); -} +// void TracePlot::on_selectNextActb() +// { +// navigator->selectNextActb(); +// } +// +// void TracePlot::on_selectNextPreb() +// { +// navigator->selectNextPreb(); +// } +// +// void TracePlot::on_selectNextRefb() +// { +// navigator->selectNextRefb(); +// } void TracePlot::on_colorGroupingPhase() { diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.h b/DRAMSys/traceAnalyzer/presentation/traceplot.h index 2c2b80ed..2676988d 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.h +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.h @@ -103,9 +103,10 @@ private Q_SLOTS: void on_selectNextRefresh(); void on_selectNextActivate(); void on_selectNextPrecharge(); - void on_selectNextActb(); - void on_selectNextPreb(); - void on_selectNextRefb(); + void on_selectNextCommand(); +// void on_selectNextActb(); +// void on_selectNextPreb(); +// void on_selectNextRefb(); void on_colorGroupingPhase(); void on_colorGroupingTransaction(); void on_colorGroupingThread(); @@ -171,9 +172,10 @@ private: QAction *selectNextRefresh; QAction *selectNextActivate; QAction *selectNextPrecharge; - QAction *selectNextActb; - QAction *selectNextPreb; - QAction *selectNextRefb; + QAction *selectNextCommand; +// QAction *selectNextActb; +// QAction *selectNextPreb; +// QAction *selectNextRefb; QAction *setColorGroupingPhase; QAction *setColorGroupingTransaction; QAction *setColorGroupingThread;