diff --git a/DRAMSys/traceAnalyzer/CMakeLists.txt b/DRAMSys/traceAnalyzer/CMakeLists.txt index e21f2ff0..0216e6da 100644 --- a/DRAMSys/traceAnalyzer/CMakeLists.txt +++ b/DRAMSys/traceAnalyzer/CMakeLists.txt @@ -103,6 +103,7 @@ add_executable(TraceAnalyzer businessObjects/phases/phase.cpp businessObjects/phases/phasedependency.cpp businessObjects/phases/dependencyinfos.cpp + businessObjects/dramTimeDependencies/timedependenciesIF.cpp presentation/tracedrawingproperties.cpp presentation/util/traceplotline.cpp presentation/util/traceplotlinecache.cpp diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.cpp b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.cpp new file mode 100644 index 00000000..89cb4052 --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.cpp @@ -0,0 +1,85 @@ + +#include "timedependenciesIF.h" + +#include + +DRAMTimeDependenciesIF::DRAMTimeDependenciesIF(const TraceDB& tdb) { + mGetMemspec(tdb); + +} + +QMap +DRAMTimeDependenciesIF::getDependencies(const std::vector& commands) const { + QMap dependenciesMap; + + dependenciesMap = mSpecializedGetDependencies(); + + mFilterDependencyMap(dependenciesMap, commands); + + auto it = dependenciesMap.begin(); + while (it != dependenciesMap.end()) { + mFilterDependencyList(it.value().dependencies, commands); + it.value().maxTime = mFindVectorMaximum(it.value().dependencies); + } + + return dependenciesMap; +} + +void DRAMTimeDependenciesIF::mGetMemspec(const TraceDB& tdb) { + QSqlDatabase db = tdb.getDatabase(); + QString query = "SELECT Memspec FROM GeneralInfo"; + QSqlQuery sqlQuery = db.exec(query); + + sqlQuery.next(); + QString memSpecJson = sqlQuery.value(0).toString(); + sqlQuery.finish(); + + QJsonDocument jsonDocument = QJsonDocument::fromJson(memSpecJson.toUtf8()); + mMemspecJson = jsonDocument.object()["memspec"].toObject(); + +} + +void DRAMTimeDependenciesIF::mFilterDependencyList(std::vector& dependencyList, const std::vector& commands) const { + std::vector newDepList(dependencyList.size()); + + std::copy_if( + dependencyList.begin(), + dependencyList.end(), + newDepList.begin(), + [ commands ](const TimeDependency& dep) { + return dep.phaseDep == "NAW" + || ( + std::find_if( + commands.begin(), + commands.end(), + [ dep ](const QString& cmd) { + return dep.phaseDep == cmd; + } + ) != commands.end() ) + ; + } + ); + + newDepList.shrink_to_fit(); + + dependencyList = newDepList; + +} + +void DRAMTimeDependenciesIF::mFilterDependencyMap(QMap& dependencyList, const std::vector& commands) const { + // TODO +} + +size_t DRAMTimeDependenciesIF::mFindVectorMaximum(const std::vector& dependencyList) const { + auto maxElement = std::max_element( + dependencyList.begin(), + dependencyList.end(), + [](const TimeDependency& dep1, const TimeDependency& dep2) { + return dep1.timeValue < dep2.timeValue; + } + ); + + if (maxElement == dependencyList.end()) return 0; + + return maxElement->timeValue; +} diff --git a/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.h b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.h new file mode 100644 index 00000000..7234090d --- /dev/null +++ b/DRAMSys/traceAnalyzer/businessObjects/dramTimeDependencies/timedependenciesIF.h @@ -0,0 +1,44 @@ + +#pragma once + +#include +#include +#include +#include + +#include "data/tracedb.h" +#include "businessObjects/phases/phasedependency.h" + +struct TimeDependency { + size_t timeValue; + QString phaseDep; + DependencyType depType; + QString timeDepName; +}; + +struct PhaseTimeDependencies { + QString phaseName; + std::vector dependencies; + size_t maxTime; +}; + +class DRAMTimeDependenciesIF { +public: + DRAMTimeDependenciesIF(const TraceDB& tdb); + virtual ~DRAMTimeDependenciesIF() = default; + + QMap getDependencies(const std::vector& commands) const; + +protected: + void mFilterDependencyList(std::vector& dependencyList, const std::vector& commands) const; + void mFilterDependencyMap(QMap& dependencyList, const std::vector& commands) const; + size_t mFindVectorMaximum(const std::vector& dependencyList) const; + +protected: + QJsonObject mMemspecJson; + virtual void mInitializeValues() = 0; + virtual QMap mSpecializedGetDependencies() const = 0; + +private: + void mGetMemspec(const TraceDB& tdb); +};