diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/DRAMSys/traceAnalyzer/data/tracedb.cpp index 3d32946b..ffd9ede3 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.cpp +++ b/DRAMSys/traceAnalyzer/data/tracedb.cpp @@ -149,26 +149,28 @@ 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); } @@ -197,13 +199,25 @@ shared_ptr TraceDB::getNextPrecharge(ID currentTransactionId) // return parseTransactionFromQuery(query); // } -shared_ptr TraceDB::getNextRefresh(ID currentTransactionId) +shared_ptr TraceDB::getNextRefresh(traceTime time) { QSqlQuery query(database); QString queryText = queryTexts.queryHead + - "WHERE TransactionID > :currentID AND PhaseName IN ('REFA') 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); +} + +std::shared_ptr TraceDB::getNextCommand(traceTime time) +{ + QSqlQuery query(database); + QString queryText = queryTexts.queryHead + + "WHERE PhaseBegin > :traceTime ORDER BY PhaseBegin ASC LIMIT 1"; + query.prepare(queryText); + query.bindValue(":traceTime", time); executeQuery(query); return parseTransactionFromQuery(query); } diff --git a/DRAMSys/traceAnalyzer/data/tracedb.h b/DRAMSys/traceAnalyzer/data/tracedb.h index 74c0176e..fcce5a48 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.h +++ b/DRAMSys/traceAnalyzer/data/tracedb.h @@ -86,9 +86,10 @@ 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 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); diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp index 592601b5..13b0526c 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp @@ -201,46 +201,46 @@ 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::selectNextCommand(traceTime time) +{ + shared_ptr nextCommand; + + nextCommand = traceFile.getNextCommand(time); + + if (nextCommand) + selectTransaction(nextCommand); +} + // void TraceNavigator::selectNextActb() // { // shared_ptr nextActb; 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 5636ff39..d2a25e5b 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp @@ -97,23 +97,25 @@ 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())); + selectNextCommand = new QAction("Select next command", this); + addAction(selectNextCommand); + QObject::connect(selectNextCommand, SIGNAL(triggered()), this, + SLOT(on_selectNextCommand())); + // selectNextActb = new QAction("Select next atcb", this); // selectNextActb->setShortcut(QKeySequence("alt+b")); // addAction(selectNextActb); @@ -169,7 +171,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}); @@ -427,17 +429,26 @@ 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_selectNextCommand() +{ + traceTime time = invTransform(xBottom, contextMenuMouseDown.x()); + navigator->selectNextCommand(time); } // void TracePlot::on_selectNextActb() diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.h b/DRAMSys/traceAnalyzer/presentation/traceplot.h index 9fb4253b..72e44ba2 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.h +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.h @@ -101,6 +101,7 @@ private Q_SLOTS: void on_selectNextRefresh(); void on_selectNextActivate(); void on_selectNextPrecharge(); + void on_selectNextCommand(); // void on_selectNextActb(); // void on_selectNextPreb(); // void on_selectNextRefb(); @@ -168,6 +169,7 @@ private: QAction *selectNextRefresh; QAction *selectNextActivate; QAction *selectNextPrecharge; + QAction *selectNextCommand; // QAction *selectNextActb; // QAction *selectNextPreb; // QAction *selectNextRefb;