Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 1a57215

Browse files
committed
Add ShellTest.DiscardLayerTreeOnResize
1 parent d01b804 commit 1a57215

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

shell/common/shell_test_external_view_embedder.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@
88
#include "flutter/flow/embedded_views.h"
99
#include "flutter/fml/raster_thread_merger.h"
1010

11-
namespace flutter {
11+
// Required for MSVC STL
12+
#ifndef _ENABLE_ATOMIC_ALIGNMENT_FIX
13+
#define _ENABLE_ATOMIC_ALIGNMENT_FIX
14+
#endif
1215

16+
namespace flutter {
1317
//------------------------------------------------------------------------------
1418
/// @brief The external view embedder used by |ShellTestPlatformViewGL|
1519
///

shell/common/shell_unittests.cc

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)