runtime read of json layer state

This commit is contained in:
2026-05-21 16:08:46 +10:00
parent c2de2c3738
commit bda9a9dc22
6 changed files with 245 additions and 5 deletions

View File

@@ -159,6 +159,57 @@ void TestAddAndRemoveLayers()
std::filesystem::remove_all(root);
}
void TestInitializeFromRuntimeStateRestoresLayerStack()
{
std::filesystem::path root;
RenderCadenceCompositor::SupportedShaderCatalog catalog = MakeCatalog(root);
JsonValue runtimeState;
std::string error;
Expect(ParseJson(R"({
"layers": [
{
"id": "layer-31",
"shaderId": "solid",
"bypass": true,
"parameterValues": {
"gain": 0.75,
"drop": 4
}
},
{
"id": "layer-32",
"shaderId": "missing",
"parameterValues": {
"gain": 0.9
}
},
{
"id": "layer-33",
"shaderId": "solid",
"parameterValues": {
"gain": "bad"
}
}
]
})", runtimeState, error), "runtime state fixture parses");
RenderCadenceCompositor::RuntimeLayerModel model;
Expect(model.InitializeFromRuntimeState(catalog, runtimeState, error), "runtime state can initialize the layer model");
RenderCadenceCompositor::RuntimeLayerModelSnapshot snapshot = model.Snapshot();
Expect(snapshot.displayLayers.size() == 2, "restore keeps supported layers and skips missing shaders");
Expect(snapshot.displayLayers[0].id == "layer-31", "restore preserves saved layer id");
Expect(snapshot.displayLayers[0].bypass, "restore preserves bypass state");
Expect(snapshot.displayLayers[0].parameterValues.at("gain").numberValues.front() == 0.75, "restore preserves valid parameter values");
Expect(snapshot.displayLayers[1].id == "layer-33", "restore preserves later supported layer order");
Expect(snapshot.displayLayers[1].parameterValues.at("gain").numberValues.front() == 0.5, "restore falls back to defaults for invalid parameter values");
const std::vector<std::pair<std::string, std::string>> builds = model.PendingLayerBuilds();
Expect(builds.size() == 2 && builds[0].first == "layer-31" && builds[1].first == "layer-33", "restore queues startup builds for every restored layer");
std::filesystem::remove_all(root);
}
void TestLayerControlsUpdateDisplayAndRenderModels()
{
std::filesystem::path root;
@@ -243,6 +294,7 @@ int main()
TestRejectsUnsupportedStartupShader();
TestBuildFailureStaysDisplaySide();
TestAddAndRemoveLayers();
TestInitializeFromRuntimeStateRestoresLayerStack();
TestLayerControlsUpdateDisplayAndRenderModels();
TestReloadRefreshesChangedShaderMetadataAndPreservesValues();