diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index ce474fe8..cca1cf9a 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -116,7 +116,7 @@ protected: friend class PhaseDependency; }; -class REQ : public Phase +class REQ final : public Phase { public: using Phase::Phase; @@ -136,8 +136,7 @@ protected: } }; - -class RESP : public Phase +class RESP final : public Phase { public: using Phase::Phase; @@ -158,7 +157,7 @@ protected: }; /* -class PREB: public Phase +class PREB final : public Phase { public: using Phase::Phase; @@ -173,7 +172,7 @@ protected: } }; */ -class PREPB : public Phase +class PREPB final : public Phase { public: using Phase::Phase; @@ -188,7 +187,7 @@ protected: } }; -class PRESB : public Phase +class PRESB final : public Phase { public: using Phase::Phase; @@ -216,7 +215,7 @@ protected: } }; -class PREAB : public Phase +class PREAB final : public Phase { public: using Phase::Phase; @@ -244,7 +243,7 @@ protected: } }; /* -class ACTB : public Phase +class ACTB final : public Phase { public: using Phase::Phase; @@ -259,7 +258,7 @@ protected: } }; */ -class ACT : public Phase +class ACT final : public Phase { public: using Phase::Phase; @@ -274,7 +273,7 @@ protected: } }; -class RD : public Phase +class RD final : public Phase { public: using Phase::Phase; @@ -289,7 +288,7 @@ protected: } }; -class RDA : public Phase +class RDA final : public Phase { public: using Phase::Phase; @@ -304,7 +303,7 @@ protected: } }; -class WR : public Phase +class WR final : public Phase { public: using Phase::Phase; @@ -319,7 +318,7 @@ protected: } }; -class WRA : public Phase +class WRA final : public Phase { public: using Phase::Phase; @@ -360,7 +359,7 @@ protected: } }; -class REFAB : public AUTO_REFRESH +class REFAB final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -375,7 +374,7 @@ protected: } }; -class RFMAB : public AUTO_REFRESH +class RFMAB final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -396,8 +395,7 @@ protected: } }; - -class REFPB : public AUTO_REFRESH +class REFPB final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -408,7 +406,7 @@ protected: } }; -class REFP2B : public AUTO_REFRESH +class REFP2B final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -423,7 +421,7 @@ protected: } }; -class RFMP2B : public AUTO_REFRESH +class RFMP2B final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -444,7 +442,7 @@ protected: } }; -class REFSB : public AUTO_REFRESH +class REFSB final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -459,7 +457,7 @@ protected: } }; -class RFMSB : public AUTO_REFRESH +class RFMSB final : public AUTO_REFRESH { public: using AUTO_REFRESH::AUTO_REFRESH; @@ -484,6 +482,8 @@ class PDNAB : public Phase { public: using Phase::Phase; + virtual ~PDNAB() = default; + protected: QString Name() const override { @@ -508,7 +508,7 @@ protected: } }; -class PDNA : public PDNAB +class PDNA final : public PDNAB { public: using PDNAB::PDNAB; @@ -527,6 +527,8 @@ class PDNPB : public Phase { public: using Phase::Phase; + virtual ~PDNPB() = default; + protected: QString Name() const override { @@ -551,7 +553,7 @@ protected: } }; -class PDNP : public PDNPB +class PDNP final : public PDNPB { public: using PDNPB::PDNPB; @@ -570,6 +572,8 @@ class SREFB : public Phase { public: using Phase::Phase; + virtual ~SREFB() = default; + protected: QString Name() const override { diff --git a/DRAMSys/traceAnalyzer/data/tracedb.cpp b/DRAMSys/traceAnalyzer/data/tracedb.cpp index 5564d843..6d79a2c8 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.cpp +++ b/DRAMSys/traceAnalyzer/data/tracedb.cpp @@ -334,101 +334,80 @@ GeneralInfo TraceDB::getGeneralInfoFromDB() CommandLengths TraceDB::getCommandLengthsFromDB() { - QVariant parameter; - parameter = getParameterFromTable("NOP", "CommandLengths"); - unsigned NOP = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("RD", "CommandLengths"); - unsigned RD = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("WR", "CommandLengths"); - unsigned WR = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("RDA", "CommandLengths"); - unsigned RDA = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("WRA", "CommandLengths"); - unsigned WRA = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("ACT", "CommandLengths"); - unsigned ACT = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PREPB", "CommandLengths"); - unsigned PREPB; - if (parameter.isValid()) + const std::string table = "CommandLengths"; + + auto getLengthFromDb = [=, &table](const std::string &command) -> QVariant { - PREPB = parameter.toUInt(); - } - else - { - parameter = getParameterFromTable("PRE", "CommandLengths"); - if (parameter.isValid()) - PREPB = parameter.toUInt(); + QSqlQuery query(("SELECT Length FROM " + table + " WHERE Command = \"" + command + "\"").c_str(), database); + + if (query.first()) + return query.value(0); else - PREPB = 1; - } - parameter = getParameterFromTable("REFPB", "CommandLengths"); - unsigned REFPB; - if (parameter.isValid()) + return {}; + }; + + auto getCommandLength = [=, &table](const std::string &command) -> unsigned { - REFPB = parameter.toUInt(); - } - else - { - parameter = getParameterFromTable("REFB", "CommandLengths"); - if (parameter.isValid()) - REFPB = parameter.toUInt(); + QVariant length = getLengthFromDb(command); + + if (length.isValid()) + return length.toUInt(); else - REFPB = 1; - } - parameter = getParameterFromTable("RFMPB", "CommandLengths"); - unsigned RFMPB = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("REFP2B", "CommandLengths"); - unsigned REFP2B = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("RFMP2B", "CommandLengths"); - unsigned RFMP2B = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PRESB", "CommandLengths"); - unsigned PRESB = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("REFSB", "CommandLengths"); - unsigned REFSB = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("RFMSB", "CommandLengths"); - unsigned RFMSB = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PREAB", "CommandLengths"); - unsigned PREAB; - if (parameter.isValid()) + { + qDebug() << "CommandLength for" << command.c_str() << "not present in table" << table.c_str() + << ". Defaulting to 1."; + return 1; + } + }; + + auto getCommandLengthOrElse = [=, &table](const std::string &command, const std::string &elseCommand) -> unsigned { - PREAB = parameter.toUInt(); - } - else - { - parameter = getParameterFromTable("PREA", "CommandLengths"); - if (parameter.isValid()) - PREAB = parameter.toUInt(); + QVariant length = getLengthFromDb(command); + + if (length.isValid()) + return length.toUInt(); else - PREAB = 1; - } - parameter = getParameterFromTable("REFAB", "CommandLengths"); - unsigned REFAB; - if (parameter.isValid()) - { - REFAB = parameter.toUInt(); - } - else - { - parameter = getParameterFromTable("REFA", "CommandLengths"); - if (parameter.isValid()) - REFAB = parameter.toUInt(); - else - REFAB = 1; - } - parameter = getParameterFromTable("RFMAB", "CommandLengths"); - unsigned RFMAB = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PDEA", "CommandLengths"); - unsigned PDEA = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PDXA", "CommandLengths"); - unsigned PDXA = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PDEP", "CommandLengths"); - unsigned PDEP = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("PDXP", "CommandLengths"); - unsigned PDXP = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("SREFEN", "CommandLengths"); - unsigned SREFEN = parameter.isValid() ? parameter.toUInt() : 1; - parameter = getParameterFromTable("SREFEX", "CommandLengths"); - unsigned SREFEX = parameter.isValid() ? parameter.toUInt() : 1; + { + length = getLengthFromDb(command); + + if (length.isValid()) + return length.toUInt(); + else + { + qDebug() << "CommandLength for" << command.c_str() << "and" << elseCommand.c_str() + << "not present in table" << table.c_str() << ". Defaulting to 1."; + return 1; + } + } + }; + + unsigned NOP = getCommandLength("NOP"); + unsigned RD = getCommandLength("RD"); + unsigned WR = getCommandLength("RD"); + unsigned RDA = getCommandLength("RDA"); + unsigned WRA = getCommandLength("WRA"); + unsigned ACT = getCommandLength("ACT"); + + unsigned PREPB = getCommandLengthOrElse("PREPB", "PRE"); + unsigned REFPB = getCommandLengthOrElse("REFPB", "REFB"); + + unsigned RFMPB = getCommandLength("RFMPB"); + unsigned REFP2B = getCommandLength("REFP2B"); + unsigned RFMP2B = getCommandLength("RFMP2B"); + unsigned PRESB = getCommandLength("PRESB"); + unsigned REFSB = getCommandLength("REFSB"); + unsigned RFMSB = getCommandLength("RFMSB"); + + unsigned PREAB = getCommandLengthOrElse("PREAB", "PREA"); + unsigned REFAB = getCommandLengthOrElse("REFAB", "REFA"); + + unsigned RFMAB = getCommandLength("RFMAB"); + unsigned PDEA = getCommandLength("PDEA"); + unsigned PDXA = getCommandLength("PDXA"); + unsigned PDEP = getCommandLength("PDEP"); + unsigned PDXP = getCommandLength("PDXP"); + unsigned SREFEN = getCommandLength("SREFEN"); + unsigned SREFEX = getCommandLength("SREFEX"); return {NOP, RD, WR, RDA, WRA, ACT, PREPB, REFPB, RFMPB, REFP2B, RFMP2B, PRESB, REFSB, RFMSB, PREAB, REFAB, RFMAB, PDEA, PDXA, PDEP, PDXP, SREFEN, SREFEX}; diff --git a/DRAMSys/traceAnalyzer/data/tracedb.h b/DRAMSys/traceAnalyzer/data/tracedb.h index 8b759f24..0ee3e3cb 100644 --- a/DRAMSys/traceAnalyzer/data/tracedb.h +++ b/DRAMSys/traceAnalyzer/data/tracedb.h @@ -115,7 +115,7 @@ private: QString pathToDB; QSqlDatabase database; GeneralInfo generalInfo; - CommandLengths commandLengths{}; + CommandLengths commandLengths; QSqlQuery insertPhaseQuery; QSqlQuery insertTransactionQuery;