大重构改完

This commit is contained in:
2026-08-12 21:31:02 +08:00
parent 7c00b8565d
commit 15c3d21f2d
73 changed files with 4303 additions and 1727 deletions
@@ -9,7 +9,7 @@
#include "renderive/scene/Scene.hpp"
struct Scene_Base_Test_Renderable : Renderable_Base {
explicit Scene_Base_Test_Renderable(Scene_Base& scene) : Renderable_Base(scene) {}
void render(const Scene_Render_Context& context) override {
void prepare(const Scene_Render_Context& context) override {
render_sequence = context.render_sequence;
++render_count;
}
@@ -28,7 +28,7 @@ TEST(scene_base_test, publishes_renderable_collection_before_background_render)
}
struct Scene_Base_Throwing_Renderable : Renderable_Base {
explicit Scene_Base_Throwing_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context&) override {
void prepare(const Scene_Render_Context&) override {
throw std::runtime_error("render failed");
}
};
@@ -38,12 +38,6 @@ TEST(scene_base_test, wait_for_render_propagates_background_render_failure) {
scene.attach_renderable(renderable);
scene.render();
EXPECT_THROW(scene.wait_for_render(), std::runtime_error);
const auto execution = scene.task_execution_snapshot();
EXPECT_EQ(execution.state, Task_Execution_State::Failed);
EXPECT_EQ(execution.graph_node_count, 3u);
EXPECT_EQ(execution.failed_count, 1u);
EXPECT_EQ(execution.running_count, 0u);
EXPECT_GT(execution.duration_ns, 0u);
}
TEST(scene_base_test, scene_destruction_does_not_throw_after_background_render_failure) {
{
@@ -56,7 +50,7 @@ TEST(scene_base_test, scene_destruction_does_not_throw_after_background_render_f
}
struct Scene_Base_Blocking_Renderable : Renderable_Base {
explicit Scene_Base_Blocking_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context&) override {
void prepare(const Scene_Render_Context&) override {
std::unique_lock lock(mutex);
rendering = true;
condition.notify_all();
@@ -156,9 +150,9 @@ TEST(scene_base_test, setting_same_topology_parent_is_a_noop) {
scene.attach_renderable(parent);
scene.attach_renderable(child);
scene.set_dependency_parent(*child, parent.get());
const auto revision = child->cache_revision();
const auto revision = child->prepare_revision();
EXPECT_NO_THROW(scene.set_dependency_parent(*child, parent.get()));
EXPECT_EQ(child->cache_revision(), revision);
EXPECT_EQ(child->prepare_revision(), revision);
const auto topology = scene.topology_snapshot();
EXPECT_EQ(topology.dependency.size(), 2);
bool found{};
@@ -235,7 +229,7 @@ TEST(scene_base_test, all_waiters_receive_the_same_render_failure) {
}
struct Scene_Base_Throw_Once_Renderable : Renderable_Base {
explicit Scene_Base_Throw_Once_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context&) override {
void prepare(const Scene_Render_Context&) override {
if (render_count.fetch_add(1, std::memory_order_acq_rel) == 0) {
throw std::runtime_error("first render failed");
}
@@ -256,7 +250,7 @@ TEST(scene_base_test, unobserved_render_failure_survives_next_successful_submiss
}
struct Scene_Base_Render_Execution_Renderable : Renderable_Base {
explicit Scene_Base_Render_Execution_Renderable(Scene_Base& scene) : Renderable_Base(scene, {.cache_enabled = false}) {}
void render(const Scene_Render_Context& context) override {
void prepare(const Scene_Render_Context& context) override {
context.scene->wait_for_render();
wait_returned.store(true, std::memory_order_release);
try {