Refactored hex viewer in preparation for snapshot viewer and diffs.
Before this refactor, the hex viewer was consuming far too much RAM and wasn't scaling very well. It can now handle data inspection up to 5MB (way more than we need), comfortably
This commit is contained in:
@@ -1,45 +0,0 @@
|
||||
#include "ConstructHexViewerByteItems.hpp"
|
||||
|
||||
#include <QMetaType>
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
ConstructHexViewerByteItems::ConstructHexViewerByteItems(
|
||||
const Targets::TargetMemoryDescriptor& memoryDescriptor,
|
||||
std::optional<Targets::TargetStackPointer>& currentStackPointer,
|
||||
Widgets::ByteItem** hoveredByteItem,
|
||||
std::set<Widgets::ByteItem*>& highlightedByteItems,
|
||||
Widgets::HexViewerWidgetSettings& settings
|
||||
)
|
||||
: memoryDescriptor(memoryDescriptor)
|
||||
, currentStackPointer(currentStackPointer)
|
||||
, hoveredByteItem(hoveredByteItem)
|
||||
, highlightedByteItems(highlightedByteItems)
|
||||
, settings(settings)
|
||||
{
|
||||
qRegisterMetaType<std::map<Targets::TargetMemoryAddress, Widgets::ByteItem*>>();
|
||||
}
|
||||
|
||||
void ConstructHexViewerByteItems::run(Services::TargetControllerService&) {
|
||||
const auto memorySize = this->memoryDescriptor.size();
|
||||
const auto startAddress = this->memoryDescriptor.addressRange.startAddress;
|
||||
|
||||
for (Targets::TargetMemorySize i = 0; i < memorySize; i++) {
|
||||
const auto address = startAddress + i;
|
||||
|
||||
this->byteItemsByAddress.emplace(
|
||||
address,
|
||||
new Widgets::ByteItem(
|
||||
i,
|
||||
address,
|
||||
this->currentStackPointer,
|
||||
this->hoveredByteItem,
|
||||
this->highlightedByteItems,
|
||||
settings
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
emit this->byteItems(std::move(this->byteItemsByAddress));
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
#include <set>
|
||||
|
||||
#include "InsightWorkerTask.hpp"
|
||||
#include "src/Targets/TargetMemory.hpp"
|
||||
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidgetSettings.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/FocusedMemoryRegion.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/ExcludedMemoryRegion.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/Label.hpp"
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
class ConstructHexViewerByteItems: public InsightWorkerTask
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ConstructHexViewerByteItems(
|
||||
const Targets::TargetMemoryDescriptor& memoryDescriptor,
|
||||
std::optional<Targets::TargetStackPointer>& currentStackPointer,
|
||||
Widgets::ByteItem** hoveredByteItem,
|
||||
std::set<Widgets::ByteItem*>& highlightedByteItems,
|
||||
Widgets::HexViewerWidgetSettings& settings
|
||||
);
|
||||
|
||||
TaskGroups getTaskGroups() const override {
|
||||
return TaskGroups();
|
||||
};
|
||||
|
||||
signals:
|
||||
void sceneCreated(Widgets::ByteItemGraphicsScene* scene);
|
||||
void byteItems(std::map<Targets::TargetMemoryAddress, Widgets::ByteItem*> byteItemsByAddress);
|
||||
|
||||
protected:
|
||||
void run(Services::TargetControllerService&) override;
|
||||
|
||||
private:
|
||||
std::map<Targets::TargetMemoryAddress, Widgets::ByteItem*> byteItemsByAddress;
|
||||
|
||||
const Targets::TargetMemoryDescriptor& memoryDescriptor;
|
||||
std::optional<Targets::TargetStackPointer>& currentStackPointer;
|
||||
Widgets::ByteItem** hoveredByteItem;
|
||||
std::set<Widgets::ByteItem*>& highlightedByteItems;
|
||||
Widgets::HexViewerWidgetSettings& settings;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "ConstructHexViewerTopLevelGroupItem.hpp"
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
ConstructHexViewerTopLevelGroupItem::ConstructHexViewerTopLevelGroupItem(
|
||||
const std::vector<FocusedMemoryRegion>& focusedMemoryRegions,
|
||||
const Widgets::HexViewerSharedState& hexViewerState
|
||||
)
|
||||
: focusedMemoryRegions(focusedMemoryRegions)
|
||||
, hexViewerState(hexViewerState)
|
||||
{}
|
||||
|
||||
void ConstructHexViewerTopLevelGroupItem::run(Services::TargetControllerService&) {
|
||||
auto* item = new Widgets::TopLevelGroupItem(this->focusedMemoryRegions, this->hexViewerState);
|
||||
item->rebuildItemHierarchy();
|
||||
|
||||
emit this->topLevelGroupItem(item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "InsightWorkerTask.hpp"
|
||||
#include "src/Targets/TargetMemory.hpp"
|
||||
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/TopLevelGroupItem.hpp"
|
||||
#include "src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerSharedState.hpp"
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
class ConstructHexViewerTopLevelGroupItem: public InsightWorkerTask
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ConstructHexViewerTopLevelGroupItem(
|
||||
const std::vector<FocusedMemoryRegion>& focusedMemoryRegions,
|
||||
const Widgets::HexViewerSharedState& hexViewerState
|
||||
);
|
||||
|
||||
TaskGroups getTaskGroups() const override {
|
||||
return TaskGroups();
|
||||
};
|
||||
|
||||
signals:
|
||||
void topLevelGroupItem(Widgets::TopLevelGroupItem* item);
|
||||
|
||||
protected:
|
||||
void run(Services::TargetControllerService&) override;
|
||||
|
||||
private:
|
||||
const Widgets::HexViewerSharedState& hexViewerState;
|
||||
const std::vector<FocusedMemoryRegion>& focusedMemoryRegions;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user