diff --git a/shell/platform/windows/BUILD.gn b/shell/platform/windows/BUILD.gn index 433736a42ff66..ecc9080965993 100644 --- a/shell/platform/windows/BUILD.gn +++ b/shell/platform/windows/BUILD.gn @@ -199,6 +199,7 @@ executable("flutter_windows_unittests") { "testing/flutter_window_test.h", "testing/flutter_windows_engine_builder.cc", "testing/flutter_windows_engine_builder.h", + "testing/mock_angle_surface_manager.h", "testing/mock_direct_manipulation.h", "testing/mock_gl_proc_table.h", "testing/mock_text_input_manager.cc", diff --git a/shell/platform/windows/flutter_windows_engine_unittests.cc b/shell/platform/windows/flutter_windows_engine_unittests.cc index 63c791b109932..3cbe679eb16e4 100644 --- a/shell/platform/windows/flutter_windows_engine_unittests.cc +++ b/shell/platform/windows/flutter_windows_engine_unittests.cc @@ -11,6 +11,7 @@ #include "flutter/shell/platform/windows/public/flutter_windows.h" #include "flutter/shell/platform/windows/testing/engine_modifier.h" #include "flutter/shell/platform/windows/testing/flutter_windows_engine_builder.h" +#include "flutter/shell/platform/windows/testing/mock_angle_surface_manager.h" #include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h" #include "flutter/shell/platform/windows/testing/mock_windows_proc_table.h" #include "flutter/shell/platform/windows/testing/test_keyboard.h" @@ -131,7 +132,7 @@ TEST_F(FlutterWindowsEngineTest, RunDoesExpectedInitialization) { })); // Set the AngleSurfaceManager to !nullptr to test ANGLE rendering. - modifier.SetSurfaceManager(reinterpret_cast(1)); + modifier.SetSurfaceManager(std::make_unique()); engine->Run(); diff --git a/shell/platform/windows/flutter_windows_view_unittests.cc b/shell/platform/windows/flutter_windows_view_unittests.cc index ee5c280c6b7ba..de1379bf55290 100644 --- a/shell/platform/windows/flutter_windows_view_unittests.cc +++ b/shell/platform/windows/flutter_windows_view_unittests.cc @@ -19,6 +19,7 @@ #include "flutter/shell/platform/windows/flutter_windows_engine.h" #include "flutter/shell/platform/windows/flutter_windows_texture_registrar.h" #include "flutter/shell/platform/windows/testing/engine_modifier.h" +#include "flutter/shell/platform/windows/testing/mock_angle_surface_manager.h" #include "flutter/shell/platform/windows/testing/mock_window_binding_handler.h" #include "flutter/shell/platform/windows/testing/test_keyboard.h" @@ -118,28 +119,6 @@ class MockFlutterWindowsEngine : public FlutterWindowsEngine { FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterWindowsEngine); }; -class MockAngleSurfaceManager : public AngleSurfaceManager { - public: - MockAngleSurfaceManager() : AngleSurfaceManager(false) {} - - MOCK_METHOD(bool, - CreateSurface, - (WindowsRenderTarget*, EGLint, EGLint), - (override)); - MOCK_METHOD(void, - ResizeSurface, - (WindowsRenderTarget*, EGLint, EGLint, bool), - (override)); - MOCK_METHOD(void, DestroySurface, (), (override)); - - MOCK_METHOD(bool, MakeCurrent, (), (override)); - MOCK_METHOD(bool, ClearCurrent, (), (override)); - MOCK_METHOD(void, SetVSyncEnabled, (bool), (override)); - - private: - FML_DISALLOW_COPY_AND_ASSIGN(MockAngleSurfaceManager); -}; - } // namespace // Ensure that submenu buttons have their expanded/collapsed status set @@ -264,7 +243,7 @@ TEST(FlutterWindowsViewTest, Shutdown) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); } @@ -847,7 +826,7 @@ TEST(FlutterWindowsViewTest, WindowResizeTests) { EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); FlutterWindowsView view(std::move(window_binding_handler)); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); fml::AutoResetWaitableEvent metrics_sent_latch; @@ -1250,7 +1229,7 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAtStartup) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); view.CreateRenderSurface(); @@ -1283,7 +1262,7 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAtStartup) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); view.CreateRenderSurface(); @@ -1320,7 +1299,7 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAfterStartup) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); view.CreateRenderSurface(); @@ -1358,7 +1337,7 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAfterStartup) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); view.CreateRenderSurface(); @@ -1399,7 +1378,7 @@ TEST(FlutterWindowsViewTest, UpdatesVSyncOnDwmUpdates) { EXPECT_CALL(*engine.get(), Stop).Times(1); EXPECT_CALL(*surface_manager.get(), DestroySurface).Times(1); - modifier.SetSurfaceManager(surface_manager.release()); + modifier.SetSurfaceManager(std::move(surface_manager)); view.SetEngine(engine.get()); view.GetEngine()->OnDwmCompositionChanged(); diff --git a/shell/platform/windows/testing/engine_modifier.h b/shell/platform/windows/testing/engine_modifier.h index ee355c0b5b973..a11ce1047da4f 100644 --- a/shell/platform/windows/testing/engine_modifier.h +++ b/shell/platform/windows/testing/engine_modifier.h @@ -29,14 +29,12 @@ class EngineModifier { // engine unless overwritten again. FlutterEngineProcTable& embedder_api() { return engine_->embedder_api_; } - // Explicitly sets the SurfaceManager being used by the FlutterWindowsEngine - // instance. This allows us to test fallback paths when a SurfaceManager fails - // to initialize for whatever reason. + // Override the surface manager used by the engine. // // Modifications are to the engine, and will last for the lifetime of the // engine unless overwritten again. - void SetSurfaceManager(AngleSurfaceManager* surface_manager) { - engine_->surface_manager_.reset(surface_manager); + void SetSurfaceManager(std::unique_ptr surface_manager) { + engine_->surface_manager_ = std::move(surface_manager); } /// Reset the start_time field that is used to align vsync events. diff --git a/shell/platform/windows/testing/mock_angle_surface_manager.h b/shell/platform/windows/testing/mock_angle_surface_manager.h new file mode 100644 index 0000000000000..412dcc64e30d2 --- /dev/null +++ b/shell/platform/windows/testing/mock_angle_surface_manager.h @@ -0,0 +1,41 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_ +#define FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_ + +#include "flutter/fml/macros.h" +#include "flutter/shell/platform/windows/angle_surface_manager.h" +#include "gmock/gmock.h" + +namespace flutter { +namespace testing { + +/// Mock for the |AngleSurfaceManager| base class. +class MockAngleSurfaceManager : public AngleSurfaceManager { + public: + MockAngleSurfaceManager() : AngleSurfaceManager(false) {} + + MOCK_METHOD(bool, + CreateSurface, + (WindowsRenderTarget*, EGLint, EGLint), + (override)); + MOCK_METHOD(void, + ResizeSurface, + (WindowsRenderTarget*, EGLint, EGLint, bool), + (override)); + MOCK_METHOD(void, DestroySurface, (), (override)); + + MOCK_METHOD(bool, MakeCurrent, (), (override)); + MOCK_METHOD(bool, ClearCurrent, (), (override)); + MOCK_METHOD(void, SetVSyncEnabled, (bool), (override)); + + private: + FML_DISALLOW_COPY_AND_ASSIGN(MockAngleSurfaceManager); +}; + +} // namespace testing +} // namespace flutter + +#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_MOCK_ANGLE_SURFACE_MANAGER_H_