@@ -2014,5 +2014,60 @@ TEST_F(ShellTest, OnServiceProtocolEstimateRasterCacheMemoryWorks) {
20142014 DestroyShell (std::move (shell));
20152015}
20162016
2017+ TEST_F (ShellTest, DiscardLayerTreeOnResize) {
2018+ auto settings = CreateSettingsForFixture ();
2019+
2020+ SkISize wrong_size = SkISize::Make (400 , 100 );
2021+ SkISize expected_size = SkISize::Make (400 , 200 );
2022+
2023+ fml::AutoResetWaitableEvent end_frame_latch;
2024+
2025+ auto end_frame_callback = [&](bool , fml::RefPtr<fml::RasterThreadMerger>) {
2026+ end_frame_latch.Signal ();
2027+ };
2028+
2029+ std::shared_ptr<ShellTestExternalViewEmbedder> external_view_embedder =
2030+ std::make_shared<ShellTestExternalViewEmbedder>(
2031+ std::move (end_frame_callback), PostPrerollResult::kSuccess , true );
2032+
2033+ std::unique_ptr<Shell> shell = CreateShell (
2034+ settings, GetTaskRunnersForFixture (), false , external_view_embedder);
2035+
2036+ // Create the surface needed by rasterizer
2037+ PlatformViewNotifyCreated (shell.get ());
2038+
2039+ fml::TaskRunner::RunNowOrPostTask (
2040+ shell->GetTaskRunners ().GetPlatformTaskRunner (),
2041+ [&shell, &expected_size]() {
2042+ shell->GetPlatformView ()->SetViewportMetrics (
2043+ {1.0 , static_cast <double >(expected_size.width ()),
2044+ static_cast <double >(expected_size.height ())});
2045+ });
2046+
2047+ auto configuration = RunConfiguration::InferFromSettings (settings);
2048+ configuration.SetEntrypoint (" emptyMain" );
2049+
2050+ RunEngine (shell.get (), std::move (configuration));
2051+
2052+ fml::WeakPtr<RuntimeDelegate> runtime_delegate = shell->GetEngine ();
2053+
2054+ PumpOneFrame (shell.get (), static_cast <double >(wrong_size.width ()),
2055+ static_cast <double >(wrong_size.height ()));
2056+
2057+ end_frame_latch.Wait ();
2058+
2059+ ASSERT_EQ (0 , external_view_embedder->GetSubmittedFrameCount ());
2060+
2061+ PumpOneFrame (shell.get (), static_cast <double >(expected_size.width ()),
2062+ static_cast <double >(expected_size.height ()));
2063+
2064+ end_frame_latch.Wait ();
2065+
2066+ ASSERT_EQ (1 , external_view_embedder->GetSubmittedFrameCount ());
2067+ ASSERT_EQ (expected_size, external_view_embedder->GetLastSubmittedFrameSize ());
2068+
2069+ DestroyShell (std::move (shell));
2070+ }
2071+
20172072} // namespace testing
20182073} // namespace flutter
0 commit comments