RetrieveMemorySnapshots insight worker task

This commit is contained in:
Nav
2022-12-24 02:42:13 +00:00
parent be5127feda
commit 1091966f72
3 changed files with 89 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
#include "RetrieveMemorySnapshots.hpp"
#include <QFile>
#include <QDir>
#include <QStringList>
#include <QJsonDocument>
#include "src/Helpers/Paths.hpp"
#include "src/Helpers/EnumToStringMappings.hpp"
#include "src/Exceptions/Exception.hpp"
#include "src/Logger/Logger.hpp"
namespace Bloom
{
using TargetController::TargetControllerConsole;
RetrieveMemorySnapshots::RetrieveMemorySnapshots(Targets::TargetMemoryType memoryType)
: memoryType(memoryType)
{}
void RetrieveMemorySnapshots::run(TargetControllerConsole& targetControllerConsole) {
emit this->memorySnapshotsRetrieved(this->getSnapshots(this->memoryType));
}
std::vector<MemorySnapshot> RetrieveMemorySnapshots::getSnapshots(Targets::TargetMemoryType memoryType) {
auto snapshotDir = QDir(QString::fromStdString(Paths::projectSettingsDirPath())
+ "/memory_snapshots/" + EnumToStringMappings::targetMemoryTypes.at(memoryType));
if (!snapshotDir.exists()) {
return {};
}
auto snapshots = std::vector<MemorySnapshot>();
const auto snapshotFileEntries = snapshotDir.entryInfoList(QStringList("*.json"), QDir::Files);
for (const auto& snapshotFileEntry : snapshotFileEntries) {
auto snapshotFile = QFile(snapshotFileEntry.absoluteFilePath());
try {
if (!snapshotFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
throw Exceptions::Exception("Failed to open snapshot file");
}
snapshots.emplace_back(QJsonDocument::fromJson(snapshotFile.readAll()).object());
} catch (const Exceptions::Exception& exception) {
Logger::error(
"Failed to load snapshot " + snapshotFileEntry.absoluteFilePath().toStdString() + " - "
+ exception.getMessage()
);
}
snapshotFile.close();
}
return snapshots;
}
}

View File

@@ -0,0 +1,30 @@
#pragma once
#include <vector>
#include "InsightWorkerTask.hpp"
#include "src/Targets/TargetMemory.hpp"
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/MemorySnapshot.hpp"
namespace Bloom
{
class RetrieveMemorySnapshots: public InsightWorkerTask
{
Q_OBJECT
public:
RetrieveMemorySnapshots(Targets::TargetMemoryType memoryType);
signals:
void memorySnapshotsRetrieved(std::vector<MemorySnapshot> snapshots);
protected:
void run(TargetController::TargetControllerConsole& targetControllerConsole) override;
private:
Targets::TargetMemoryType memoryType;
std::vector<MemorySnapshot> getSnapshots(Targets::TargetMemoryType memoryType);
};
}