修改成异步的接口
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user