diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp index a7d7ef5a..b4c96316 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp @@ -99,19 +99,22 @@ void Phase::drawPhaseSymbol(traceTime begin, traceTime end, double y, double yVal = yMap.transform(y); double symbolHeight = yMap.transform(0) - yMap.transform(hexagonHeight); + // Increase display size of phases with zero span + traceTime offset = (begin == end) ? static_cast(0.05 * clk) : 0; + if (symbol == PhaseSymbol::Hexagon) { - QPoint hexFrom(xMap.transform(begin), yVal); - QPoint hexTo(xMap.transform(end), yVal); + QPoint hexFrom(static_cast(xMap.transform(begin)), static_cast(yVal)); + QPoint hexTo(static_cast(xMap.transform(end + offset)), static_cast(yVal)); drawHexagon(painter, hexFrom, hexTo, symbolHeight); } else { - QPoint upperLeft(xMap.transform(begin), yVal - symbolHeight / 2); - QPoint bottomRight(xMap.transform(end), yVal + symbolHeight / 2); + QPoint upperLeft(static_cast(xMap.transform(begin)), static_cast(yVal - symbolHeight / 2)); + QPoint bottomRight(static_cast(xMap.transform(end)), static_cast(yVal + symbolHeight / 2)); painter->drawRect(QRect(upperLeft, bottomRight)); } if (drawtext) - drawText(painter, Name(), QPoint(xMap.transform(begin), - yVal + symbolHeight / 2), TextPositioning::bottomRight); + drawText(painter, Name(), QPoint(static_cast(xMap.transform(begin)), + static_cast(yVal + symbolHeight / 2)), TextPositioning::bottomRight); } QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const @@ -149,7 +152,10 @@ Qt::BrushStyle Phase::getBrushStyle() const bool Phase::isSelected(traceTime time, double yVal, const TraceDrawingProperties &drawingProperties) const { - if (span.contains(time)) + // Increase selectable area of phases with zero span + traceTime offset = (span.Begin() == span.End()) ? static_cast(0.05 * clk) : 0; + + if (span.Begin() <= time && time <= (span.End() + offset)) { if (getGranularity() == Granularity::Bankwise) { diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index 3192aed1..b8e52d27 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -53,10 +53,10 @@ class Transaction; class Phase { public: - Phase(ID id, Timespan span, const std::shared_ptr &transaction, + Phase(ID id, Timespan span, traceTime clk, const std::shared_ptr &transaction, std::vector spansOnCommandBus, std::shared_ptr spanOnDataBus): - id(id), span(span), transaction(transaction), + id(id), span(span), clk(clk), transaction(transaction), spansOnCommandBus(spansOnCommandBus), spanOnDataBus(spanOnDataBus), hexagonHeight(0.6), captionPosition(TextPositioning::bottomRight) {} @@ -78,6 +78,7 @@ public: protected: ID id; Timespan span; + traceTime clk; std::shared_ptr transaction; std::vector spansOnCommandBus; std::shared_ptr spanOnDataBus; diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp index 8ea561e5..45be28a6 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phasefactory.cpp @@ -51,66 +51,66 @@ shared_ptr PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName, const CommandLengths &cl = database.getCommandLengths(); if (dbPhaseName == "REQ") - return shared_ptr(new REQ(id, span, trans, {}, std::shared_ptr())); + return shared_ptr(new REQ(id, span, clk, trans, {}, std::shared_ptr())); else if (dbPhaseName == "RESP") - return shared_ptr(new RESP(id, span, trans, {}, std::shared_ptr())); + return shared_ptr(new RESP(id, span, clk, trans, {}, std::shared_ptr())); else if (dbPhaseName == "PREB") - return shared_ptr(new PREB(id, span, trans, + return shared_ptr(new PREB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr())); else if (dbPhaseName == "PRE") - return shared_ptr(new PRE(id, span, trans, + return shared_ptr(new PRE(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PRE)}, std::shared_ptr())); else if (dbPhaseName == "ACTB") - return shared_ptr(new ACTB(id, span, trans, + return shared_ptr(new ACTB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr())); else if (dbPhaseName == "ACT") - return shared_ptr(new ACT(id, span, trans, + return shared_ptr(new ACT(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.ACT)}, std::shared_ptr())); else if (dbPhaseName == "PREA") - return shared_ptr(new PREA(id, span, trans, + return shared_ptr(new PREA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PREA)}, std::shared_ptr())); else if (dbPhaseName == "REFA") - return shared_ptr(new REFA(id, span, trans, + return shared_ptr(new REFA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFA)}, std::shared_ptr())); else if (dbPhaseName == "REFB") - return shared_ptr(new REFB(id, span, trans, + return shared_ptr(new REFB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFB)}, std::shared_ptr())); else if (dbPhaseName == "PRESB") - return shared_ptr(new PRESB(id, span, trans, + return shared_ptr(new PRESB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PRESB)}, std::shared_ptr())); else if (dbPhaseName == "REFSB") - return shared_ptr(new REFSB(id, span, trans, + return shared_ptr(new REFSB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, std::shared_ptr())); else if (dbPhaseName == "RD") - return shared_ptr(new RD(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)}, + return shared_ptr(new RD(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)}, std::shared_ptr(new Timespan(trans->spanOnDataStrobe)))); else if (dbPhaseName == "RDA") - return shared_ptr(new RDA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)}, + return shared_ptr(new RDA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)}, std::shared_ptr(new Timespan(trans->spanOnDataStrobe)))); else if (dbPhaseName == "WR") - return shared_ptr(new WR(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)}, + return shared_ptr(new WR(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)}, std::shared_ptr(new Timespan(trans->spanOnDataStrobe)))); else if (dbPhaseName == "WRA") - return shared_ptr(new WRA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)}, + return shared_ptr(new WRA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)}, std::shared_ptr(new Timespan(trans->spanOnDataStrobe)))); else if (dbPhaseName == "PDNA") - return shared_ptr(new PDNA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA), + return shared_ptr(new PDNA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA), Timespan(span.End() - clk * cl.PDXA, span.End())}, std::shared_ptr())); else if (dbPhaseName == "PDNAB") - return shared_ptr(new PDNAB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk), + return shared_ptr(new PDNAB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk), Timespan(span.End() - clk, span.End())}, std::shared_ptr())); else if (dbPhaseName == "PDNP") - return shared_ptr(new PDNP(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP), + return shared_ptr(new PDNP(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP), Timespan(span.End() - clk * cl.PDXP, span.End())}, std::shared_ptr())); else if (dbPhaseName == "PDNPB") - return shared_ptr(new PDNPB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk), + return shared_ptr(new PDNPB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk), Timespan(span.End() - clk, span.End())}, std::shared_ptr())); else if (dbPhaseName == "SREF") - return shared_ptr(new SREF(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN), + return shared_ptr(new SREF(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN), Timespan(span.End() - clk * cl.SREFEX, span.End())}, std::shared_ptr())); else if (dbPhaseName == "SREFB") - return shared_ptr(new SREFB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk), + return shared_ptr(new SREFB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk), Timespan(span.End() - clk, span.End())}, std::shared_ptr())); else throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");