secene 接入 多继承链

This commit is contained in:
2026-08-15 00:23:52 +08:00
parent 12e46b4c21
commit 2c7c8abd4f
15 changed files with 1011 additions and 355 deletions
@@ -16,12 +16,17 @@ struct Scene_State_Observer_Test_Time_Source {
};
struct Scene_State_Observer_Test_Data {
std::vector<Scene_Base::Observation_Event> events;
std::atomic<int> complete_snapshot_count{};
};
struct Scene_State_Observer_Test_Recorder {
static constexpr bool enabled = true;
std::shared_ptr<Scene_State_Observer_Test_Data> data{std::make_shared<Scene_State_Observer_Test_Data>()};
void observe(const Scene_Base::Observation& observation) noexcept {
data->events.push_back(observation.event);
if (observation.topology && observation.frame_snapshot &&
observation.render_plan)
data->complete_snapshot_count.fetch_add(1,
std::memory_order_relaxed);
}
};
using Scene_State_Observer_Test_Scene_Observer = Observer_State<Scene_State_Observer_Test_Recorder, Scene_State_Observer_Test_Time_Source>;
@@ -37,6 +42,7 @@ TEST(scene_state_observer_test, scene_uses_double_state_and_observes_lifecycle)
scene.wait_for_render();
EXPECT_EQ(render.read(static_cast<const Scene::Scene_State_Strategy&>(scene)).value, 9);
EXPECT_EQ(recorder.data->events, (std::vector<Scene_Base::Observation_Event>{Scene_Base::Observation_Event::render_submitted, Scene_Base::Observation_Event::render_started, Scene_Base::Observation_Event::render_completed}));
EXPECT_EQ(recorder.data->complete_snapshot_count.load(), 3);
}
struct Scene_Reentrant_Observer_Data {
std::function<void(Scene_Base::Observation_Event)> callback;