Began adding time dependencies interface for to be generated code.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
Reference in New Issue
Block a user