@@ -1054,16 +1054,18 @@ TEST_F(ShellTest,
10541054 auto end_frame_callback =
10551055 [&](bool should_resubmit_frame,
10561056 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
1057- external_view_embedder->UpdatePostPrerollResult (
1058- PostPrerollResult::kSuccess );
1057+ if (should_resubmit_frame && !raster_thread_merger->IsMerged ()) {
1058+ raster_thread_merger->MergeWithLease (10 );
1059+ external_view_embedder->UpdatePostPrerollResult (
1060+ PostPrerollResult::kSuccess );
1061+ }
10591062 end_frame_latch.Signal ();
10601063 };
10611064 external_view_embedder = std::make_shared<ShellTestExternalViewEmbedder>(
10621065 end_frame_callback, PostPrerollResult::kResubmitFrame , true );
10631066
10641067 auto shell = CreateShell (std::move (settings), GetTaskRunnersForFixture (),
10651068 false , external_view_embedder);
1066-
10671069 PlatformViewNotifyCreated (shell.get ());
10681070
10691071 auto configuration = RunConfiguration::InferFromSettings (settings);
@@ -1074,12 +1076,16 @@ TEST_F(ShellTest,
10741076
10751077 PumpOneFrame (shell.get ());
10761078 // `EndFrame` changed the post preroll result to `kSuccess`.
1079+ // First frame hasn't merged the threads yet, no
1080+ // `external_view_embedder->GetSubmittedFrameCount()` is called.
10771081 end_frame_latch.Wait ();
1078- ASSERT_EQ (1 , external_view_embedder->GetSubmittedFrameCount ());
1082+ ASSERT_EQ (0 , external_view_embedder->GetSubmittedFrameCount ());
10791083
1084+ // This is the resubmitted frame, which threads are also merged.
10801085 end_frame_latch.Wait ();
1081- ASSERT_EQ (2 , external_view_embedder->GetSubmittedFrameCount ());
1086+ ASSERT_EQ (1 , external_view_embedder->GetSubmittedFrameCount ());
10821087
1088+ PlatformViewNotifyDestroyed (shell.get ());
10831089 DestroyShell (std::move (shell));
10841090}
10851091
@@ -2019,14 +2025,24 @@ TEST_F(ShellTest, DiscardLayerTreeOnResize) {
20192025 SkISize expected_size = SkISize::Make (400 , 200 );
20202026
20212027 fml::AutoResetWaitableEvent end_frame_latch;
2028+ std::shared_ptr<ShellTestExternalViewEmbedder> external_view_embedder;
2029+ auto end_frame_callback =
2030+ [&](bool should_merge_thread,
2031+ fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
2032+ if (should_merge_thread) {
2033+ // TODO(cyanglaz): This test used external_view_embedder so we need to
2034+ // merge the threads here. However, the scenario it is testing is
2035+ // unrelated to platform views. We should consider to update this test
2036+ // so it doesn't require external_view_embedder.
2037+ raster_thread_merger->MergeWithLease (10 );
2038+ external_view_embedder->UpdatePostPrerollResult (
2039+ PostPrerollResult::kSuccess );
2040+ }
2041+ end_frame_latch.Signal ();
2042+ };
20222043
2023- auto end_frame_callback = [&](bool , fml::RefPtr<fml::RasterThreadMerger>) {
2024- end_frame_latch.Signal ();
2025- };
2026-
2027- std::shared_ptr<ShellTestExternalViewEmbedder> external_view_embedder =
2028- std::make_shared<ShellTestExternalViewEmbedder>(
2029- std::move (end_frame_callback), PostPrerollResult::kSuccess , true );
2044+ external_view_embedder = std::make_shared<ShellTestExternalViewEmbedder>(
2045+ std::move (end_frame_callback), PostPrerollResult::kResubmitFrame , true );
20302046
20312047 std::unique_ptr<Shell> shell = CreateShell (
20322048 settings, GetTaskRunnersForFixture (), false , external_view_embedder);
@@ -2047,8 +2063,6 @@ TEST_F(ShellTest, DiscardLayerTreeOnResize) {
20472063
20482064 RunEngine (shell.get (), std::move (configuration));
20492065
2050- fml::WeakPtr<RuntimeDelegate> runtime_delegate = shell->GetEngine ();
2051-
20522066 PumpOneFrame (shell.get (), static_cast <double >(wrong_size.width ()),
20532067 static_cast <double >(wrong_size.height ()));
20542068
@@ -2060,10 +2074,14 @@ TEST_F(ShellTest, DiscardLayerTreeOnResize) {
20602074 static_cast <double >(expected_size.height ()));
20612075
20622076 end_frame_latch.Wait ();
2077+ // Threads not merged.
2078+ ASSERT_EQ (0 , external_view_embedder->GetSubmittedFrameCount ());
20632079
2080+ end_frame_latch.Wait ();
20642081 ASSERT_EQ (1 , external_view_embedder->GetSubmittedFrameCount ());
20652082 ASSERT_EQ (expected_size, external_view_embedder->GetLastSubmittedFrameSize ());
20662083
2084+ PlatformViewNotifyDestroyed (shell.get ());
20672085 DestroyShell (std::move (shell));
20682086}
20692087
0 commit comments