Phase 5 step 2
All checks were successful
CI / React UI Build (push) Successful in 10s
CI / Native Windows Build And Tests (push) Successful in 2m39s
CI / Windows Release Package (push) Successful in 2m54s

This commit is contained in:
Aiden
2026-05-11 18:56:39 +10:00
parent 77590f4a62
commit 7740fe209c
5 changed files with 103 additions and 56 deletions

View File

@@ -359,12 +359,12 @@ void TestRenderStateComposerBuildsFrameState()
update.targetValue = JsonValue(0.6);
liveState.ApplyOscUpdates({ update });
RenderStateCompositionInput input;
LayeredRenderStateInput input;
std::vector<RuntimeRenderState> baseLayerStates = { MakeLayerState() };
input.baseLayerStates = &baseLayerStates;
input.liveState = &liveState;
input.allowLiveCommits = false;
input.liveSmoothing = 0.0;
input.committedLiveLayerStates = &baseLayerStates;
input.transientAutomationOverlay = &liveState;
input.allowTransientAutomationCommits = false;
input.transientAutomationSmoothing = 0.0;
RenderStateComposer composer;
RenderStateCompositionResult result = composer.BuildFrameState(input);
@@ -382,6 +382,49 @@ void TestRenderStateComposerBuildsFrameState()
"composer leaves base layer states unchanged");
}
void TestRenderStateComposerUsesCommittedLayerOverBaseLayer()
{
std::vector<RuntimeRenderState> basePersistedLayerStates = { MakeLayerState() };
std::vector<RuntimeRenderState> committedLiveLayerStates = { MakeLayerState() };
committedLiveLayerStates[0].parameterValues["amount"].numberValues = { 0.4 };
LayeredRenderStateInput input;
input.basePersistedLayerStates = &basePersistedLayerStates;
input.committedLiveLayerStates = &committedLiveLayerStates;
RenderStateComposer composer;
RenderStateCompositionResult result = composer.BuildFrameState(input);
const auto valueIt = result.layerStates[0].parameterValues.find("amount");
Expect(valueIt != result.layerStates[0].parameterValues.end() &&
!valueIt->second.numberValues.empty() &&
std::fabs(valueIt->second.numberValues[0] - 0.4) < 0.0001,
"committed live layer overrides base persisted layer");
const auto baseValueIt = basePersistedLayerStates[0].parameterValues.find("amount");
Expect(baseValueIt != basePersistedLayerStates[0].parameterValues.end() &&
!baseValueIt->second.numberValues.empty() &&
std::fabs(baseValueIt->second.numberValues[0] - 0.25) < 0.0001,
"committed override leaves base persisted layer unchanged");
}
void TestRenderStateComposerUsesBaseLayerWhenCommittedLayerMissing()
{
std::vector<RuntimeRenderState> basePersistedLayerStates = { MakeLayerState() };
LayeredRenderStateInput input;
input.basePersistedLayerStates = &basePersistedLayerStates;
RenderStateComposer composer;
RenderStateCompositionResult result = composer.BuildFrameState(input);
Expect(result.hasLayerStates, "composer can use base persisted layer states without committed layer states");
const auto valueIt = result.layerStates[0].parameterValues.find("amount");
Expect(valueIt != result.layerStates[0].parameterValues.end() &&
!valueIt->second.numberValues.empty() &&
std::fabs(valueIt->second.numberValues[0] - 0.25) < 0.0001,
"base persisted value is used when no committed live value exists");
}
void TestRenderStateComposerQueuesCommitRequestsWhenEnabled()
{
RuntimeLiveState liveState;
@@ -393,13 +436,13 @@ void TestRenderStateComposerQueuesCommitRequestsWhenEnabled()
liveState.ApplyOscUpdates({ update });
std::vector<RuntimeRenderState> baseLayerStates = { MakeLayerState() };
RenderStateCompositionInput input;
input.baseLayerStates = &baseLayerStates;
input.liveState = &liveState;
input.allowLiveCommits = true;
input.collectLiveCommitRequests = true;
input.liveSmoothing = 0.0;
input.liveCommitDelay = std::chrono::milliseconds(0);
LayeredRenderStateInput input;
input.committedLiveLayerStates = &baseLayerStates;
input.transientAutomationOverlay = &liveState;
input.allowTransientAutomationCommits = true;
input.collectTransientAutomationCommitRequests = true;
input.transientAutomationSmoothing = 0.0;
input.transientAutomationCommitDelay = std::chrono::milliseconds(0);
input.now = std::chrono::steady_clock::now() + std::chrono::milliseconds(1);
RenderStateComposer composer;
@@ -421,13 +464,13 @@ void TestRenderStateComposerSuppressesCommitCollection()
liveState.ApplyOscUpdates({ update });
std::vector<RuntimeRenderState> baseLayerStates = { MakeLayerState() };
RenderStateCompositionInput input;
input.baseLayerStates = &baseLayerStates;
input.liveState = &liveState;
input.allowLiveCommits = true;
input.collectLiveCommitRequests = false;
input.liveSmoothing = 0.0;
input.liveCommitDelay = std::chrono::milliseconds(0);
LayeredRenderStateInput input;
input.committedLiveLayerStates = &baseLayerStates;
input.transientAutomationOverlay = &liveState;
input.allowTransientAutomationCommits = true;
input.collectTransientAutomationCommitRequests = false;
input.transientAutomationSmoothing = 0.0;
input.transientAutomationCommitDelay = std::chrono::milliseconds(0);
input.now = std::chrono::steady_clock::now() + std::chrono::milliseconds(1);
RenderStateComposer composer;
@@ -454,6 +497,8 @@ int main()
TestRuntimeLiveStateSmoothingVectorSizeMismatchUsesTargetShape();
TestRuntimeLiveStateTriggerOverlayIncrementsAndClears();
TestRenderStateComposerBuildsFrameState();
TestRenderStateComposerUsesCommittedLayerOverBaseLayer();
TestRenderStateComposerUsesBaseLayerWhenCommittedLayerMissing();
TestRenderStateComposerQueuesCommitRequestsWhenEnabled();
TestRenderStateComposerSuppressesCommitCollection();