Merge branch 'work/select_commands' into 'develop'

Fix select next transacion and use current time instead of ID

See merge request ems/astdm/dram.sys!307
This commit is contained in:
Lukas Steiner
2021-09-07 12:15:37 +00:00
6 changed files with 167 additions and 138 deletions

View File

@@ -149,76 +149,90 @@ shared_ptr<Transaction> TraceDB::getTransactionByID(ID id)
}
shared_ptr<Transaction> TraceDB::getNextActivate(ID currentTransactionId)
shared_ptr<Transaction> 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<Transaction> TraceDB::getNextPrecharge(ID currentTransactionId)
shared_ptr<Transaction> 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<Transaction> TraceDB::getNextActb(ID currentTransactionId)
// shared_ptr<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> TraceDB::getNextPreb(ID currentTransactionId)
std::shared_ptr<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> 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)
{

View File

@@ -86,12 +86,13 @@ public:
QString queryText);
std::vector<std::shared_ptr<Transaction>> getTransactionsInTimespan(
const Timespan &span);
std::shared_ptr<Transaction> getNextPrecharge(ID currentTransactionId);
std::shared_ptr<Transaction> getNextActivate(ID currentTransactionId);
std::shared_ptr<Transaction> getNextRefresh(ID currentTransactionId);
std::shared_ptr<Transaction> getNextPreb(ID currentTransactionId);
std::shared_ptr<Transaction> getNextActb(ID currentTransactionId);
std::shared_ptr<Transaction> getNextRefb(ID currentTransactionId);
std::shared_ptr<Transaction> getNextPrecharge(traceTime time);
std::shared_ptr<Transaction> getNextActivate(traceTime time);
std::shared_ptr<Transaction> getNextRefresh(traceTime time);
std::shared_ptr<Transaction> getNextCommand(traceTime time);
// std::shared_ptr<Transaction> getNextPreb(ID currentTransactionId);
// std::shared_ptr<Transaction> getNextActb(ID currentTransactionId);
// std::shared_ptr<Transaction> getNextRefb(ID currentTransactionId);
std::shared_ptr<Transaction> getTransactionByID(ID id);

View File

@@ -201,85 +201,85 @@ void TraceNavigator::selectLastTransaction()
}
void TraceNavigator::selectNextRefresh()
void TraceNavigator::selectNextRefresh(traceTime time)
{
shared_ptr<Transaction> 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<Transaction> 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<Transaction> 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<Transaction> nextActb;
shared_ptr<Transaction> 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<Transaction> nextPreb;
if (!SelectedTransactions().empty())
nextPreb = traceFile.getNextPreb(
SelectedTransactions().front()->id);
else
nextPreb = traceFile.getNextPreb(0);
if (nextPreb)
selectTransaction(nextPreb);
}
void TraceNavigator::selectNextRefb()
{
shared_ptr<Transaction> n;
if (!SelectedTransactions().empty())
n = traceFile.getNextRefb(SelectedTransactions().front()->id);
else
n = traceFile.getNextRefb(0);
if (n)
selectTransaction(n);
}
// void TraceNavigator::selectNextActb()
// {
// shared_ptr<Transaction> nextActb;
//
// if (!SelectedTransactions().empty())
// nextActb = traceFile.getNextActb(SelectedTransactions().front()->id);
// else
// nextActb = traceFile.getNextActb(0);
//
// if (nextActb)
// selectTransaction(nextActb);
// }
//
// void TraceNavigator::selectNextPreb()
// {
// shared_ptr<Transaction> nextPreb;
//
// if (!SelectedTransactions().empty())
// nextPreb = traceFile.getNextPreb(
// SelectedTransactions().front()->id);
// else
// nextPreb = traceFile.getNextPreb(0);
//
// if (nextPreb)
// selectTransaction(nextPreb);
// }
//
// void TraceNavigator::selectNextRefb()
// {
// shared_ptr<Transaction> 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>
&transaction) const

View File

@@ -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<std::shared_ptr<Transaction>>
&transactions);

View File

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

View File

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