Flutter Engine
 
Loading...
Searching...
No Matches
android_shell_holder_unittests.cc
Go to the documentation of this file.
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#include <memory>
6
8#include "gmock/gmock.h"
9#include "gtest/gtest.h"
11
12namespace flutter {
13namespace testing {
14namespace {
15class MockPlatformViewAndroidJNI : public PlatformViewAndroidJNI {
16 public:
17 MOCK_METHOD(void,
18 FlutterViewHandlePlatformMessage,
19 (std::unique_ptr<flutter::PlatformMessage> message,
20 int responseId),
21 (override));
22 MOCK_METHOD(void,
23 FlutterViewHandlePlatformMessageResponse,
24 (int responseId, std::unique_ptr<fml::Mapping> data),
25 (override));
26 MOCK_METHOD(void,
27 FlutterViewUpdateSemantics,
28 (std::vector<uint8_t> buffer,
29 std::vector<std::string> strings,
30 std::vector<std::vector<uint8_t>> string_attribute_args),
31 (override));
32 MOCK_METHOD(void,
33 FlutterViewSetApplicationLocale,
34 (const std::string locale),
35 (override));
36 MOCK_METHOD(void,
37 FlutterViewUpdateCustomAccessibilityActions,
38 (std::vector<uint8_t> actions_buffer,
39 std::vector<std::string> strings),
40 (override));
41 MOCK_METHOD(void, FlutterViewOnFirstFrame, (), (override));
42 MOCK_METHOD(void, FlutterViewOnPreEngineRestart, (), (override));
43 MOCK_METHOD(void,
44 SurfaceTextureAttachToGLContext,
45 (JavaLocalRef surface_texture, int textureId),
46 (override));
47 MOCK_METHOD(bool,
48 SurfaceTextureShouldUpdate,
49 (JavaLocalRef surface_texture),
50 (override));
51 MOCK_METHOD(void,
52 SurfaceTextureUpdateTexImage,
53 (JavaLocalRef surface_texture),
54 (override));
55 MOCK_METHOD(SkM44,
56 SurfaceTextureGetTransformMatrix,
57 (JavaLocalRef surface_texture),
58 (override));
59 MOCK_METHOD(void,
60 SurfaceTextureDetachFromGLContext,
61 (JavaLocalRef surface_texture),
62 (override));
63 MOCK_METHOD(JavaLocalRef,
64 ImageProducerTextureEntryAcquireLatestImage,
65 (JavaLocalRef image_texture_entry),
66 (override));
67 MOCK_METHOD(JavaLocalRef,
68 ImageGetHardwareBuffer,
70 (override));
71 MOCK_METHOD(void, ImageClose, (JavaLocalRef image), (override));
72 MOCK_METHOD(void,
73 HardwareBufferClose,
74 (JavaLocalRef hardware_buffer),
75 (override));
76 MOCK_METHOD(void,
77 FlutterViewOnDisplayPlatformView,
78 (int view_id,
79 int x,
80 int y,
81 int width,
82 int height,
83 int viewWidth,
84 int viewHeight,
85 MutatorsStack mutators_stack),
86 (override));
87 MOCK_METHOD(void,
88 FlutterViewDisplayOverlaySurface,
89 (int surface_id, int x, int y, int width, int height),
90 (override));
91 MOCK_METHOD(void, FlutterViewBeginFrame, (), (override));
92 MOCK_METHOD(void, FlutterViewEndFrame, (), (override));
93 MOCK_METHOD(std::unique_ptr<PlatformViewAndroidJNI::OverlayMetadata>,
94 FlutterViewCreateOverlaySurface,
95 (),
96 (override));
97 MOCK_METHOD(void, FlutterViewDestroyOverlaySurfaces, (), (override));
98 MOCK_METHOD(ASurfaceTransaction*, createTransaction, (), (override));
99 MOCK_METHOD(void, swapTransaction, (), (override));
100 MOCK_METHOD(void, applyTransaction, (), (override));
101 MOCK_METHOD(void, destroyOverlaySurface2, (), (override));
102 MOCK_METHOD(std::unique_ptr<PlatformViewAndroidJNI::OverlayMetadata>,
103 createOverlaySurface2,
104 (),
105 (override));
106 MOCK_METHOD(void,
107 onDisplayPlatformView2,
108 (int32_t view_id,
109 int32_t x,
110 int32_t y,
111 int32_t width,
112 int32_t height,
113 int32_t viewWidth,
114 int32_t viewHeight,
115 MutatorsStack mutators_stack),
116 (override));
117 MOCK_METHOD(void, hidePlatformView2, (int32_t view_id), (override));
118 MOCK_METHOD(void, onEndFrame2, (), (override));
119 MOCK_METHOD(void, showOverlaySurface2, (), (override));
120 MOCK_METHOD(void, hideOverlaySurface2, (), (override));
121 MOCK_METHOD(std::unique_ptr<std::vector<std::string>>,
122 FlutterViewComputePlatformResolvedLocale,
123 (std::vector<std::string> supported_locales_data),
124 (override));
125 MOCK_METHOD(double, GetDisplayRefreshRate, (), (override));
126 MOCK_METHOD(double, GetDisplayWidth, (), (override));
127 MOCK_METHOD(double, GetDisplayHeight, (), (override));
128 MOCK_METHOD(double, GetDisplayDensity, (), (override));
129 MOCK_METHOD(bool,
130 RequestDartDeferredLibrary,
131 (int loading_unit_id),
132 (override));
133 MOCK_METHOD(double,
134 FlutterViewGetScaledFontSize,
135 (double font_size, int configuration_id),
136 (const, override));
137};
138
139class MockPlatformMessageResponse : public PlatformMessageResponse {
140 public:
142 return fml::AdoptRef(new MockPlatformMessageResponse());
143 }
144 MOCK_METHOD(void, Complete, (std::unique_ptr<fml::Mapping> data), (override));
145 MOCK_METHOD(void, CompleteEmpty, (), (override));
146};
147} // namespace
148
150 Settings settings;
151 settings.enable_software_rendering = false;
152 auto jni = std::make_shared<MockPlatformViewAndroidJNI>();
153 auto holder = std::make_unique<AndroidShellHolder>(
155 EXPECT_NE(holder.get(), nullptr);
156 EXPECT_TRUE(holder->IsValid());
157 EXPECT_NE(holder->GetPlatformView().get(), nullptr);
158 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
159 nullptr, /*is_fake_window=*/true);
160 holder->GetPlatformView()->NotifyCreated(window);
161}
162
163TEST(AndroidShellHolder, HandlePlatformMessage) {
164 Settings settings;
165 settings.enable_software_rendering = false;
166 auto jni = std::make_shared<MockPlatformViewAndroidJNI>();
167 auto holder = std::make_unique<AndroidShellHolder>(
169 EXPECT_NE(holder.get(), nullptr);
170 EXPECT_TRUE(holder->IsValid());
171 EXPECT_NE(holder->GetPlatformView().get(), nullptr);
172 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
173 nullptr, /*is_fake_window=*/true);
174 holder->GetPlatformView()->NotifyCreated(window);
175 EXPECT_TRUE(holder->GetPlatformMessageHandler());
176 size_t data_size = 4;
177 fml::MallocMapping bytes =
178 fml::MallocMapping(static_cast<uint8_t*>(malloc(data_size)), data_size);
180 MockPlatformMessageResponse::Create();
181 auto message = std::make_unique<PlatformMessage>(
182 /*channel=*/"foo", /*data=*/std::move(bytes), /*response=*/response);
183 int response_id = 1;
184 EXPECT_CALL(*jni,
185 FlutterViewHandlePlatformMessage(::testing::_, response_id));
186 EXPECT_CALL(*response, CompleteEmpty());
187 holder->GetPlatformMessageHandler()->HandlePlatformMessage(
188 std::move(message));
189 holder->GetPlatformMessageHandler()
190 ->InvokePlatformMessageEmptyResponseCallback(response_id);
191}
192
193TEST(AndroidShellHolder, CreateWithMergedPlatformAndUIThread) {
194 Settings settings;
195 auto jni = std::make_shared<MockPlatformViewAndroidJNI>();
196 auto holder = std::make_unique<AndroidShellHolder>(
198 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
199 nullptr, /*is_fake_window=*/true);
200 holder->GetPlatformView()->NotifyCreated(window);
201
202 EXPECT_EQ(
203 holder->GetShellForTesting()->GetTaskRunners().GetUITaskRunner(),
204 holder->GetShellForTesting()->GetTaskRunners().GetPlatformTaskRunner());
205}
206
207TEST(AndroidShellHolder, CreateWithUnMergedPlatformAndUIThread) {
208 Settings settings;
211 auto jni = std::make_shared<MockPlatformViewAndroidJNI>();
212 auto holder = std::make_unique<AndroidShellHolder>(
214 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
215 nullptr, /*is_fake_window=*/true);
216 holder->GetPlatformView()->NotifyCreated(window);
217
218 EXPECT_NE(
219 holder->GetShellForTesting()->GetTaskRunners().GetUITaskRunner(),
220 holder->GetShellForTesting()->GetTaskRunners().GetPlatformTaskRunner());
221}
222
223} // namespace testing
224} // namespace flutter
This is the Android owner of the core engine Shell.
A Mapping like NonOwnedMapping, but uses Free as its release proc.
Definition mapping.h:144
int32_t x
FlutterVulkanImage * image
GLFWwindow * window
Definition main.cc:60
G_BEGIN_DECLS GBytes * message
G_BEGIN_DECLS FlutterViewId view_id
double y
TEST(NativeAssetsManagerTest, NoAvailableAssets)
std::nullptr_t JavaLocalRef
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36
RefPtr< T > AdoptRef(T *ptr)
Definition ref_ptr.h:227
ScopedObject< Object > Create(CtorArgs &&... args)
Definition object.h:161
int32_t height
int32_t width
bool enable_software_rendering
Definition settings.h:317
MergedPlatformUIThread merged_platform_ui_thread
Definition settings.h:379
Scalar font_size