Began adding time dependencies interface for to be generated code.

This commit is contained in:
Iron Prando da Silva
2021-12-08 16:56:52 +01:00
parent 5d4b255197
commit 4e2855785b
3 changed files with 130 additions and 0 deletions

View File

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

View File

@@ -0,0 +1,85 @@
#include "timedependenciesIF.h"
#include <QJsonDocument>
DRAMTimeDependenciesIF::DRAMTimeDependenciesIF(const TraceDB& tdb) {
mGetMemspec(tdb);
}
QMap<QString, PhaseTimeDependencies>
DRAMTimeDependenciesIF::getDependencies(const std::vector<QString>& commands) const {
QMap<QString, PhaseTimeDependencies> 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<TimeDependency>& dependencyList, const std::vector<QString>& commands) const {
std::vector<TimeDependency> 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<QString, PhaseTimeDependencies>& dependencyList, const std::vector<QString>& commands) const {
// TODO
}
size_t DRAMTimeDependenciesIF::mFindVectorMaximum(const std::vector<TimeDependency>& 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;
}

View File

@@ -0,0 +1,44 @@
#pragma once
#include <algorithm>
#include <vector>
#include <QMap>
#include <QJsonObject>
#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<TimeDependency> dependencies;
size_t maxTime;
};
class DRAMTimeDependenciesIF {
public:
DRAMTimeDependenciesIF(const TraceDB& tdb);
virtual ~DRAMTimeDependenciesIF() = default;
QMap<QString, PhaseTimeDependencies> getDependencies(const std::vector<QString>& commands) const;
protected:
void mFilterDependencyList(std::vector<TimeDependency>& dependencyList, const std::vector<QString>& commands) const;
void mFilterDependencyMap(QMap<QString, PhaseTimeDependencies>& dependencyList, const std::vector<QString>& commands) const;
size_t mFindVectorMaximum(const std::vector<TimeDependency>& dependencyList) const;
protected:
QJsonObject mMemspecJson;
virtual void mInitializeValues() = 0;
virtual QMap<QString, PhaseTimeDependencies> mSpecializedGetDependencies() const = 0;
private:
void mGetMemspec(const TraceDB& tdb);
};