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

Commit d202141

Browse files
authored
[Windows] Refactor surface manager mocking (#48953)
See: #48849 (comment)
1 parent ae61286 commit d202141

5 files changed

Lines changed: 55 additions & 35 deletions

File tree

shell/platform/windows/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ executable("flutter_windows_unittests") {
199199
"testing/flutter_window_test.h",
200200
"testing/flutter_windows_engine_builder.cc",
201201
"testing/flutter_windows_engine_builder.h",
202+
"testing/mock_angle_surface_manager.h",
202203
"testing/mock_direct_manipulation.h",
203204
"testing/mock_gl_proc_table.h",
204205
"testing/mock_text_input_manager.cc",

shell/platform/windows/flutter_windows_engine_unittests.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "flutter/shell/platform/windows/public/flutter_windows.h"
1212
#include "flutter/shell/platform/windows/testing/engine_modifier.h"
1313
#include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h"
14+
#include "flutter/shell/platform/windows/testing/mock_angle_surface_manager.h"
1415
#include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
1516
#include "flutter/shell/platform/windows/testing/mock_windows_proc_table.h"
1617
#include "flutter/shell/platform/windows/testing/test_keyboard.h"
@@ -131,7 +132,7 @@ TEST_F(FlutterWindowsEngineTest, RunDoesExpectedInitialization) {
131132
}));
132133

133134
// Set the AngleSurfaceManager to !nullptr to test ANGLE rendering.
134-
modifier.SetSurfaceManager(reinterpret_cast<AngleSurfaceManager*>(1));
135+
modifier.SetSurfaceManager(std::make_unique<MockAngleSurfaceManager>());
135136

136137
engine->Run();
137138

shell/platform/windows/flutter_windows_view_unittests.cc

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "flutter/shell/platform/windows/flutter_windows_engine.h"
2020
#include "flutter/shell/platform/windows/flutter_windows_texture_registrar.h"
2121
#include "flutter/shell/platform/windows/testing/engine_modifier.h"
22+
#include "flutter/shell/platform/windows/testing/mock_angle_surface_manager.h"
2223
#include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h"
2324
#include "flutter/shell/platform/windows/testing/test_keyboard.h"
2425

@@ -118,28 +119,6 @@ class MockFlutterWindowsEngine : public FlutterWindowsEngine {
118119
FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterWindowsEngine);
119120
};
120121

121-
class MockAngleSurfaceManager : public AngleSurfaceManager {
122-
public:
123-
MockAngleSurfaceManager() : AngleSurfaceManager(false) {}
124-
125-
MOCK_METHOD(bool,
126-
CreateSurface,
127-
(WindowsRenderTarget*, EGLint, EGLint),
128-
(override));
129-
MOCK_METHOD(void,
130-
ResizeSurface,
131-
(WindowsRenderTarget*, EGLint, EGLint, bool),
132-
(override));
133-
MOCK_METHOD(void, DestroySurface, (), (override));
134-
135-
MOCK_METHOD(bool, MakeCurrent, (), (override));
136-
MOCK_METHOD(bool, ClearCurrent, (), (override));
137-
MOCK_METHOD(void, SetVSyncEnabled, (bool), (override));
138-
139-
private:
140-
FML_DISALLOW_COPY_AND_ASSIGN(MockAngleSurfaceManager);
141-
};
142-
143122
} // namespace
144123

145124
// Ensure that submenu buttons have their expanded/collapsed status set
@@ -264,7 +243,7 @@ TEST(FlutterWindowsViewTest, Shutdown) {
264243
EXPECT_CALL(*engine.get(), Stop).Times(1);
265244
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
266245

267-
modifier.SetSurfaceManager(surface_manager.release());
246+
modifier.SetSurfaceManager(std::move(surface_manager));
268247
view.SetEngine(engine.get());
269248
}
270249

@@ -847,7 +826,7 @@ TEST(FlutterWindowsViewTest, WindowResizeTests) {
847826
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
848827

849828
FlutterWindowsView view(std::move(window_binding_handler));
850-
modifier.SetSurfaceManager(surface_manager.release());
829+
modifier.SetSurfaceManager(std::move(surface_manager));
851830
view.SetEngine(engine.get());
852831

853832
fml::AutoResetWaitableEvent metrics_sent_latch;
@@ -1250,7 +1229,7 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAtStartup) {
12501229
EXPECT_CALL(*engine.get(), Stop).Times(1);
12511230
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
12521231

1253-
modifier.SetSurfaceManager(surface_manager.release());
1232+
modifier.SetSurfaceManager(std::move(surface_manager));
12541233
view.SetEngine(engine.get());
12551234

12561235
view.CreateRenderSurface();
@@ -1283,7 +1262,7 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAtStartup) {
12831262
EXPECT_CALL(*engine.get(), Stop).Times(1);
12841263
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
12851264

1286-
modifier.SetSurfaceManager(surface_manager.release());
1265+
modifier.SetSurfaceManager(std::move(surface_manager));
12871266
view.SetEngine(engine.get());
12881267

12891268
view.CreateRenderSurface();
@@ -1320,7 +1299,7 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAfterStartup) {
13201299
EXPECT_CALL(*engine.get(), Stop).Times(1);
13211300
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
13221301

1323-
modifier.SetSurfaceManager(surface_manager.release());
1302+
modifier.SetSurfaceManager(std::move(surface_manager));
13241303
view.SetEngine(engine.get());
13251304

13261305
view.CreateRenderSurface();
@@ -1358,7 +1337,7 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAfterStartup) {
13581337
EXPECT_CALL(*engine.get(), Stop).Times(1);
13591338
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
13601339

1361-
modifier.SetSurfaceManager(surface_manager.release());
1340+
modifier.SetSurfaceManager(std::move(surface_manager));
13621341
view.SetEngine(engine.get());
13631342

13641343
view.CreateRenderSurface();
@@ -1399,7 +1378,7 @@ TEST(FlutterWindowsViewTest, UpdatesVSyncOnDwmUpdates) {
13991378
EXPECT_CALL(*engine.get(), Stop).Times(1);
14001379
EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1);
14011380

1402-
modifier.SetSurfaceManager(surface_manager.release());
1381+
modifier.SetSurfaceManager(std::move(surface_manager));
14031382
view.SetEngine(engine.get());
14041383

14051384
view.GetEngine()->OnDwmCompositionChanged();

shell/platform/windows/testing/engine_modifier.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,12 @@ class EngineModifier {
2929
// engine unless overwritten again.
3030
FlutterEngineProcTable& embedder_api() { return engine_->embedder_api_; }
3131

32-
// Explicitly sets the SurfaceManager being used by the FlutterWindowsEngine
33-
// instance. This allows us to test fallback paths when a SurfaceManager fails
34-
// to initialize for whatever reason.
32+
// Override the surface manager used by the engine.
3533
//
3634
// Modifications are to the engine, and will last for the lifetime of the
3735
// engine unless overwritten again.
38-
void SetSurfaceManager(AngleSurfaceManager* surface_manager) {
39-
engine_->surface_manager_.reset(surface_manager);
36+
void SetSurfaceManager(std::unique_ptr<AngleSurfaceManager> surface_manager) {
37+
engine_->surface_manager_ = std::move(surface_manager);
4038
}
4139

4240
/// Reset the start_time field that is used to align vsync events.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_
6+
#define FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_
7+
8+
#include "flutter/fml/macros.h"
9+
#include "flutter/shell/platform/windows/angle_surface_manager.h"
10+
#include "gmock/gmock.h"
11+
12+
namespace flutter {
13+
namespace testing {
14+
15+
/// Mock for the |AngleSurfaceManager| base class.
16+
class MockAngleSurfaceManager : public AngleSurfaceManager {
17+
public:
18+
MockAngleSurfaceManager() : AngleSurfaceManager(false) {}
19+
20+
MOCK_METHOD(bool,
21+
CreateSurface,
22+
(WindowsRenderTarget*, EGLint, EGLint),
23+
(override));
24+
MOCK_METHOD(void,
25+
ResizeSurface,
26+
(WindowsRenderTarget*, EGLint, EGLint, bool),
27+
(override));
28+
MOCK_METHOD(void, DestroySurface, (), (override));
29+
30+
MOCK_METHOD(bool, MakeCurrent, (), (override));
31+
MOCK_METHOD(bool, ClearCurrent, (), (override));
32+
MOCK_METHOD(void, SetVSyncEnabled, (bool), (override));
33+
34+
private:
35+
FML_DISALLOW_COPY_AND_ASSIGN(MockAngleSurfaceManager);
36+
};
37+
38+
} // namespace testing
39+
} // namespace flutter
40+
41+
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_

0 commit comments

Comments
 (0)