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

Commit f89bc4f

Browse files
author
Emmanuel Garcia
committed
Use gmock
1 parent 424426c commit f89bc4f

File tree

11 files changed

+194
-244
lines changed

11 files changed

+194
-244
lines changed

shell/platform/android/external_view_embedder/external_view_embedder.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ void AndroidExternalViewEmbedder::BeginFrame(SkISize frame_size,
240240
Reset();
241241
frame_size_ = frame_size;
242242
device_pixel_ratio_ = device_pixel_ratio;
243+
jni_facade_->FlutterViewBeginFrame();
243244
}
244245

245246
// |ExternalViewEmbedder|
@@ -254,6 +255,7 @@ void AndroidExternalViewEmbedder::EndFrame(
254255
raster_thread_merger->MergeWithLease(kDefaultMergedLeaseDuration);
255256
should_run_rasterizer_on_platform_thread_ = false;
256257
}
258+
jni_facade_->FlutterViewEndFrame();
257259
}
258260

259261
} // namespace flutter

shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@
55
#include "flutter/fml/raster_thread_merger.h"
66
#include "flutter/fml/thread.h"
77
#include "flutter/shell/platform/android/external_view_embedder/external_view_embedder.h"
8+
#include "flutter/shell/platform/android/jni/mock_jni.h"
9+
#include "gmock/gmock.h"
810
#include "gtest/gtest.h"
911

1012
namespace flutter {
1113
namespace testing {
1214

15+
using ::testing::Mock;
16+
1317
TEST(AndroidExternalViewEmbedder, GetCurrentCanvases) {
14-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
18+
auto mock_jni = std::make_shared<MockJNI>();
19+
20+
EXPECT_CALL(*mock_jni, FlutterViewBeginFrame());
1521

22+
auto embedder =
23+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
1624
embedder->BeginFrame(SkISize::Make(10, 20), nullptr, 1.0);
1725

1826
embedder->PrerollCompositeEmbeddedView(
@@ -26,8 +34,28 @@ TEST(AndroidExternalViewEmbedder, GetCurrentCanvases) {
2634
ASSERT_EQ(SkISize::Make(10, 20), canvases[1]->getBaseLayerSize());
2735
}
2836

37+
TEST(AndroidExternalViewEmbedder, GetCurrentCanvases__CompositeOrder) {
38+
auto mock_jni = std::make_shared<MockJNI>();
39+
EXPECT_CALL(*mock_jni, FlutterViewBeginFrame());
40+
41+
auto embedder =
42+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
43+
embedder->BeginFrame(SkISize::Make(10, 20), nullptr, 1.0);
44+
45+
embedder->PrerollCompositeEmbeddedView(
46+
0, std::make_unique<EmbeddedViewParams>());
47+
embedder->PrerollCompositeEmbeddedView(
48+
1, std::make_unique<EmbeddedViewParams>());
49+
50+
auto canvases = embedder->GetCurrentCanvases();
51+
ASSERT_EQ(2UL, canvases.size());
52+
ASSERT_EQ(embedder->CompositeEmbeddedView(0), canvases[0]);
53+
ASSERT_EQ(embedder->CompositeEmbeddedView(1), canvases[1]);
54+
}
55+
2956
TEST(AndroidExternalViewEmbedder, CompositeEmbeddedView) {
30-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
57+
auto embedder =
58+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, nullptr, nullptr);
3159

3260
ASSERT_EQ(nullptr, embedder->CompositeEmbeddedView(0));
3361
embedder->PrerollCompositeEmbeddedView(
@@ -41,7 +69,8 @@ TEST(AndroidExternalViewEmbedder, CompositeEmbeddedView) {
4169
}
4270

4371
TEST(AndroidExternalViewEmbedder, CancelFrame) {
44-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
72+
auto embedder =
73+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, nullptr, nullptr);
4574

4675
embedder->PrerollCompositeEmbeddedView(
4776
0, std::make_unique<EmbeddedViewParams>());
@@ -52,7 +81,12 @@ TEST(AndroidExternalViewEmbedder, CancelFrame) {
5281
}
5382

5483
TEST(AndroidExternalViewEmbedder, RasterizerRunsOnPlatformThread) {
55-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
84+
auto mock_jni = std::make_shared<MockJNI>();
85+
EXPECT_CALL(*mock_jni, FlutterViewBeginFrame());
86+
EXPECT_CALL(*mock_jni, FlutterViewEndFrame());
87+
88+
auto embedder =
89+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
5690
auto platform_thread = new fml::Thread("platform");
5791
auto rasterizer_thread = new fml::Thread("rasterizer");
5892
auto platform_queue_id = platform_thread->GetTaskRunner()->GetTaskQueueId();
@@ -84,7 +118,11 @@ TEST(AndroidExternalViewEmbedder, RasterizerRunsOnPlatformThread) {
84118
}
85119

86120
TEST(AndroidExternalViewEmbedder, RasterizerRunsOnRasterizerThread) {
87-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
121+
auto mock_jni = std::make_shared<MockJNI>();
122+
EXPECT_CALL(*mock_jni, FlutterViewEndFrame());
123+
124+
auto embedder =
125+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
88126
auto platform_thread = new fml::Thread("platform");
89127
auto rasterizer_thread = new fml::Thread("rasterizer");
90128
auto platform_queue_id = platform_thread->GetTaskRunner()->GetTaskQueueId();
@@ -103,7 +141,11 @@ TEST(AndroidExternalViewEmbedder, RasterizerRunsOnRasterizerThread) {
103141
}
104142

105143
TEST(AndroidExternalViewEmbedder, PlatformViewRect) {
106-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
144+
auto mock_jni = std::make_shared<MockJNI>();
145+
EXPECT_CALL(*mock_jni, FlutterViewBeginFrame());
146+
147+
auto embedder =
148+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
107149
embedder->BeginFrame(SkISize::Make(100, 100), nullptr, 1.5);
108150

109151
auto view_params = std::make_unique<EmbeddedViewParams>();
@@ -116,7 +158,11 @@ TEST(AndroidExternalViewEmbedder, PlatformViewRect) {
116158
}
117159

118160
TEST(AndroidExternalViewEmbedder, PlatformViewRect__ChangedParams) {
119-
auto embedder = new AndroidExternalViewEmbedder(nullptr, nullptr, nullptr);
161+
auto mock_jni = std::make_shared<MockJNI>();
162+
EXPECT_CALL(*mock_jni, FlutterViewBeginFrame());
163+
164+
auto embedder =
165+
std::make_unique<AndroidExternalViewEmbedder>(nullptr, mock_jni, nullptr);
120166
embedder->BeginFrame(SkISize::Make(100, 100), nullptr, 1.5);
121167

122168
auto view_id = 0;

shell/platform/android/external_view_embedder/surface_pool_unittests.cc

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,34 @@
55
#include "flutter/shell/platform/android/external_view_embedder/surface_pool.h"
66
#include "flutter/shell/platform/android/jni/mock_jni.h"
77
#include "flutter/shell/platform/android/surface/mock_android_surface.h"
8+
#include "gmock/gmock.h"
89
#include "gtest/gtest.h"
910
#include "third_party/skia/include/gpu/GrContext.h"
1011

1112
namespace flutter {
1213
namespace testing {
1314

15+
using ::testing::ByMove;
16+
using ::testing::Return;
17+
1418
TEST(SurfacePool, GetLayer__AllocateOneLayer) {
1519
auto pool = new SurfacePool();
1620

1721
auto gr_context = GrContext::MakeMock(nullptr);
1822
auto android_context =
1923
std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware);
24+
2025
auto mock_jni = std::make_shared<MockJNI>();
26+
auto window = fml::MakeRefCounted<AndroidNativeWindow>(nullptr);
27+
EXPECT_CALL(*mock_jni, FlutterViewCreateOverlaySurface())
28+
.WillOnce(Return(
29+
ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
30+
0, window))));
31+
2132
auto surface_factory =
2233
[](std::shared_ptr<AndroidContext> android_context,
2334
std::shared_ptr<PlatformViewAndroidJNI> jni_facade) {
24-
return std::make_unique<MockAndroidSurface>(/*id=*/123);
35+
return std::make_unique<MockAndroidSurface>();
2536
};
2637
auto layer = pool->GetLayer(gr_context.get(), android_context, mock_jni,
2738
surface_factory);
@@ -30,9 +41,6 @@ TEST(SurfacePool, GetLayer__AllocateOneLayer) {
3041
ASSERT_EQ(gr_context.get(), layer->gr_context);
3142
ASSERT_NE(nullptr, layer->surface);
3243
ASSERT_EQ(gr_context.get(), layer->surface->GetContext());
33-
ASSERT_EQ(
34-
123,
35-
static_cast<MockAndroidSurface*>(layer->android_surface.get())->GetId());
3644
}
3745

3846
TEST(SurfacePool, GetUnusedLayers) {
@@ -41,11 +49,18 @@ TEST(SurfacePool, GetUnusedLayers) {
4149
auto gr_context = GrContext::MakeMock(nullptr);
4250
auto android_context =
4351
std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware);
52+
4453
auto mock_jni = std::make_shared<MockJNI>();
54+
auto window = fml::MakeRefCounted<AndroidNativeWindow>(nullptr);
55+
EXPECT_CALL(*mock_jni, FlutterViewCreateOverlaySurface())
56+
.WillOnce(Return(
57+
ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
58+
0, window))));
59+
4560
auto surface_factory =
4661
[](std::shared_ptr<AndroidContext> android_context,
4762
std::shared_ptr<PlatformViewAndroidJNI> jni_facade) {
48-
return std::make_unique<MockAndroidSurface>(/*id=*/123);
63+
return std::make_unique<MockAndroidSurface>();
4964
};
5065
auto layer = pool->GetLayer(gr_context.get(), android_context, mock_jni,
5166
surface_factory);
@@ -60,13 +75,20 @@ TEST(SurfacePool, GetLayer__Recycle) {
6075
auto pool = new SurfacePool();
6176

6277
auto gr_context_1 = GrContext::MakeMock(nullptr);
78+
79+
auto mock_jni = std::make_shared<MockJNI>();
80+
auto window = fml::MakeRefCounted<AndroidNativeWindow>(nullptr);
81+
EXPECT_CALL(*mock_jni, FlutterViewCreateOverlaySurface())
82+
.WillOnce(Return(
83+
ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
84+
0, window))));
85+
6386
auto android_context =
6487
std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware);
65-
auto mock_jni = std::make_shared<MockJNI>();
6688
auto surface_factory =
6789
[](std::shared_ptr<AndroidContext> android_context,
6890
std::shared_ptr<PlatformViewAndroidJNI> jni_facade) {
69-
return std::make_unique<MockAndroidSurface>(/*id=*/123);
91+
return std::make_unique<MockAndroidSurface>();
7092
};
7193
auto layer_1 = pool->GetLayer(gr_context_1.get(), android_context, mock_jni,
7294
surface_factory);
@@ -76,6 +98,7 @@ TEST(SurfacePool, GetLayer__Recycle) {
7698
auto gr_context_2 = GrContext::MakeMock(nullptr);
7799
auto layer_2 = pool->GetLayer(gr_context_2.get(), android_context, mock_jni,
78100
surface_factory);
101+
79102
ASSERT_NE(nullptr, layer_1);
80103
ASSERT_EQ(layer_1, layer_2);
81104
ASSERT_EQ(gr_context_2.get(), layer_1->gr_context);
@@ -88,11 +111,22 @@ TEST(SurfacePool, GetLayer__AllocateTwoLayers) {
88111
auto gr_context_1 = GrContext::MakeMock(nullptr);
89112
auto android_context =
90113
std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware);
114+
91115
auto mock_jni = std::make_shared<MockJNI>();
116+
auto window = fml::MakeRefCounted<AndroidNativeWindow>(nullptr);
117+
EXPECT_CALL(*mock_jni, FlutterViewCreateOverlaySurface())
118+
.Times(2)
119+
.WillOnce(Return(
120+
ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
121+
0, window))))
122+
.WillOnce(Return(
123+
ByMove(std::make_unique<PlatformViewAndroidJNI::OverlayMetadata>(
124+
1, window))));
125+
92126
auto surface_factory =
93127
[](std::shared_ptr<AndroidContext> android_context,
94128
std::shared_ptr<PlatformViewAndroidJNI> jni_facade) {
95-
return std::make_unique<MockAndroidSurface>(/*id=*/123);
129+
return std::make_unique<MockAndroidSurface>();
96130
};
97131
auto layer_1 = pool->GetLayer(gr_context_1.get(), android_context, mock_jni,
98132
surface_factory);
@@ -102,6 +136,8 @@ TEST(SurfacePool, GetLayer__AllocateTwoLayers) {
102136
ASSERT_NE(nullptr, layer_1);
103137
ASSERT_NE(nullptr, layer_2);
104138
ASSERT_NE(layer_1, layer_2);
139+
ASSERT_EQ(0, layer_1->id);
140+
ASSERT_EQ(1, layer_2->id);
105141
}
106142

107143
} // namespace testing

shell/platform/android/jni/BUILD.gn

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ source_set("jni") {
2222
}
2323

2424
source_set("mock_jni") {
25+
testonly = true
26+
2527
sources = [
26-
"mock_jni.cc",
2728
"mock_jni.h",
2829
]
2930

3031
public_configs = [ "//flutter:config" ]
3132

3233
deps = [
3334
":jni",
34-
"//third_party/skia",
3535
]
3636
}
3737

@@ -47,10 +47,10 @@ executable("jni_unittests") {
4747
]
4848

4949
deps = [
50-
":jni",
5150
":jni_fixtures",
5251
":mock_jni",
5352
"//flutter/testing",
5453
"//flutter/testing:dart",
54+
"//flutter/testing:skia",
5555
]
5656
}

shell/platform/android/jni/mock_jni.cc

Lines changed: 0 additions & 79 deletions
This file was deleted.

0 commit comments

Comments
 (0)