10 #include "flutter/shell/platform/windows/testing/engine_modifier.h"
11 #include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
12 #include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
13 #include "flutter/shell/platform/windows/testing/windows_test.h"
14 #include "gmock/gmock.h"
15 #include "gtest/gtest.h"
21 using ::testing::Return;
23 class MockFlutterWindowsView :
public FlutterWindowsView {
26 std::unique_ptr<WindowBindingHandler> window)
31 PresentSoftwareBitmap,
32 (
const void* allocation,
size_t row_bytes,
size_t height),
34 MOCK_METHOD(
bool, ClearSoftwareBitmap, (), (
override));
37 FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterWindowsView);
40 class CompositorSoftwareTest :
public WindowsTest {
42 CompositorSoftwareTest() =
default;
43 virtual ~CompositorSoftwareTest() =
default;
46 FlutterWindowsEngine* engine() {
return engine_.get(); }
47 MockFlutterWindowsView* view() {
return view_.get(); }
49 void UseHeadlessEngine() {
50 FlutterWindowsEngineBuilder builder{GetContext()};
52 engine_ = builder.Build();
55 void UseEngineWithView() {
56 FlutterWindowsEngineBuilder builder{GetContext()};
58 auto window = std::make_unique<MockWindowBindingHandler>();
59 EXPECT_CALL(*window.get(), SetView).Times(1);
60 EXPECT_CALL(*window.get(), GetWindowHandle).WillRepeatedly(Return(
nullptr));
62 engine_ = builder.Build();
63 view_ = std::make_unique<MockFlutterWindowsView>(engine_.get(),
66 EngineModifier modifier{engine_.get()};
67 modifier.SetImplicitView(view_.get());
71 std::unique_ptr<FlutterWindowsEngine> engine_;
72 std::unique_ptr<MockFlutterWindowsView> view_;
74 FML_DISALLOW_COPY_AND_ASSIGN(CompositorSoftwareTest);
79 TEST_F(CompositorSoftwareTest, CreateBackingStore) {
84 FlutterBackingStoreConfig config = {};
85 FlutterBackingStore backing_store = {};
87 ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
88 ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
91 TEST_F(CompositorSoftwareTest, Present) {
96 FlutterBackingStoreConfig config = {};
97 FlutterBackingStore backing_store = {};
99 ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
101 FlutterLayer layer = {};
102 layer.type = kFlutterLayerContentTypeBackingStore;
103 layer.backing_store = &backing_store;
104 const FlutterLayer* layer_ptr = &layer;
106 EXPECT_CALL(*view(), PresentSoftwareBitmap).WillOnce(Return(
true));
107 EXPECT_TRUE(compositor.Present(view()->view_id(), &layer_ptr, 1));
109 ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
112 TEST_F(CompositorSoftwareTest, PresentEmpty) {
117 EXPECT_CALL(*view(), ClearSoftwareBitmap).WillOnce(Return(
true));
118 EXPECT_TRUE(compositor.Present(view()->view_id(),
nullptr, 0));
121 TEST_F(CompositorSoftwareTest, UnknownViewIgnored) {
126 FlutterBackingStoreConfig config = {};
127 FlutterBackingStore backing_store = {};
129 ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
131 FlutterLayer layer = {};
132 layer.type = kFlutterLayerContentTypeBackingStore;
133 layer.backing_store = &backing_store;
134 const FlutterLayer* layer_ptr = &layer;
137 ASSERT_NE(view()->view_id(), unknown_view_id);
138 ASSERT_EQ(engine()->view(unknown_view_id),
nullptr);
140 EXPECT_FALSE(compositor.Present(unknown_view_id, &layer_ptr, 1));
142 ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));
145 TEST_F(CompositorSoftwareTest, HeadlessPresentIgnored) {
150 FlutterBackingStoreConfig config = {};
151 FlutterBackingStore backing_store = {};
153 ASSERT_TRUE(compositor.CreateBackingStore(config, &backing_store));
155 FlutterLayer layer = {};
156 layer.type = kFlutterLayerContentTypeBackingStore;
157 layer.backing_store = &backing_store;
158 const FlutterLayer* layer_ptr = &layer;
162 ASSERT_TRUE(compositor.CollectBackingStore(&backing_store));