41 auto pool = std::make_unique<SurfacePool>(
false);
43 auto gr_context = GrDirectContext::MakeMock(
nullptr);
44 auto android_context =
47 auto jni_mock = std::make_shared<JNIMock>();
48 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
49 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
51 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
54 auto surface_factory =
55 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
56 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
57 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
58 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
59 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
60 return android_surface_mock;
62 auto layer = pool->GetLayer(gr_context.get(), *android_context, jni_mock,
65 ASSERT_TRUE(pool->HasLayers());
66 ASSERT_NE(
nullptr, layer);
67 ASSERT_EQ(
reinterpret_cast<intptr_t
>(gr_context.get()),
68 layer->gr_context_key);
72 auto pool = std::make_unique<SurfacePool>(
false);
74 auto gr_context = GrDirectContext::MakeMock(
nullptr);
75 auto android_context =
78 auto jni_mock = std::make_shared<JNIMock>();
79 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
80 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
82 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
85 auto surface_factory =
86 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
87 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
88 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
89 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
90 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
91 return android_surface_mock;
93 auto layer = pool->GetLayer(gr_context.get(), *android_context, jni_mock,
95 ASSERT_EQ(0UL, pool->GetUnusedLayers().size());
97 pool->RecycleLayers();
99 ASSERT_TRUE(pool->HasLayers());
100 ASSERT_EQ(1UL, pool->GetUnusedLayers().size());
101 ASSERT_EQ(layer, pool->GetUnusedLayers()[0]);
105 auto pool = std::make_unique<SurfacePool>(
false);
107 auto gr_context_1 = GrDirectContext::MakeMock(
nullptr);
108 auto jni_mock = std::make_shared<JNIMock>();
109 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
110 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
112 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
115 auto android_context =
118 auto gr_context_2 = GrDirectContext::MakeMock(
nullptr);
119 auto surface_factory = std::make_shared<TestAndroidSurfaceFactory>(
120 [gr_context_1, gr_context_2,
window]() {
121 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
123 EXPECT_CALL(*android_surface_mock,
124 CreateGPUSurface(gr_context_1.get()));
125 EXPECT_CALL(*android_surface_mock,
126 CreateGPUSurface(gr_context_2.get()));
128 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
129 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
130 return android_surface_mock;
132 auto layer_1 = pool->GetLayer(gr_context_1.get(), *android_context, jni_mock,
135 pool->RecycleLayers();
137 auto layer_2 = pool->GetLayer(gr_context_2.get(), *android_context, jni_mock,
140 ASSERT_TRUE(pool->HasLayers());
141 ASSERT_NE(
nullptr, layer_1);
142 ASSERT_EQ(layer_1, layer_2);
143 ASSERT_EQ(
reinterpret_cast<intptr_t
>(gr_context_2.get()),
144 layer_1->gr_context_key);
145 ASSERT_EQ(
reinterpret_cast<intptr_t
>(gr_context_2.get()),
146 layer_2->gr_context_key);
150 auto pool = std::make_unique<SurfacePool>(
false);
152 auto gr_context = GrDirectContext::MakeMock(
nullptr);
153 auto android_context =
156 auto jni_mock = std::make_shared<JNIMock>();
157 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
158 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
161 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
164 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
167 auto surface_factory =
168 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
169 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
170 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
171 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
172 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
173 return android_surface_mock;
175 auto layer_1 = pool->GetLayer(gr_context.get(), *android_context, jni_mock,
177 auto layer_2 = pool->GetLayer(gr_context.get(), *android_context, jni_mock,
180 ASSERT_TRUE(pool->HasLayers());
181 ASSERT_NE(
nullptr, layer_1);
182 ASSERT_NE(
nullptr, layer_2);
183 ASSERT_NE(layer_1, layer_2);
184 ASSERT_EQ(0, layer_1->id);
185 ASSERT_EQ(1, layer_2->id);
189 auto pool = std::make_unique<SurfacePool>(
true);
190 auto jni_mock = std::make_shared<JNIMock>();
192 EXPECT_CALL(*jni_mock, destroyOverlaySurface2()).Times(0);
193 pool->DestroyLayers(jni_mock);
195 auto gr_context = GrDirectContext::MakeMock(
nullptr);
196 auto android_context =
199 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
200 EXPECT_CALL(*jni_mock, createOverlaySurface2())
203 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
206 auto surface_factory =
207 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
208 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
209 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
210 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
211 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
212 return android_surface_mock;
214 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
216 EXPECT_CALL(*jni_mock, destroyOverlaySurface2());
218 ASSERT_TRUE(pool->HasLayers());
219 pool->DestroyLayers(jni_mock);
221 ASSERT_FALSE(pool->HasLayers());
222 ASSERT_TRUE(pool->GetUnusedLayers().empty());
226 auto pool = std::make_unique<SurfacePool>(
false);
227 auto jni_mock = std::make_shared<JNIMock>();
229 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces()).Times(0);
230 pool->DestroyLayers(jni_mock);
232 auto gr_context = GrDirectContext::MakeMock(
nullptr);
233 auto android_context =
236 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
237 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
240 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
243 auto surface_factory =
244 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
245 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
246 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
247 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
248 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
249 return android_surface_mock;
251 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
253 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces());
255 ASSERT_TRUE(pool->HasLayers());
256 pool->DestroyLayers(jni_mock);
258 ASSERT_FALSE(pool->HasLayers());
259 ASSERT_TRUE(pool->GetUnusedLayers().empty());
263 auto pool = std::make_unique<SurfacePool>(
false);
264 auto jni_mock = std::make_shared<JNIMock>();
266 auto gr_context = GrDirectContext::MakeMock(
nullptr);
267 auto android_context =
270 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
272 auto surface_factory =
273 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
274 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
275 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
276 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
277 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
278 return android_surface_mock;
280 pool->SetFrameSize(
DlISize(10, 10));
281 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces()).Times(0);
282 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
285 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
288 ASSERT_FALSE(pool->HasLayers());
290 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
292 ASSERT_TRUE(pool->HasLayers());
294 pool->SetFrameSize(
DlISize(20, 20));
295 EXPECT_CALL(*jni_mock, FlutterViewDestroyOverlaySurfaces()).Times(1);
296 EXPECT_CALL(*jni_mock, FlutterViewCreateOverlaySurface())
299 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
301 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
303 ASSERT_TRUE(pool->GetUnusedLayers().empty());
304 ASSERT_TRUE(pool->HasLayers());
308 auto pool = std::make_unique<SurfacePool>(
true);
309 auto jni_mock = std::make_shared<JNIMock>();
311 auto gr_context = GrDirectContext::MakeMock(
nullptr);
312 auto android_context =
315 auto window = fml::MakeRefCounted<AndroidNativeWindow>(
nullptr);
317 auto surface_factory =
318 std::make_shared<TestAndroidSurfaceFactory>([gr_context,
window]() {
319 auto android_surface_mock = std::make_unique<AndroidSurfaceMock>();
320 EXPECT_CALL(*android_surface_mock, CreateGPUSurface(gr_context.get()));
321 EXPECT_CALL(*android_surface_mock, SetNativeWindow(
window, _));
322 EXPECT_CALL(*android_surface_mock, IsValid()).WillOnce(Return(
true));
323 return android_surface_mock;
325 pool->SetFrameSize(
DlISize(10, 10));
326 EXPECT_CALL(*jni_mock, destroyOverlaySurface2()).Times(0);
327 EXPECT_CALL(*jni_mock, createOverlaySurface2())
330 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
333 ASSERT_FALSE(pool->HasLayers());
335 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
337 ASSERT_TRUE(pool->HasLayers());
339 pool->SetFrameSize(
DlISize(20, 20));
340 EXPECT_CALL(*jni_mock, destroyOverlaySurface2()).Times(1);
341 EXPECT_CALL(*jni_mock, createOverlaySurface2())
344 ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
346 pool->GetLayer(gr_context.get(), *android_context, jni_mock, surface_factory);
348 ASSERT_TRUE(pool->GetUnusedLayers().empty());
349 ASSERT_TRUE(pool->HasLayers());