diff --git a/fml/raster_thread_merger_unittests.cc b/fml/raster_thread_merger_unittests.cc index 030d82ed8a3dc..ac6bbb6aba611 100644 --- a/fml/raster_thread_merger_unittests.cc +++ b/fml/raster_thread_merger_unittests.cc @@ -13,6 +13,7 @@ #include "flutter/fml/synchronization/count_down_latch.h" #include "flutter/fml/synchronization/waitable_event.h" #include "flutter/fml/task_runner.h" +#include "flutter/fml/thread.h" #include "gtest/gtest.h" namespace fml { @@ -521,36 +522,31 @@ TEST(RasterThreadMerger, RunExpiredTasksWhileFirstTaskMergesThreads) { } TEST(RasterThreadMerger, RunExpiredTasksWhileFirstTaskUnMergesThreads) { - fml::MessageLoop* loop_platform = nullptr; - fml::AutoResetWaitableEvent latch1; - std::thread thread_platform([&loop_platform, &latch1]() { - fml::MessageLoop::EnsureInitializedForCurrentThread(); - loop_platform = &fml::MessageLoop::GetCurrent(); - loop_platform->GetTaskRunner()->PostTask([&]() { latch1.Signal(); }); - loop_platform->Run(); - }); + fml::Thread platform_thread("test_platform_thread"); - fml::MessageLoop* loop_raster = nullptr; fml::AutoResetWaitableEvent latch2; - std::thread thread_raster([&loop_raster, &loop_platform, &latch1, &latch2]() { - latch1.Wait(); - + std::thread thread_raster([&]() { fml::MessageLoop::EnsureInitializedForCurrentThread(); - loop_raster = &fml::MessageLoop::GetCurrent(); + fml::MessageLoop* loop_raster = &fml::MessageLoop::GetCurrent(); + fml::TaskQueueId qid_platform = - loop_platform->GetTaskRunner()->GetTaskQueueId(); + platform_thread.GetTaskRunner()->GetTaskQueueId(); fml::TaskQueueId qid_raster = loop_raster->GetTaskRunner()->GetTaskQueueId(); - fml::CountDownLatch post_merge(2); + fml::AutoResetWaitableEvent merge_latch; const auto raster_thread_merger_ = - fml::MakeRefCounted(qid_platform, qid_raster); + std::make_unique(qid_platform, qid_raster); loop_raster->GetTaskRunner()->PostTask([&]() { raster_thread_merger_->MergeWithLease(1); - post_merge.CountDown(); + merge_latch.Signal(); }); loop_raster->RunExpiredTasksNow(); + merge_latch.Wait(); + + // threads should be merged at this point. + fml::CountDownLatch post_merge(2); loop_raster->GetTaskRunner()->PostTask([&]() { ASSERT_TRUE(raster_thread_merger_->IsOnRasterizingThread()); @@ -563,20 +559,17 @@ TEST(RasterThreadMerger, RunExpiredTasksWhileFirstTaskUnMergesThreads) { loop_raster->GetTaskRunner()->PostTask([&]() { ASSERT_TRUE(raster_thread_merger_->IsOnRasterizingThread()); ASSERT_FALSE(raster_thread_merger_->IsOnPlatformThread()); - ASSERT_EQ(fml::MessageLoop::GetCurrentTaskQueueId(), qid_platform); + ASSERT_EQ(fml::MessageLoop::GetCurrentTaskQueueId(), qid_raster); post_merge.CountDown(); }); loop_raster->RunExpiredTasksNow(); + post_merge.Wait(); latch2.Signal(); }); latch2.Wait(); - loop_platform->GetTaskRunner()->PostTask( - [&]() { loop_platform->Terminate(); }); - - thread_platform.join(); thread_raster.join(); }