22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
5- #define FML_USED_ON_EMBEDDER
6-
75#include " flutter/shell/common/rasterizer.h"
86
97#include " flutter/shell/common/thread_host.h"
108#include " flutter/testing/testing.h"
119#include " gmock/gmock.h"
1210
1311using testing::_;
14- using testing::ByMove;
1512using testing::Return;
1613using testing::ReturnRef;
1714
@@ -95,65 +92,7 @@ TEST(RasterizerTest, drawEmptyPipeline) {
9592 latch.Wait ();
9693}
9794
98- TEST (RasterizerTest,
99- drawWithExternalViewEmbedder_ExternalViewEmbedderSubmitFrameCalled) {
100- std::string test_name =
101- ::testing::UnitTest::GetInstance ()->current_test_info()->name();
102- ThreadHost thread_host (" io.flutter.test." + test_name + " ." ,
103- ThreadHost::Type::Platform | ThreadHost::Type::GPU |
104- ThreadHost::Type::IO | ThreadHost::Type::UI);
105- TaskRunners task_runners (" test" , thread_host.platform_thread ->GetTaskRunner (),
106- thread_host.raster_thread ->GetTaskRunner (),
107- thread_host.ui_thread ->GetTaskRunner (),
108- thread_host.io_thread ->GetTaskRunner ());
109- MockDelegate delegate;
110- EXPECT_CALL (delegate, GetTaskRunners ())
111- .WillRepeatedly (ReturnRef (task_runners));
112- EXPECT_CALL (delegate, OnFrameRasterized (_));
113- auto rasterizer = std::make_unique<Rasterizer>(delegate);
114- auto surface = std::make_unique<MockSurface>();
115- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
116- std::make_shared<MockExternalViewEmbedder>();
117- rasterizer->SetExternalViewEmbedder (external_view_embedder);
118-
119- auto surface_frame = std::make_unique<SurfaceFrame>(
120- /* surface=*/ nullptr , /* supports_readback=*/ true ,
121- /* submit_callback=*/ [](const SurfaceFrame&, SkCanvas*) { return true ; });
122- EXPECT_CALL (*surface, AcquireFrame (SkISize ()))
123- .WillOnce (Return (ByMove (std::move (surface_frame))));
124-
125- EXPECT_CALL (*external_view_embedder,
126- BeginFrame (/* frame_size=*/ SkISize (), /* context=*/ nullptr ,
127- /* device_pixel_ratio=*/ 2.0 ,
128- /* raster_thread_merger=*/
129- fml::RefPtr<fml::RasterThreadMerger>(nullptr )))
130- .Times (1 );
131- EXPECT_CALL (*external_view_embedder, SubmitFrame).Times (1 );
132- EXPECT_CALL (
133- *external_view_embedder,
134- EndFrame (/* should_resubmit_frame=*/ false ,
135- /* raster_thread_merger=*/ fml::RefPtr<fml::RasterThreadMerger>(
136- nullptr )))
137- .Times (1 );
138-
139- rasterizer->Setup (std::move (surface));
140- fml::AutoResetWaitableEvent latch;
141- thread_host.raster_thread ->GetTaskRunner ()->PostTask ([&] {
142- auto pipeline = fml::AdoptRef (new Pipeline<LayerTree>(/* depth=*/ 10 ));
143- auto layer_tree = std::make_unique<LayerTree>(/* frame_size=*/ SkISize (),
144- /* device_pixel_ratio=*/ 2 .0f );
145- bool result = pipeline->Produce ().Complete (std::move (layer_tree));
146- EXPECT_TRUE (result);
147- auto no_discard = [](LayerTree&) { return false ; };
148- rasterizer->Draw (pipeline, no_discard);
149- latch.Signal ();
150- });
151- latch.Wait ();
152- }
153-
154- TEST (
155- RasterizerTest,
156- drawWithExternalViewEmbedderAndThreadMergerNotMerged_ExternalViewEmbedderSubmitFrameNotCalled) {
95+ TEST (RasterizerTest, drawWithExternalViewEmbedder) {
15796 std::string test_name =
15897 ::testing::UnitTest::GetInstance ()->current_test_info()->name();
15998 ThreadHost thread_host (" io.flutter.test." + test_name + " ." ,
@@ -169,27 +108,14 @@ TEST(
169108 EXPECT_CALL (delegate, OnFrameRasterized (_));
170109 auto rasterizer = std::make_unique<Rasterizer>(delegate);
171110 auto surface = std::make_unique<MockSurface>();
172- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
173- std::make_shared<MockExternalViewEmbedder>();
174- rasterizer->SetExternalViewEmbedder (external_view_embedder);
175- EXPECT_CALL (*external_view_embedder, SupportsDynamicThreadMerging)
176- .WillRepeatedly (Return (true ));
177- auto surface_frame = std::make_unique<SurfaceFrame>(
178- /* surface=*/ nullptr , /* supports_readback=*/ true ,
179- /* submit_callback=*/ [](const SurfaceFrame&, SkCanvas*) { return true ; });
180- EXPECT_CALL (*surface, AcquireFrame (SkISize ()))
181- .WillOnce (Return (ByMove (std::move (surface_frame))));
182-
183- EXPECT_CALL (*external_view_embedder,
184- BeginFrame (/* frame_size=*/ SkISize (), /* context=*/ nullptr ,
185- /* device_pixel_ratio=*/ 2.0 ,
186- /* raster_thread_merger=*/ _))
187- .Times (1 );
188- EXPECT_CALL (*external_view_embedder, SubmitFrame).Times (0 );
189- EXPECT_CALL (*external_view_embedder, EndFrame (/* should_resubmit_frame=*/ false ,
190- /* raster_thread_merger=*/ _))
191- .Times (1 );
192-
111+ MockExternalViewEmbedder external_view_embedder;
112+ EXPECT_CALL (*surface, GetExternalViewEmbedder ())
113+ .WillRepeatedly (Return (&external_view_embedder));
114+ EXPECT_CALL (external_view_embedder,
115+ BeginFrame (SkISize (), nullptr , 2.0 ,
116+ fml::RefPtr<fml::RasterThreadMerger>(nullptr )));
117+ EXPECT_CALL (external_view_embedder,
118+ EndFrame (false , fml::RefPtr<fml::RasterThreadMerger>(nullptr )));
193119 rasterizer->Setup (std::move (surface));
194120 fml::AutoResetWaitableEvent latch;
195121 thread_host.raster_thread ->GetTaskRunner ()->PostTask ([&] {
@@ -198,66 +124,12 @@ TEST(
198124 /* device_pixel_ratio=*/ 2 .0f );
199125 bool result = pipeline->Produce ().Complete (std::move (layer_tree));
200126 EXPECT_TRUE (result);
201- auto no_discard = [](LayerTree&) { return false ; };
127+ std::function<bool (LayerTree&)> no_discard = [](LayerTree&) {
128+ return false ;
129+ };
202130 rasterizer->Draw (pipeline, no_discard);
203131 latch.Signal ();
204132 });
205133 latch.Wait ();
206134}
207-
208- TEST (
209- RasterizerTest,
210- drawWithExternalViewEmbedderAndThreadsMerged_ExternalViewEmbedderSubmitFrameCalled) {
211- std::string test_name =
212- ::testing::UnitTest::GetInstance ()->current_test_info()->name();
213- ThreadHost thread_host (" io.flutter.test." + test_name + " ." ,
214- ThreadHost::Type::Platform | ThreadHost::Type::GPU |
215- ThreadHost::Type::IO | ThreadHost::Type::UI);
216- fml::MessageLoop::EnsureInitializedForCurrentThread ();
217- TaskRunners task_runners (" test" ,
218- fml::MessageLoop::GetCurrent ().GetTaskRunner (),
219- fml::MessageLoop::GetCurrent ().GetTaskRunner (),
220- thread_host.ui_thread ->GetTaskRunner (),
221- thread_host.io_thread ->GetTaskRunner ());
222-
223- MockDelegate delegate;
224- EXPECT_CALL (delegate, GetTaskRunners ())
225- .WillRepeatedly (ReturnRef (task_runners));
226- EXPECT_CALL (delegate, OnFrameRasterized (_));
227-
228- auto rasterizer = std::make_unique<Rasterizer>(delegate);
229- auto surface = std::make_unique<MockSurface>();
230-
231- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
232- std::make_shared<MockExternalViewEmbedder>();
233- rasterizer->SetExternalViewEmbedder (external_view_embedder);
234-
235- auto surface_frame = std::make_unique<SurfaceFrame>(
236- /* surface=*/ nullptr , /* supports_readback=*/ true ,
237- /* submit_callback=*/ [](const SurfaceFrame&, SkCanvas*) { return true ; });
238- EXPECT_CALL (*surface, AcquireFrame (SkISize ()))
239- .WillOnce (Return (ByMove (std::move (surface_frame))));
240- EXPECT_CALL (*external_view_embedder, SupportsDynamicThreadMerging)
241- .WillRepeatedly (Return (true ));
242-
243- EXPECT_CALL (*external_view_embedder,
244- BeginFrame (/* frame_size=*/ SkISize (), /* context=*/ nullptr ,
245- /* device_pixel_ratio=*/ 2.0 ,
246- /* raster_thread_merger=*/ _))
247- .Times (1 );
248- EXPECT_CALL (*external_view_embedder, SubmitFrame).Times (1 );
249- EXPECT_CALL (*external_view_embedder, EndFrame (/* should_resubmit_frame=*/ false ,
250- /* raster_thread_merger=*/ _))
251- .Times (1 );
252-
253- rasterizer->Setup (std::move (surface));
254-
255- auto pipeline = fml::AdoptRef (new Pipeline<LayerTree>(/* depth=*/ 10 ));
256- auto layer_tree = std::make_unique<LayerTree>(/* frame_size=*/ SkISize (),
257- /* device_pixel_ratio=*/ 2 .0f );
258- bool result = pipeline->Produce ().Complete (std::move (layer_tree));
259- EXPECT_TRUE (result);
260- auto no_discard = [](LayerTree&) { return false ; };
261- rasterizer->Draw (pipeline, no_discard);
262- }
263135} // namespace flutter
0 commit comments