#pragma once #include "CadenceTelemetry.h" #include "../json/JsonWriter.h" #include #include namespace RenderCadenceCompositor { inline void WriteCadenceTelemetryJson(JsonWriter& writer, const CadenceTelemetrySnapshot& snapshot) { writer.BeginObject(); writer.KeyDouble("sampleSeconds", snapshot.sampleSeconds); writer.KeyDouble("renderFps", snapshot.renderFps); writer.KeyDouble("scheduleFps", snapshot.scheduleFps); writer.KeyUInt("free", static_cast(snapshot.freeFrames)); writer.KeyUInt("completed", static_cast(snapshot.completedFrames)); writer.KeyUInt("scheduled", static_cast(snapshot.scheduledFrames)); writer.KeyUInt("renderedTotal", snapshot.renderedTotal); writer.KeyUInt("scheduledTotal", snapshot.scheduledTotal); writer.KeyUInt("completedPollMisses", snapshot.completedPollMisses); writer.KeyUInt("scheduleFailures", snapshot.scheduleFailures); writer.KeyUInt("completions", snapshot.completions); writer.KeyUInt("late", snapshot.displayedLate); writer.KeyUInt("dropped", snapshot.dropped); writer.KeyUInt("shaderCommitted", snapshot.shaderBuildsCommitted); writer.KeyUInt("shaderFailures", snapshot.shaderBuildFailures); writer.KeyBool("deckLinkBufferedAvailable", snapshot.deckLinkBufferedAvailable); writer.Key("deckLinkBuffered"); if (snapshot.deckLinkBufferedAvailable) writer.UInt(snapshot.deckLinkBuffered); else writer.Null(); writer.KeyDouble("scheduleCallMs", snapshot.deckLinkScheduleCallMilliseconds); writer.EndObject(); } inline std::string CadenceTelemetryToJson(const CadenceTelemetrySnapshot& snapshot) { JsonWriter writer; WriteCadenceTelemetryJson(writer, snapshot); return writer.StringValue(); } }