feat: add weather-local render cadence

This commit is contained in:
OpenAI Codex
2026-09-07 14:55:32 +08:00
parent 6d514e3aae
commit b9b3dd2253
13 changed files with 224 additions and 8 deletions

View File

@@ -613,6 +613,30 @@ TEST(Source, RasterArrayTimelineKeepsCoreOwnedWindowAndPlaybackControls) {
EXPECT_EQ(timeline.frame().state, style::RasterArrayPlaybackState::Ended);
}
TEST(Source, RasterArrayTimelineCadenceUsesOneSharedDeterministicDeadline) {
std::vector<style::RasterArrayTimelineRuntime::Entry> entries;
for (uint64_t index = 0; index < 3; ++index) {
entries.push_back({std::make_shared<particle::ParticleFieldSnapshot>(
particle::OfflineFixtureParticleAdapter::load("uniform-east", index + 1)), index * 4000});
}
style::RasterArrayTimelineRuntime timeline{std::move(entries)};
const auto start = std::chrono::steady_clock::time_point{} + std::chrono::seconds(1);
EXPECT_TRUE(timeline.cadenceDue(start));
timeline.markCadenceTick(start);
EXPECT_TRUE(timeline.setTargetFps(style::RasterArrayTargetFps::Fps30));
EXPECT_TRUE(timeline.cadenceDue(start));
timeline.markCadenceTick(start);
EXPECT_FALSE(timeline.cadenceDue(start + std::chrono::milliseconds(33)));
EXPECT_TRUE(timeline.cadenceDue(start + std::chrono::milliseconds(34)));
EXPECT_TRUE(timeline.setTargetFps(style::RasterArrayTargetFps::Fps60));
EXPECT_TRUE(timeline.cadenceDue(start));
timeline.markCadenceTick(start);
EXPECT_FALSE(timeline.cadenceDue(start + std::chrono::milliseconds(16)));
EXPECT_TRUE(timeline.cadenceDue(start + std::chrono::milliseconds(17)));
EXPECT_TRUE(timeline.setTargetFps(style::RasterArrayTargetFps::Auto));
EXPECT_TRUE(timeline.cadenceDue(start));
}
TEST(Source, RasterArrayRuntimeFieldWindowAdvancesWithoutReplacingTheSource) {
SourceTest test;
const auto eastMetadata = fixtureBytes("uniform-east", "metadata.json");