优化
This commit is contained in:
@@ -63,7 +63,7 @@ TEST(spectrum_data, publishes_samples_through_tagged_frame_buffer) {
|
||||
const double samples[]{-100.0, -50.0, 0.0};
|
||||
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
|
||||
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->mark_dirty<Render_Graph_Tag>();
|
||||
spectrum->advance();
|
||||
EXPECT_EQ(spectrum->current_buffer<Spectrum_Frame_Tag>().samples,
|
||||
(std::vector<Spectrum_Power>{-100.0, -50.0, 0.0}));
|
||||
@@ -126,67 +126,64 @@ TEST(render_scene_2d, composites_axes_and_spectrum_into_final_frame) {
|
||||
const double samples[]{-90.0, -65.0, -20.0, -45.0, -75.0};
|
||||
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
|
||||
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->mark_dirty<Render_Graph_Tag>();
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(canvas);
|
||||
scene->set<&Render_Scene_2D::Prop::background>(Color::transparent());
|
||||
scene->activate_view();
|
||||
const auto prepare_graph = scene->pending_dependency_graph<Prepare_Data_Tag>();
|
||||
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), scene.get()));
|
||||
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), frequency.get()));
|
||||
EXPECT_TRUE(prepare_graph.depends_on(spectrum.get(), power.get()));
|
||||
const auto paint_graph = scene->pending_dependency_graph<Paint_Tag>();
|
||||
EXPECT_TRUE(paint_graph.depends_on(frequency.get(), spectrum.get()));
|
||||
EXPECT_TRUE(paint_graph.depends_on(power.get(), spectrum.get()));
|
||||
const auto cache_graph = scene->pending_dependency_graph<Paint_Cache_Tag>();
|
||||
const auto render_graph = scene->pending_dependency_graph<Render_Graph_Tag>();
|
||||
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), scene.get()));
|
||||
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), frequency.get()));
|
||||
EXPECT_FALSE(render_graph.depends_on(spectrum.get(), power.get()));
|
||||
EXPECT_TRUE(render_graph.depends_on(frequency.get(), spectrum.get()));
|
||||
EXPECT_TRUE(render_graph.depends_on(power.get(), spectrum.get()));
|
||||
const auto cache_graph = scene->pending_dependency_graph<Render_Cache_Tag>();
|
||||
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), scene.get()));
|
||||
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), frequency.get()));
|
||||
EXPECT_TRUE(cache_graph.depends_on(spectrum.get(), power.get()));
|
||||
auto output_frame = render_frame(scene.get());
|
||||
EXPECT_GT(spectrum->read_state<Spectrum::Base_Tag>().rendered_point_count, 0u);
|
||||
const auto& render_state = spectrum->read_state<Renderable::Base_Tag>();
|
||||
EXPECT_EQ(render_state.prepare_task_count, 4u);
|
||||
EXPECT_EQ(render_state.paint_task_count, 5u);
|
||||
EXPECT_EQ(render_state.task_count, 9u);
|
||||
const Image_View frame = output_frame->image();
|
||||
ASSERT_FALSE(frame.empty());
|
||||
EXPECT_TRUE(contains_color(frame));
|
||||
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
|
||||
EXPECT_FALSE(spectrum->dirty<Paint_Tag>());
|
||||
EXPECT_FALSE(frequency->dirty<Paint_Tag>());
|
||||
EXPECT_FALSE(power->dirty<Paint_Tag>());
|
||||
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
|
||||
EXPECT_FALSE(spectrum->dirty<Render_Graph_Tag>());
|
||||
EXPECT_FALSE(frequency->dirty<Render_Graph_Tag>());
|
||||
EXPECT_FALSE(power->dirty<Render_Graph_Tag>());
|
||||
EXPECT_FALSE(spectrum->read_prop<Renderable_2D::Base_Tag>().cache_enabled);
|
||||
spectrum->set<&Renderable_2D::Prop::cache_enabled>(true);
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_TRUE(contains_color(output_frame->image()));
|
||||
frequency->set<&Numeric_Axis::Prop::precision>(3);
|
||||
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
|
||||
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().paint_executed);
|
||||
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().paint_executed);
|
||||
EXPECT_TRUE(power->read_state<Renderable::Base_Tag>().paint_executed);
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
|
||||
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().render_executed);
|
||||
EXPECT_TRUE(power->read_state<Renderable::Base_Tag>().render_executed);
|
||||
EXPECT_TRUE(contains_color(output_frame->image()));
|
||||
frequency->set<&Numeric_Axis::Prop::coordinate_range>(Axis_Range{0.0, 120.0});
|
||||
EXPECT_TRUE(spectrum->dirty<Paint_Cache_Tag>());
|
||||
EXPECT_TRUE(spectrum->dirty<Render_Cache_Tag>());
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_FALSE(spectrum->dirty<Paint_Cache_Tag>());
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().prepare_executed);
|
||||
EXPECT_FALSE(spectrum->dirty<Render_Cache_Tag>());
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
|
||||
spectrum->set<&Spectrum::Prop::partition_count>(2u);
|
||||
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
|
||||
Spectrum_Frame{std::vector<Spectrum_Power>(std::begin(samples), std::end(samples))};
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->mark_dirty<Render_Graph_Tag>();
|
||||
output_frame = render_frame(scene.get());
|
||||
const auto& rebuilt_state = spectrum->read_state<Renderable::Base_Tag>();
|
||||
EXPECT_TRUE(rebuilt_state.prepare_graph_rebuilt);
|
||||
EXPECT_EQ(rebuilt_state.prepare_task_count, 3u);
|
||||
EXPECT_TRUE(rebuilt_state.graph_rebuilt);
|
||||
EXPECT_EQ(rebuilt_state.task_count, 7u);
|
||||
EXPECT_TRUE(contains_color(output_frame->image()));
|
||||
const Size resized_canvas{200, 140};
|
||||
scene->set<&Render_Scene_2D::Prop::viewport>(resized_canvas);
|
||||
EXPECT_TRUE(spectrum->dirty<Paint_Cache_Tag>());
|
||||
EXPECT_FALSE(frequency->dirty<Prepare_Data_Tag>());
|
||||
EXPECT_FALSE(power->dirty<Prepare_Data_Tag>());
|
||||
EXPECT_TRUE(spectrum->dirty<Render_Cache_Tag>());
|
||||
EXPECT_FALSE(frequency->dirty<Render_Graph_Tag>());
|
||||
EXPECT_FALSE(power->dirty<Render_Graph_Tag>());
|
||||
output_frame = render_frame(scene.get());
|
||||
EXPECT_EQ(scene->read_prop<Render_Scene_2D::Base_Tag>().viewport, resized_canvas);
|
||||
EXPECT_FALSE(frequency->read_state<Renderable::Base_Tag>().prepare_executed);
|
||||
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().paint_executed);
|
||||
EXPECT_TRUE(frequency->read_state<Renderable::Base_Tag>().render_executed);
|
||||
const Image_View resized_frame = output_frame->image();
|
||||
EXPECT_EQ(resized_frame.width, resized_canvas.width);
|
||||
EXPECT_EQ(resized_frame.height, resized_canvas.height);
|
||||
@@ -223,13 +220,12 @@ TEST(spectrum_data, repeatedly_publishes_new_samples_during_long_running_render)
|
||||
samples[peak] = -15.0;
|
||||
spectrum->pending_buffer<Spectrum_Frame_Tag>() =
|
||||
Spectrum_Frame{std::move(samples)};
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->mark_dirty<Render_Graph_Tag>();
|
||||
auto frame = render_frame(scene.get());
|
||||
const auto hash = image_hash(frame->image());
|
||||
if (frame_index != 0 && hash != previous_hash) ++changed_frames;
|
||||
previous_hash = hash;
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().prepare_executed);
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().paint_executed);
|
||||
EXPECT_TRUE(spectrum->read_state<Renderable::Base_Tag>().render_executed);
|
||||
EXPECT_EQ(spectrum->read_state<Spectrum::Base_Tag>().sample_count, 128u);
|
||||
}
|
||||
EXPECT_GT(changed_frames, 700u);
|
||||
|
||||
Reference in New Issue
Block a user