修改成异步的接口

This commit is contained in:
2026-08-13 08:45:18 +08:00
parent 6d2cf825ae
commit b964dcdcd9
23 changed files with 553 additions and 227 deletions
@@ -90,7 +90,7 @@ struct Threading_Test_Render_Graph_Renderable : Renderable_Base {
executed->fetch_add(1, std::memory_order_relaxed);
});
}
void request_graph_rebuild() noexcept {
void request_graph_rebuild() {
rebuild_render_graph();
}
std::atomic<int>* executed;
@@ -534,32 +534,29 @@ TEST(threading_contract_test, scene_serializes_multiple_render_submitters_withou
EXPECT_EQ(executed.load(std::memory_order_acquire), render_count);
EXPECT_EQ(maximum_sequence.load(std::memory_order_acquire), render_count);
}
TEST(threading_contract_test, scene_render_and_render_graph_rebuild_can_run_concurrently) {
TEST(threading_contract_test, scene_render_and_render_graph_rebuild_are_serialized_by_mutation_barrier) {
Scene2D_Context<> scene;
constexpr int render_count = 300;
std::atomic<int> executed{};
auto renderable = std::make_shared<Threading_Test_Render_Graph_Renderable>(scene, executed);
scene.attach_renderable(renderable);
scene.attach_renderable(renderable).wait();
std::atomic<bool> start{};
std::atomic<bool> renderer_done{};
std::thread renderer([&] {
wait_start(start);
for (int index = 0; index < render_count; ++index) {
scene.render();
scene.wait_for_render();
}
renderer_done.store(true, std::memory_order_release);
});
std::thread rebuilder([&] {
wait_start(start);
while (!renderer_done.load(std::memory_order_acquire)) {
for (int index = 0; index < render_count; ++index)
renderable->request_graph_rebuild();
std::this_thread::yield();
}
});
start.store(true, std::memory_order_release);
renderer.join();
rebuilder.join();
scene.wait_for_mutations();
EXPECT_EQ(executed.load(std::memory_order_acquire), render_count);
}
TEST(threading_contract_test, real_time_data_updates_can_race_with_scene_destruction) {