10
10
#include " flutter/shell/platform/windows/egl/manager.h"
11
11
#include " flutter/shell/platform/windows/flutter_windows_view.h"
12
12
#include " flutter/shell/platform/windows/testing/egl/mock_manager.h"
13
+ #include " flutter/shell/platform/windows/testing/egl/mock_window_surface.h"
13
14
#include " flutter/shell/platform/windows/testing/engine_modifier.h"
14
15
#include " flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
15
16
#include " flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
@@ -65,20 +66,29 @@ class CompositorOpenGLTest : public WindowsTest {
65
66
protected:
66
67
FlutterWindowsEngine* engine () { return engine_.get (); }
67
68
egl::MockManager* egl_manager () { return egl_manager_; }
69
+ egl::MockWindowSurface* surface () { return surface_.get (); }
68
70
69
- void UseHeadlessEngine () {
71
+ void UseHeadlessEngine (bool add_surface = true ) {
70
72
auto egl_manager = std::make_unique<egl::MockManager>();
71
73
egl_manager_ = egl_manager.get ();
72
74
75
+ if (add_surface) {
76
+ surface_ = std::make_unique<egl::MockWindowSurface>();
77
+ EXPECT_CALL (*egl_manager_, surface)
78
+ .WillRepeatedly (Return (surface_.get ()));
79
+ } else {
80
+ EXPECT_CALL (*egl_manager_, surface).WillRepeatedly (Return (nullptr ));
81
+ }
82
+
73
83
FlutterWindowsEngineBuilder builder{GetContext ()};
74
84
75
85
engine_ = builder.Build ();
76
86
EngineModifier modifier (engine_.get ());
77
87
modifier.SetEGLManager (std::move (egl_manager));
78
88
}
79
89
80
- void UseEngineWithView () {
81
- UseHeadlessEngine ();
90
+ void UseEngineWithView (bool add_surface = true ) {
91
+ UseHeadlessEngine (add_surface );
82
92
83
93
auto window = std::make_unique<MockWindowBindingHandler>();
84
94
EXPECT_CALL (*window.get (), SetView).Times (1 );
@@ -92,6 +102,7 @@ class CompositorOpenGLTest : public WindowsTest {
92
102
private:
93
103
std::unique_ptr<FlutterWindowsEngine> engine_;
94
104
std::unique_ptr<FlutterWindowsView> view_;
105
+ std::unique_ptr<egl::MockWindowSurface> surface_;
95
106
egl::MockManager* egl_manager_;
96
107
97
108
FML_DISALLOW_COPY_AND_ASSIGN (CompositorOpenGLTest);
@@ -107,7 +118,8 @@ TEST_F(CompositorOpenGLTest, CreateBackingStore) {
107
118
FlutterBackingStoreConfig config = {};
108
119
FlutterBackingStore backing_store = {};
109
120
110
- EXPECT_CALL (*egl_manager (), MakeCurrent).WillOnce (Return (true ));
121
+ EXPECT_CALL (*surface (), IsValid).WillOnce (Return (true ));
122
+ EXPECT_CALL (*surface (), MakeCurrent).WillOnce (Return (true ));
111
123
ASSERT_TRUE (compositor.CreateBackingStore (config, &backing_store));
112
124
ASSERT_TRUE (compositor.CollectBackingStore (&backing_store));
113
125
}
@@ -120,7 +132,8 @@ TEST_F(CompositorOpenGLTest, InitializationFailure) {
120
132
FlutterBackingStoreConfig config = {};
121
133
FlutterBackingStore backing_store = {};
122
134
123
- EXPECT_CALL (*egl_manager (), MakeCurrent).WillOnce (Return (false ));
135
+ EXPECT_CALL (*surface (), IsValid).WillOnce (Return (true ));
136
+ EXPECT_CALL (*surface (), MakeCurrent).WillOnce (Return (false ));
124
137
EXPECT_FALSE (compositor.CreateBackingStore (config, &backing_store));
125
138
}
126
139
@@ -132,16 +145,17 @@ TEST_F(CompositorOpenGLTest, Present) {
132
145
FlutterBackingStoreConfig config = {};
133
146
FlutterBackingStore backing_store = {};
134
147
135
- EXPECT_CALL (*egl_manager (), MakeCurrent).WillOnce (Return (true ));
148
+ EXPECT_CALL (*surface (), IsValid).WillRepeatedly (Return (true ));
149
+ EXPECT_CALL (*surface (), MakeCurrent).WillOnce (Return (true ));
136
150
ASSERT_TRUE (compositor.CreateBackingStore (config, &backing_store));
137
151
138
152
FlutterLayer layer = {};
139
153
layer.type = kFlutterLayerContentTypeBackingStore ;
140
154
layer.backing_store = &backing_store;
141
155
const FlutterLayer* layer_ptr = &layer;
142
156
143
- EXPECT_CALL (*egl_manager (), MakeCurrent).WillOnce (Return (true ));
144
- EXPECT_CALL (*egl_manager (), SwapBuffers).WillOnce (Return (true ));
157
+ EXPECT_CALL (*surface (), MakeCurrent).WillOnce (Return (true ));
158
+ EXPECT_CALL (*surface (), SwapBuffers).WillOnce (Return (true ));
145
159
EXPECT_TRUE (compositor.Present (&layer_ptr, 1 ));
146
160
147
161
ASSERT_TRUE (compositor.CollectBackingStore (&backing_store));
@@ -154,10 +168,9 @@ TEST_F(CompositorOpenGLTest, PresentEmpty) {
154
168
155
169
// The context will be bound twice: first to initialize the compositor, second
156
170
// to clear the surface.
157
- EXPECT_CALL (*egl_manager (), MakeCurrent)
158
- .Times (2 )
159
- .WillRepeatedly (Return (true ));
160
- EXPECT_CALL (*egl_manager (), SwapBuffers).WillOnce (Return (true ));
171
+ EXPECT_CALL (*surface (), IsValid).WillRepeatedly (Return (true ));
172
+ EXPECT_CALL (*surface (), MakeCurrent).Times (2 ).WillRepeatedly (Return (true ));
173
+ EXPECT_CALL (*surface (), SwapBuffers).WillOnce (Return (true ));
161
174
EXPECT_TRUE (compositor.Present (nullptr , 0 ));
162
175
}
163
176
@@ -169,7 +182,8 @@ TEST_F(CompositorOpenGLTest, HeadlessPresentIgnored) {
169
182
FlutterBackingStoreConfig config = {};
170
183
FlutterBackingStore backing_store = {};
171
184
172
- EXPECT_CALL (*egl_manager (), MakeCurrent).WillOnce (Return (true ));
185
+ EXPECT_CALL (*surface (), IsValid).WillOnce (Return (true ));
186
+ EXPECT_CALL (*surface (), MakeCurrent).WillOnce (Return (true ));
173
187
ASSERT_TRUE (compositor.CreateBackingStore (config, &backing_store));
174
188
175
189
FlutterLayer layer = {};
@@ -182,5 +196,23 @@ TEST_F(CompositorOpenGLTest, HeadlessPresentIgnored) {
182
196
ASSERT_TRUE (compositor.CollectBackingStore (&backing_store));
183
197
}
184
198
199
+ TEST_F (CompositorOpenGLTest, NoSurfaceIgnored) {
200
+ UseEngineWithView (/* add_surface = */ false );
201
+
202
+ auto compositor = CompositorOpenGL{engine (), kMockResolver };
203
+
204
+ FlutterBackingStoreConfig config = {};
205
+ FlutterBackingStore backing_store = {};
206
+
207
+ ASSERT_FALSE (compositor.CreateBackingStore (config, &backing_store));
208
+
209
+ FlutterLayer layer = {};
210
+ layer.type = kFlutterLayerContentTypeBackingStore ;
211
+ layer.backing_store = nullptr ;
212
+ const FlutterLayer* layer_ptr = &layer;
213
+
214
+ EXPECT_FALSE (compositor.Present (&layer_ptr, 1 ));
215
+ }
216
+
185
217
} // namespace testing
186
218
} // namespace flutter
0 commit comments