mirror of
https://github.com/emu-russia/pureikyubu.git
synced 2025-04-02 10:42:15 -04:00
60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#include "pch.h"
|
|
|
|
namespace Debug
|
|
{
|
|
void SamplingProfiler::ThreadProc(void* Parameter)
|
|
{
|
|
SamplingProfiler* profiler = (SamplingProfiler *)Parameter;
|
|
|
|
while (true)
|
|
{
|
|
uint64_t ticks = Gekko::Gekko->GetTicks();
|
|
if (ticks >= (profiler->savedGekkoTbr + profiler->pollingInterval))
|
|
{
|
|
profiler->savedGekkoTbr = ticks;
|
|
|
|
profiler->sampleData->AddUInt64(nullptr, ticks);
|
|
profiler->sampleData->AddUInt32(nullptr, Gekko::Gekko->regs.pc);
|
|
}
|
|
}
|
|
}
|
|
|
|
SamplingProfiler::SamplingProfiler(const char* jsonFileName, int periodMs)
|
|
{
|
|
filename = jsonFileName;
|
|
|
|
pollingInterval = periodMs * Gekko::Gekko->OneMillisecond();
|
|
savedGekkoTbr = Gekko::Gekko->GetTicks();
|
|
|
|
json = new Json();
|
|
|
|
rootObj = json->root.AddObject(nullptr);
|
|
assert(rootObj);
|
|
|
|
sampleData = rootObj->AddArray("sampleData");
|
|
assert(sampleData);
|
|
|
|
thread = new Thread(ThreadProc, false, this, "SamplingProfiler");
|
|
}
|
|
|
|
SamplingProfiler::~SamplingProfiler()
|
|
{
|
|
delete thread;
|
|
|
|
size_t textSize = 0;
|
|
|
|
json->GetSerializedTextSize(nullptr, -1, textSize);
|
|
|
|
uint8_t* jsonText = new uint8_t[2 * textSize];
|
|
assert(jsonText);
|
|
|
|
json->Serialize(jsonText, 2 * textSize, textSize);
|
|
|
|
auto buffer = std::vector<uint8_t>(jsonText, jsonText + textSize);
|
|
Util::FileSave(filename, buffer);
|
|
|
|
delete[] jsonText;
|
|
delete json;
|
|
}
|
|
|
|
}
|