大重构改完
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user