Json telemetry
All checks were successful
CI / React UI Build (push) Successful in 11s
CI / Native Windows Build And Tests (push) Successful in 2m52s
CI / Windows Release Package (push) Successful in 3m19s

This commit is contained in:
Aiden
2026-05-12 12:13:21 +10:00
parent 44b198b14d
commit 79f7ac6c86
7 changed files with 536 additions and 0 deletions

View File

@@ -1,4 +1,5 @@
#include "CadenceTelemetry.h"
#include "CadenceTelemetryJson.h"
#include <chrono>
#include <cstdint>
@@ -128,12 +129,60 @@ void TestTelemetryComputesRatesFromDeltas()
Expect(snapshot.renderFps > 0.0, "render fps is computed from completed frame delta");
Expect(snapshot.scheduleFps > 0.0, "schedule fps is computed from scheduled frame delta");
}
void TestTelemetrySerializesToJson()
{
RenderCadenceCompositor::CadenceTelemetrySnapshot snapshot;
snapshot.sampleSeconds = 1.0;
snapshot.renderFps = 59.94;
snapshot.scheduleFps = 60.0;
snapshot.freeFrames = 7;
snapshot.completedFrames = 1;
snapshot.scheduledFrames = 4;
snapshot.renderedTotal = 120;
snapshot.scheduledTotal = 118;
snapshot.completedPollMisses = 3;
snapshot.scheduleFailures = 0;
snapshot.completions = 117;
snapshot.displayedLate = 1;
snapshot.dropped = 2;
snapshot.shaderBuildsCommitted = 1;
snapshot.shaderBuildFailures = 0;
snapshot.deckLinkBufferedAvailable = true;
snapshot.deckLinkBuffered = 4;
snapshot.deckLinkScheduleCallMilliseconds = 1.25;
const std::string json = RenderCadenceCompositor::CadenceTelemetryToJson(snapshot);
const std::string expected =
"{\"sampleSeconds\":1,\"renderFps\":59.94,\"scheduleFps\":60,"
"\"free\":7,\"completed\":1,\"scheduled\":4,"
"\"renderedTotal\":120,\"scheduledTotal\":118,"
"\"completedPollMisses\":3,\"scheduleFailures\":0,"
"\"completions\":117,\"late\":1,\"dropped\":2,"
"\"shaderCommitted\":1,\"shaderFailures\":0,"
"\"deckLinkBufferedAvailable\":true,\"deckLinkBuffered\":4,"
"\"scheduleCallMs\":1.25}";
Expect(json == expected, "telemetry snapshot serializes to stable JSON");
}
void TestUnavailableDeckLinkBufferSerializesAsNull()
{
RenderCadenceCompositor::CadenceTelemetrySnapshot snapshot;
snapshot.deckLinkBufferedAvailable = false;
const std::string json = RenderCadenceCompositor::CadenceTelemetryToJson(snapshot);
Expect(
json.find("\"deckLinkBufferedAvailable\":false,\"deckLinkBuffered\":null") != std::string::npos,
"unavailable DeckLink buffer depth serializes as null");
}
}
int main()
{
TestTelemetrySamplesCompletedPollMissesAndShaderCounts();
TestTelemetryComputesRatesFromDeltas();
TestTelemetrySerializesToJson();
TestUnavailableDeckLinkBufferSerializesAsNull();
if (gFailures != 0)
{