builder 和 运行时修改隔离开
This commit is contained in:
@@ -72,8 +72,8 @@ struct Threading_Test_State_Value {
|
||||
using Threading_Test_Double_State = Double_State_Strategy<Threading_Test_State_Base, Threading_Test_State_Value, Atomic_Wait_Mutex>;
|
||||
using Threading_Test_Triple_State = Triple_State_Strategy<Threading_Test_State_Base, Threading_Test_State_Value, Atomic_Wait_Mutex>;
|
||||
struct Threading_Test_Scene_Renderable : Renderable_Base {
|
||||
Threading_Test_Scene_Renderable(Scene_Base& scene, std::atomic<int>& render_count, std::atomic<std::uint64_t>& maximum_sequence)
|
||||
: Renderable_Base(scene, {.cache_enabled = false}), render_count(&render_count), maximum_sequence(&maximum_sequence) {}
|
||||
Threading_Test_Scene_Renderable(std::atomic<int>& render_count, std::atomic<std::uint64_t>& maximum_sequence)
|
||||
: Renderable_Base({.cache_enabled = false}), render_count(&render_count), maximum_sequence(&maximum_sequence) {}
|
||||
void prepare(const Prepare_Render_Context& context) override {
|
||||
render_count->fetch_add(1, std::memory_order_relaxed);
|
||||
std::uint64_t maximum = maximum_sequence->load(std::memory_order_acquire);
|
||||
@@ -83,7 +83,7 @@ struct Threading_Test_Scene_Renderable : Renderable_Base {
|
||||
std::atomic<std::uint64_t>* maximum_sequence;
|
||||
};
|
||||
struct Threading_Test_Render_Graph_Renderable : Renderable_Base {
|
||||
Threading_Test_Render_Graph_Renderable(Scene_Base& scene, std::atomic<int>& executed) : Renderable_Base(scene, {.cache_enabled = false}), executed(&executed) {}
|
||||
Threading_Test_Render_Graph_Renderable(std::atomic<int>& executed) : Renderable_Base({.cache_enabled = false}), executed(&executed) {}
|
||||
void build_prepare_graph(Renderable_Graph_Builder& graph) override {
|
||||
graph.emplace("prepare", "Prepare",
|
||||
[this](const Prepare_Render_Context&) {
|
||||
@@ -513,8 +513,11 @@ TEST(threading_contract_test, scene_serializes_multiple_render_submitters_withou
|
||||
constexpr int render_count = submitter_count * renders_per_submitter;
|
||||
std::atomic<int> executed{};
|
||||
std::atomic<std::uint64_t> maximum_sequence{};
|
||||
auto renderable = std::make_shared<Threading_Test_Scene_Renderable>(scene, executed, maximum_sequence);
|
||||
scene.attach_renderable(renderable);
|
||||
auto renderable = renderive_Owner<Threading_Test_Scene_Renderable>::make(executed, maximum_sequence);
|
||||
{
|
||||
auto attach = scene.attach_builder();
|
||||
attach.attach(renderable);
|
||||
}
|
||||
std::atomic<bool> start{};
|
||||
std::vector<std::thread> submitters;
|
||||
submitters.reserve(submitter_count);
|
||||
@@ -538,8 +541,11 @@ TEST(threading_contract_test, scene_render_and_render_graph_rebuild_are_serializ
|
||||
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).wait();
|
||||
auto renderable = renderive_Owner<Threading_Test_Render_Graph_Renderable>::make(executed);
|
||||
{
|
||||
auto attach = scene.attach_builder();
|
||||
attach.attach(renderable);
|
||||
}
|
||||
std::atomic<bool> start{};
|
||||
std::thread renderer([&] {
|
||||
wait_start(start);
|
||||
@@ -563,12 +569,16 @@ TEST(threading_contract_test, scene_render_and_render_graph_rebuild_are_serializ
|
||||
TEST(threading_contract_test, real_time_data_updates_can_race_with_scene_destruction) {
|
||||
using Data = Latest_Real_Time_Data<int, std::mutex, Observer_State<Frame_Strategy_Real_Time_Data_Observer>>;
|
||||
struct Renderable : Renderable_Base {
|
||||
explicit Renderable(Scene_Base& scene) : Renderable_Base(scene) {}
|
||||
explicit Renderable() : Renderable_Base() {}
|
||||
};
|
||||
using Attachment = Attach_Real_Time_Data<Renderable, Data>;
|
||||
auto data = std::make_shared<Data>();
|
||||
auto scene = std::make_unique<Scene2D_Context<>>();
|
||||
auto renderable = std::make_shared<Attachment>(With_Real_Time_Data(data), *scene);
|
||||
auto renderable = renderive_Owner<Attachment>::make(With_Real_Time_Data(data));
|
||||
{
|
||||
auto attach = scene->attach_builder();
|
||||
attach.attach(renderable);
|
||||
}
|
||||
std::atomic<bool> start{};
|
||||
std::atomic<bool> stop{};
|
||||
std::atomic<int> updates{};
|
||||
|
||||
Reference in New Issue
Block a user