diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp index a4393318..a7d7ef5a 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp @@ -63,23 +63,32 @@ void Phase::draw(QPainter *painter, const QwtScaleMap &xMap, painter->setPen(pen); } - if (!isBankwise()) { + if (getGranularity() == Granularity::Rankwise) + { for (int i = getYVal(drawingProperties); i < (int)(getYVal(drawingProperties) + drawingProperties.banksPerRank); i++) drawPhaseSymbol(span.Begin(), span.End(), i, drawingProperties.drawText, getPhaseSymbol(), painter, xMap, yMap); - } else + } + else if (getGranularity() == Granularity::Groupwise) + { + for (int i = getYVal(drawingProperties); i < (int)(getYVal(drawingProperties) + drawingProperties.banksPerRank); i += drawingProperties.banksPerGroup) + drawPhaseSymbol(span.Begin(), span.End(), i, drawingProperties.drawText, + getPhaseSymbol(), painter, xMap, yMap); + } + else // if (getGranularity() == Granularity::Bankwise) drawPhaseSymbol(span.Begin(), span.End(), getYVal(drawingProperties), drawingProperties.drawText, getPhaseSymbol(), painter, xMap, yMap); - for (Timespan span : spansOnCommandBus) { + for (Timespan span : spansOnCommandBus) + { drawPhaseSymbol(span.Begin(), span.End(), drawingProperties.yValCommandBus, false, PhaseSymbol::Hexagon, painter, xMap, yMap); } - if (spanOnDataBus) { - drawPhaseSymbol(spanOnDataBus->Begin(), spanOnDataBus->End(), - drawingProperties.yValDataBus, false, PhaseSymbol::Hexagon, painter, xMap, - yMap); + if (spanOnDataBus) + { + drawPhaseSymbol(spanOnDataBus->Begin(), spanOnDataBus->End(), drawingProperties.yValDataBus, + false, PhaseSymbol::Hexagon, painter, xMap, yMap); } } @@ -88,7 +97,7 @@ void Phase::drawPhaseSymbol(traceTime begin, traceTime end, double y, const QwtScaleMap &yMap) const { double yVal = yMap.transform(y); - double symbolHeight = yMap.transform(0) - yMap.transform(hexagonHeigth); + double symbolHeight = yMap.transform(0) - yMap.transform(hexagonHeight); if (symbol == PhaseSymbol::Hexagon) { QPoint hexFrom(xMap.transform(begin), yVal); @@ -123,9 +132,12 @@ QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const int Phase::getYVal(const TraceDrawingProperties &drawingProperties) const { - if (isBankwise()) + if (getGranularity() == Granularity::Bankwise) return transaction->bank; - else + else if (getGranularity() == Granularity::Groupwise) + return transaction->rank * drawingProperties.banksPerRank + + transaction->bank % drawingProperties.banksPerGroup; + else // if (getGranularity() == Granularity::Rankwise) return transaction->rank * drawingProperties.banksPerRank; } @@ -135,18 +147,39 @@ Qt::BrushStyle Phase::getBrushStyle() const } bool Phase::isSelected(traceTime time, double yVal, - const TraceDrawingProperties &drawingproperties) const + const TraceDrawingProperties &drawingProperties) const { - if (span.contains(time) && (!this->isBankwise() - || fabs(yVal - getYVal(drawingproperties)) <= hexagonHeigth)) - return true; - if (spanOnDataBus && spanOnDataBus->contains(time) - && fabs(yVal - drawingproperties.yValDataBus) <= hexagonHeigth) + if (span.contains(time)) + { + if (getGranularity() == Granularity::Bankwise) + { + if (fabs(yVal - getYVal(drawingProperties)) <= hexagonHeight) + return true; + } + else if (getGranularity() == Granularity::Groupwise) + { + for (int offset = 0; offset < drawingProperties.banksPerRank; offset += drawingProperties.banksPerGroup) + { + if (fabs(yVal - (getYVal(drawingProperties) + offset)) <= hexagonHeight) + return true; + } + } + else // if (getGranularity() == Granularity::Rankwise) + { + for (int offset = 0; offset < drawingProperties.banksPerRank; offset++) + { + if (fabs(yVal - (getYVal(drawingProperties) + offset)) <= hexagonHeight) + return true; + } + } + } + + if (spanOnDataBus && spanOnDataBus->contains(time) && fabs(yVal - drawingProperties.yValDataBus) <= hexagonHeight) return true; for (Timespan span : spansOnCommandBus) { if (span.contains(time) - && fabs(yVal - drawingproperties.yValCommandBus) <= hexagonHeigth) + && fabs(yVal - drawingProperties.yValCommandBus) <= hexagonHeight) return true; } diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index eb269c3f..0b3274bb 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -58,7 +58,7 @@ public: std::shared_ptr spanOnDataBus): id(id), span(span), transaction(transaction), spansOnCommandBus(spansOnCommandBus), spanOnDataBus(spanOnDataBus), - hexagonHeigth(0.6), captionPosition(TextPositioning::bottomRight) {} + hexagonHeight(0.6), captionPosition(TextPositioning::bottomRight) {} void draw(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, bool highlight, @@ -74,10 +74,6 @@ public: return id; } virtual QString Name() const = 0; - virtual bool isBankwise() const - { - return true; - } protected: ID id; @@ -85,7 +81,7 @@ protected: std::shared_ptr transaction; std::vector spansOnCommandBus; std::shared_ptr spanOnDataBus; - double hexagonHeigth; + double hexagonHeight; TextPositioning captionPosition; enum PhaseSymbol {Hexagon, Rect}; @@ -98,6 +94,12 @@ protected: bool drawtext, PhaseSymbol symbol, QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap) const; + enum class Granularity {Bankwise, Groupwise, Rankwise}; + + virtual Granularity getGranularity() const + { + return Granularity::Bankwise; + } }; class REQ : public Phase @@ -297,9 +299,9 @@ protected: { return "REFA"; } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Rankwise; } }; @@ -323,9 +325,9 @@ protected: { return "REFSB"; } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Groupwise; } }; @@ -351,9 +353,9 @@ protected: { return ColorGenerator::getColor(10); } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Rankwise; } }; @@ -394,9 +396,9 @@ protected: { return "PDNA"; } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Rankwise; } }; @@ -437,9 +439,9 @@ protected: { return "PDNP"; } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Rankwise; } }; @@ -480,9 +482,9 @@ protected: { return "SREF"; } - virtual bool isBankwise() const override + virtual Granularity getGranularity() const override { - return false; + return Granularity::Rankwise; } };