修改成异步的接口
This commit is contained in:
@@ -95,6 +95,7 @@ TEST(real_time_data_attachment_test, binds_updates_to_renderable_frame_strategy)
|
||||
auto history = std::make_shared<Real_Time_Data_Test_History>();
|
||||
auto renderable = std::make_shared<Real_Time_Data_Test_Attachment>(With_Real_Time_Data(latest, history), scene);
|
||||
renderable->discard_stale_frame_on_latest_data_update = true;
|
||||
scene.attach_renderable(renderable).wait();
|
||||
{
|
||||
auto frame = scene.frame_control.acquire_painter();
|
||||
ASSERT_TRUE(frame);
|
||||
@@ -133,6 +134,8 @@ TEST(real_time_data_attachment_test, supports_multiple_renderables_and_unbinds_d
|
||||
auto second = std::make_shared<Real_Time_Data_Test_Latest_Attachment>(With_Real_Time_Data(latest), second_scene);
|
||||
first->discard_stale_frame_on_latest_data_update = true;
|
||||
second->discard_stale_frame_on_latest_data_update = true;
|
||||
first_scene.attach_renderable(first).wait();
|
||||
second_scene.attach_renderable(second).wait();
|
||||
{
|
||||
auto frame = first_scene.frame_control.acquire_painter();
|
||||
ASSERT_TRUE(frame);
|
||||
@@ -144,6 +147,7 @@ TEST(real_time_data_attachment_test, supports_multiple_renderables_and_unbinds_d
|
||||
latest->update(1);
|
||||
EXPECT_EQ(first_scene.frame_control.counter_statistics().manually_discarded_frame_count, 1);
|
||||
EXPECT_EQ(second_scene.frame_control.counter_statistics().manually_discarded_frame_count, 1);
|
||||
first_scene.detach_renderable(first).wait();
|
||||
first.reset();
|
||||
{
|
||||
auto frame = second_scene.frame_control.acquire_painter();
|
||||
@@ -153,6 +157,26 @@ TEST(real_time_data_attachment_test, supports_multiple_renderables_and_unbinds_d
|
||||
EXPECT_EQ(first_scene.frame_control.counter_statistics().manually_discarded_frame_count, 1);
|
||||
EXPECT_EQ(second_scene.frame_control.counter_statistics().manually_discarded_frame_count, 2);
|
||||
}
|
||||
TEST(real_time_data_attachment_test, detached_renderable_no_longer_drives_frame_strategy) {
|
||||
Scene2D_Context<> scene;
|
||||
auto latest = std::make_shared<Real_Time_Data_Test_Latest>();
|
||||
auto renderable = std::make_shared<Real_Time_Data_Test_Latest_Attachment>(With_Real_Time_Data(latest), scene);
|
||||
renderable->discard_stale_frame_on_latest_data_update = true;
|
||||
scene.attach_renderable(renderable).wait();
|
||||
{
|
||||
auto frame = scene.frame_control.acquire_painter();
|
||||
ASSERT_TRUE(frame);
|
||||
}
|
||||
latest->update(1);
|
||||
EXPECT_EQ(scene.frame_control.counter_statistics().manually_discarded_frame_count, 1);
|
||||
scene.detach_renderable(renderable).wait();
|
||||
{
|
||||
auto frame = scene.frame_control.acquire_painter();
|
||||
ASSERT_TRUE(frame);
|
||||
}
|
||||
latest->update(2);
|
||||
EXPECT_EQ(scene.frame_control.counter_statistics().manually_discarded_frame_count, 1);
|
||||
}
|
||||
TEST(real_time_data_attachment_test, unbind_is_synchronized_with_concurrent_updates) {
|
||||
Scene2D_Context<> scene;
|
||||
auto latest = std::make_shared<Real_Time_Data_Test_Latest>();
|
||||
@@ -205,6 +229,7 @@ TEST(real_time_data_attachment_test, ignores_updates_after_bound_scene_is_destro
|
||||
{
|
||||
Scene2D_Context<> scene;
|
||||
renderable = std::make_shared<Real_Time_Data_Test_Latest_Attachment>(With_Real_Time_Data(latest), scene);
|
||||
scene.attach_renderable(renderable).wait();
|
||||
latest->update(1);
|
||||
EXPECT_EQ(scene.frame_control.state().real_time_data_update_sequence, 1);
|
||||
}
|
||||
@@ -219,6 +244,8 @@ TEST(real_time_data_attachment_test, notifies_each_scene_once_for_one_source_upd
|
||||
auto second = std::make_shared<Real_Time_Data_Test_Latest_Attachment>(With_Real_Time_Data(latest), scene);
|
||||
first->discard_stale_frame_on_latest_data_update = true;
|
||||
second->discard_stale_frame_on_latest_data_update = true;
|
||||
scene.attach_renderable(first).wait();
|
||||
scene.attach_renderable(second).wait();
|
||||
{
|
||||
auto frame = scene.frame_control.acquire_painter();
|
||||
ASSERT_TRUE(frame);
|
||||
@@ -261,6 +288,7 @@ TEST(real_time_data_attachment_test, frame_strategy_observer_can_reacquire_scene
|
||||
Scene2D_Context<Real_Time_Data_Reentrant_Strategy> scene(std::move(observer_state), configuration);
|
||||
auto latest = std::make_shared<Real_Time_Data_Test_Latest>();
|
||||
auto renderable = std::make_shared<Real_Time_Data_Test_Latest_Attachment>(With_Real_Time_Data(latest), scene);
|
||||
scene.attach_renderable(renderable).wait();
|
||||
std::atomic<bool> reacquired{};
|
||||
observer_data->callback = [&] {
|
||||
reacquired.store(&renderable->scene() == &scene, std::memory_order_release);
|
||||
|
||||
Reference in New Issue
Block a user