This commit is contained in:
2026-08-15 18:59:20 +08:00
parent d48f6608ad
commit 8bfaeeb265
15 changed files with 304 additions and 242 deletions
@@ -54,11 +54,12 @@ TEST(render_dag_test, one_graph_assigns_dense_execution_slots_and_versions_only_
changed_graph.edges.push_back({100, 101});
const auto changed = history.publish(std::move(changed_graph));
EXPECT_GT(changed->version, first->version);
const auto reused = history.publish(make_parallel_graph());
EXPECT_EQ(reused, first);
EXPECT_EQ(history.current(), first);
const auto restored = history.publish(make_parallel_graph());
EXPECT_GT(restored->version, changed->version);
EXPECT_EQ(history.current(), restored);
EXPECT_EQ(history.find(first->version), first);
EXPECT_EQ(history.find(changed->version), changed);
EXPECT_EQ(history.find(restored->version), restored);
}
TEST(render_dag_test, analysis_derives_wait_critical_path_and_parallel_overlap_from_frame_slots) {
@@ -191,7 +191,7 @@ TEST(render_plan_execution_test, dependent_prepare_does_not_wait_for_dependency_
}
#endif
TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independent_and_prune_nodes) {
TEST(render_plan_execution_test, prepare_and_paint_cache_validity_do_not_recompile_render_plan) {
Scene2D_Context<> scene;
auto renderable = renderive_Owner<Pipeline_Renderable>::make(true);
attach_initial(scene, renderable);
@@ -199,6 +199,8 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
scene.wait_for_render();
EXPECT_TRUE(renderable->prepare_cache_valid_for_test());
EXPECT_TRUE(renderable->paint_cache_valid_for_test());
EXPECT_EQ(renderable->prepare_count.load(), 1);
EXPECT_EQ(renderable->paint_count.load(), 1);
const auto first_plan = scene.render_plan_snapshot();
const Render_Node_Id prepare_id = node(*first_plan, renderable->renderable_id(),
Render_Node_Kind::prepare).node_id;
@@ -208,12 +210,13 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
scene.render();
scene.wait_for_render();
const auto cached_plan = scene.render_plan_snapshot();
EXPECT_GT(cached_plan->version, first_plan->version);
EXPECT_EQ(std::count_if(cached_plan->graph.nodes.begin(), cached_plan->graph.nodes.end(),
[&](const Render_Node& value) {
return value.owner_id == renderable->renderable_id() &&
value.kind != Render_Node_Kind::composite;
}), 0);
EXPECT_EQ(cached_plan, first_plan);
EXPECT_EQ(renderable->prepare_count.load(), 1);
EXPECT_EQ(renderable->paint_count.load(), 1);
EXPECT_EQ(node(*cached_plan, renderable->renderable_id(), Render_Node_Kind::prepare).node_id,
prepare_id);
EXPECT_EQ(node(*cached_plan, renderable->renderable_id(), Render_Node_Kind::paint).node_id,
paint_id);
renderable->invalidate_paint_for_test();
EXPECT_TRUE(renderable->prepare_cache_valid_for_test());
@@ -221,14 +224,13 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
scene.render();
scene.wait_for_render();
const auto paint_plan = scene.render_plan_snapshot();
EXPECT_GT(paint_plan->version, cached_plan->version);
EXPECT_EQ(paint_plan, first_plan);
EXPECT_EQ(renderable->prepare_count.load(), 1);
EXPECT_EQ(renderable->paint_count.load(), 2);
EXPECT_EQ(node(*paint_plan, renderable->renderable_id(), Render_Node_Kind::prepare).node_id,
prepare_id);
EXPECT_EQ(node(*paint_plan, renderable->renderable_id(), Render_Node_Kind::paint).node_id,
paint_id);
EXPECT_EQ(std::count_if(paint_plan->graph.nodes.begin(), paint_plan->graph.nodes.end(),
[&](const Render_Node& value) {
return value.owner_id == renderable->renderable_id() &&
value.kind == Render_Node_Kind::prepare;
}), 0);
renderable->invalidate_prepare_for_test();
EXPECT_FALSE(renderable->prepare_cache_valid_for_test());
@@ -236,7 +238,9 @@ TEST(render_plan_execution_test, prepare_and_paint_cache_validity_are_independen
scene.render();
scene.wait_for_render();
const auto rebuilt_plan = scene.render_plan_snapshot();
EXPECT_GT(rebuilt_plan->version, paint_plan->version);
EXPECT_EQ(rebuilt_plan, first_plan);
EXPECT_EQ(renderable->prepare_count.load(), 2);
EXPECT_EQ(renderable->paint_count.load(), 3);
EXPECT_EQ(node(*rebuilt_plan, renderable->renderable_id(), Render_Node_Kind::prepare).node_id,
prepare_id);
EXPECT_EQ(node(*rebuilt_plan, renderable->renderable_id(), Render_Node_Kind::paint).node_id,