19
19
20
20
using testing::_;
21
21
using testing::ByMove;
22
+ using testing::NiceMock;
22
23
using testing::Return;
23
24
using testing::ReturnRef;
24
25
@@ -77,7 +78,7 @@ class MockExternalViewEmbedder : public ExternalViewEmbedder {
77
78
} // namespace
78
79
79
80
TEST (RasterizerTest, create) {
80
- MockDelegate delegate;
81
+ NiceMock< MockDelegate> delegate;
81
82
auto rasterizer = std::make_unique<Rasterizer>(delegate);
82
83
EXPECT_TRUE (rasterizer != nullptr );
83
84
}
@@ -106,10 +107,10 @@ TEST(RasterizerTest, drawEmptyPipeline) {
106
107
thread_host.raster_thread ->GetTaskRunner (),
107
108
thread_host.ui_thread ->GetTaskRunner (),
108
109
thread_host.io_thread ->GetTaskRunner ());
109
- MockDelegate delegate;
110
+ NiceMock< MockDelegate> delegate;
110
111
ON_CALL (delegate, GetTaskRunners ()).WillByDefault (ReturnRef (task_runners));
111
112
auto rasterizer = std::make_unique<Rasterizer>(delegate);
112
- auto surface = std::make_unique<MockSurface>();
113
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
113
114
EXPECT_CALL (*surface, MakeRenderContextCurrent ())
114
115
.WillOnce (Return (ByMove (std::make_unique<GLContextDefaultResult>(true ))));
115
116
rasterizer->Setup (std::move (surface));
@@ -133,15 +134,15 @@ TEST(RasterizerTest,
133
134
thread_host.raster_thread ->GetTaskRunner (),
134
135
thread_host.ui_thread ->GetTaskRunner (),
135
136
thread_host.io_thread ->GetTaskRunner ());
136
- MockDelegate delegate;
137
+ NiceMock< MockDelegate> delegate;
137
138
EXPECT_CALL (delegate, GetTaskRunners ())
138
139
.WillRepeatedly (ReturnRef (task_runners));
139
140
EXPECT_CALL (delegate, OnFrameRasterized (_));
140
141
auto rasterizer = std::make_unique<Rasterizer>(delegate);
141
- auto surface = std::make_unique<MockSurface>();
142
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
142
143
143
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
144
- std::make_shared<MockExternalViewEmbedder>();
144
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
145
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
145
146
rasterizer->SetExternalViewEmbedder (external_view_embedder);
146
147
147
148
SurfaceFrame::FramebufferInfo framebuffer_info;
@@ -200,14 +201,14 @@ TEST(
200
201
thread_host.raster_thread ->GetTaskRunner (),
201
202
thread_host.ui_thread ->GetTaskRunner (),
202
203
thread_host.io_thread ->GetTaskRunner ());
203
- MockDelegate delegate;
204
+ NiceMock< MockDelegate> delegate;
204
205
EXPECT_CALL (delegate, GetTaskRunners ())
205
206
.WillRepeatedly (ReturnRef (task_runners));
206
207
EXPECT_CALL (delegate, OnFrameRasterized (_));
207
208
auto rasterizer = std::make_unique<Rasterizer>(delegate);
208
- auto surface = std::make_unique<MockSurface>();
209
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
210
- std::make_shared<MockExternalViewEmbedder>();
209
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
210
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
211
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
211
212
rasterizer->SetExternalViewEmbedder (external_view_embedder);
212
213
EXPECT_CALL (*external_view_embedder, SupportsDynamicThreadMerging)
213
214
.WillRepeatedly (Return (true ));
@@ -265,16 +266,16 @@ TEST(
265
266
thread_host.ui_thread ->GetTaskRunner (),
266
267
thread_host.io_thread ->GetTaskRunner ());
267
268
268
- MockDelegate delegate;
269
+ NiceMock< MockDelegate> delegate;
269
270
EXPECT_CALL (delegate, GetTaskRunners ())
270
271
.WillRepeatedly (ReturnRef (task_runners));
271
272
EXPECT_CALL (delegate, OnFrameRasterized (_));
272
273
273
274
auto rasterizer = std::make_unique<Rasterizer>(delegate);
274
- auto surface = std::make_unique<MockSurface>();
275
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
275
276
276
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
277
- std::make_shared<MockExternalViewEmbedder>();
277
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
278
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
278
279
rasterizer->SetExternalViewEmbedder (external_view_embedder);
279
280
280
281
SurfaceFrame::FramebufferInfo framebuffer_info;
@@ -329,16 +330,16 @@ TEST(RasterizerTest,
329
330
thread_host.ui_thread ->GetTaskRunner (),
330
331
thread_host.io_thread ->GetTaskRunner ());
331
332
332
- MockDelegate delegate;
333
+ NiceMock< MockDelegate> delegate;
333
334
EXPECT_CALL (delegate, GetTaskRunners ())
334
335
.WillRepeatedly (ReturnRef (task_runners));
335
336
EXPECT_CALL (delegate, OnFrameRasterized (_));
336
337
337
338
auto rasterizer = std::make_unique<Rasterizer>(delegate);
338
- auto surface = std::make_unique<MockSurface>();
339
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
339
340
340
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
341
- std::make_shared<MockExternalViewEmbedder>();
341
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
342
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
342
343
rasterizer->SetExternalViewEmbedder (external_view_embedder);
343
344
344
345
SurfaceFrame::FramebufferInfo framebuffer_info;
@@ -402,13 +403,13 @@ TEST(RasterizerTest, externalViewEmbedderDoesntEndFrameWhenNoSurfaceIsSet) {
402
403
thread_host.raster_thread ->GetTaskRunner (),
403
404
thread_host.ui_thread ->GetTaskRunner (),
404
405
thread_host.io_thread ->GetTaskRunner ());
405
- MockDelegate delegate;
406
+ NiceMock< MockDelegate> delegate;
406
407
EXPECT_CALL (delegate, GetTaskRunners ())
407
408
.WillRepeatedly (ReturnRef (task_runners));
408
409
auto rasterizer = std::make_unique<Rasterizer>(delegate);
409
410
410
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
411
- std::make_shared<MockExternalViewEmbedder>();
411
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
412
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
412
413
rasterizer->SetExternalViewEmbedder (external_view_embedder);
413
414
414
415
EXPECT_CALL (
@@ -445,17 +446,17 @@ TEST(RasterizerTest, externalViewEmbedderDoesntEndFrameWhenNotUsedThisFrame) {
445
446
thread_host.raster_thread ->GetTaskRunner (),
446
447
thread_host.ui_thread ->GetTaskRunner (),
447
448
thread_host.io_thread ->GetTaskRunner ());
448
- MockDelegate delegate;
449
+ NiceMock< MockDelegate> delegate;
449
450
EXPECT_CALL (delegate, GetTaskRunners ())
450
451
.WillRepeatedly (ReturnRef (task_runners));
451
452
452
453
auto rasterizer = std::make_unique<Rasterizer>(delegate);
453
- auto surface = std::make_unique<MockSurface>();
454
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
454
455
EXPECT_CALL (*surface, MakeRenderContextCurrent ())
455
456
.WillOnce (Return (ByMove (std::make_unique<GLContextDefaultResult>(true ))));
456
457
457
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
458
- std::make_shared<MockExternalViewEmbedder>();
458
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
459
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
459
460
rasterizer->SetExternalViewEmbedder (external_view_embedder);
460
461
rasterizer->Setup (std::move (surface));
461
462
@@ -500,17 +501,17 @@ TEST(RasterizerTest, externalViewEmbedderDoesntEndFrameWhenPipelineIsEmpty) {
500
501
thread_host.raster_thread ->GetTaskRunner (),
501
502
thread_host.ui_thread ->GetTaskRunner (),
502
503
thread_host.io_thread ->GetTaskRunner ());
503
- MockDelegate delegate;
504
+ NiceMock< MockDelegate> delegate;
504
505
EXPECT_CALL (delegate, GetTaskRunners ())
505
506
.WillRepeatedly (ReturnRef (task_runners));
506
507
507
508
auto rasterizer = std::make_unique<Rasterizer>(delegate);
508
- auto surface = std::make_unique<MockSurface>();
509
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
509
510
EXPECT_CALL (*surface, MakeRenderContextCurrent ())
510
511
.WillOnce (Return (ByMove (std::make_unique<GLContextDefaultResult>(true ))));
511
512
512
- std::shared_ptr<MockExternalViewEmbedder> external_view_embedder =
513
- std::make_shared<MockExternalViewEmbedder>();
513
+ std::shared_ptr<NiceMock< MockExternalViewEmbedder> > external_view_embedder =
514
+ std::make_shared<NiceMock< MockExternalViewEmbedder> >();
514
515
rasterizer->SetExternalViewEmbedder (external_view_embedder);
515
516
rasterizer->Setup (std::move (surface));
516
517
@@ -543,13 +544,13 @@ TEST(RasterizerTest,
543
544
thread_host.raster_thread ->GetTaskRunner (),
544
545
thread_host.ui_thread ->GetTaskRunner (),
545
546
thread_host.io_thread ->GetTaskRunner ());
546
- MockDelegate delegate;
547
+ NiceMock< MockDelegate> delegate;
547
548
EXPECT_CALL (delegate, GetTaskRunners ())
548
549
.WillRepeatedly (ReturnRef (task_runners));
549
550
EXPECT_CALL (delegate, OnFrameRasterized (_));
550
551
551
552
auto rasterizer = std::make_unique<Rasterizer>(delegate);
552
- auto surface = std::make_unique<MockSurface>();
553
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
553
554
auto is_gpu_disabled_sync_switch =
554
555
std::make_shared<const fml::SyncSwitch>(false );
555
556
@@ -597,12 +598,12 @@ TEST(
597
598
thread_host.raster_thread ->GetTaskRunner (),
598
599
thread_host.ui_thread ->GetTaskRunner (),
599
600
thread_host.io_thread ->GetTaskRunner ());
600
- MockDelegate delegate;
601
+ NiceMock< MockDelegate> delegate;
601
602
EXPECT_CALL (delegate, GetTaskRunners ())
602
603
.WillRepeatedly (ReturnRef (task_runners));
603
604
EXPECT_CALL (delegate, OnFrameRasterized (_));
604
605
auto rasterizer = std::make_unique<Rasterizer>(delegate);
605
- auto surface = std::make_unique<MockSurface>();
606
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
606
607
auto is_gpu_disabled_sync_switch =
607
608
std::make_shared<const fml::SyncSwitch>(true );
608
609
@@ -652,12 +653,12 @@ TEST(
652
653
thread_host.raster_thread ->GetTaskRunner (),
653
654
thread_host.ui_thread ->GetTaskRunner (),
654
655
thread_host.io_thread ->GetTaskRunner ());
655
- MockDelegate delegate;
656
+ NiceMock< MockDelegate> delegate;
656
657
EXPECT_CALL (delegate, GetTaskRunners ())
657
658
.WillRepeatedly (ReturnRef (task_runners));
658
659
EXPECT_CALL (delegate, OnFrameRasterized (_));
659
660
auto rasterizer = std::make_unique<Rasterizer>(delegate);
660
- auto surface = std::make_unique<MockSurface>();
661
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
661
662
auto is_gpu_disabled_sync_switch =
662
663
std::make_shared<const fml::SyncSwitch>(false );
663
664
@@ -706,12 +707,12 @@ TEST(
706
707
thread_host.raster_thread ->GetTaskRunner (),
707
708
thread_host.ui_thread ->GetTaskRunner (),
708
709
thread_host.io_thread ->GetTaskRunner ());
709
- MockDelegate delegate;
710
+ NiceMock< MockDelegate> delegate;
710
711
EXPECT_CALL (delegate, GetTaskRunners ())
711
712
.WillRepeatedly (ReturnRef (task_runners));
712
713
EXPECT_CALL (delegate, OnFrameRasterized (_)).Times (0 );
713
714
auto rasterizer = std::make_unique<Rasterizer>(delegate);
714
- auto surface = std::make_unique<MockSurface>();
715
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
715
716
auto is_gpu_disabled_sync_switch =
716
717
std::make_shared<const fml::SyncSwitch>(true );
717
718
@@ -758,7 +759,7 @@ TEST(RasterizerTest,
758
759
thread_host.raster_thread ->GetTaskRunner (),
759
760
thread_host.ui_thread ->GetTaskRunner (),
760
761
thread_host.io_thread ->GetTaskRunner ());
761
- MockDelegate delegate;
762
+ NiceMock< MockDelegate> delegate;
762
763
ON_CALL (delegate, GetTaskRunners ()).WillByDefault (ReturnRef (task_runners));
763
764
764
765
fml::AutoResetWaitableEvent latch;
@@ -769,7 +770,7 @@ TEST(RasterizerTest,
769
770
});
770
771
latch.Wait ();
771
772
772
- auto surface = std::make_unique<MockSurface>();
773
+ auto surface = std::make_unique<NiceMock< MockSurface> >();
773
774
EXPECT_CALL (*surface, AllowsDrawingWhenGpuDisabled ())
774
775
.WillRepeatedly (Return (true ));
775
776
ON_CALL (*surface, AcquireFrame (SkISize ()))
@@ -831,6 +832,88 @@ TEST(RasterizerTest,
831
832
latch.Wait ();
832
833
}
833
834
835
+ TEST (RasterizerTest, TeardownFreesResourceCache) {
836
+ std::string test_name =
837
+ ::testing::UnitTest::GetInstance ()->current_test_info()->name();
838
+ ThreadHost thread_host (" io.flutter.test." + test_name + " ." ,
839
+ ThreadHost::Type::Platform | ThreadHost::Type::RASTER |
840
+ ThreadHost::Type::IO | ThreadHost::Type::UI);
841
+ TaskRunners task_runners (" test" , thread_host.platform_thread ->GetTaskRunner (),
842
+ thread_host.raster_thread ->GetTaskRunner (),
843
+ thread_host.ui_thread ->GetTaskRunner (),
844
+ thread_host.io_thread ->GetTaskRunner ());
845
+
846
+ NiceMock<MockDelegate> delegate;
847
+ EXPECT_CALL (delegate, GetTaskRunners ())
848
+ .WillRepeatedly (ReturnRef (task_runners));
849
+
850
+ auto rasterizer = std::make_unique<Rasterizer>(delegate);
851
+ auto surface = std::make_unique<NiceMock<MockSurface>>();
852
+ auto context = GrDirectContext::MakeMock (nullptr );
853
+ context->setResourceCacheLimit (0 );
854
+
855
+ EXPECT_CALL (*surface, MakeRenderContextCurrent ())
856
+ .WillRepeatedly ([]() -> std::unique_ptr<GLContextResult> {
857
+ return std::make_unique<GLContextDefaultResult>(true );
858
+ });
859
+ EXPECT_CALL (*surface, GetContext ()).WillRepeatedly (Return (context.get ()));
860
+
861
+ rasterizer->Setup (std::move (surface));
862
+ EXPECT_EQ (context->getResourceCacheLimit (), 0ul );
863
+
864
+ rasterizer->SetResourceCacheMaxBytes (10000000 , false );
865
+ EXPECT_EQ (context->getResourceCacheLimit (), 10000000ul );
866
+ EXPECT_EQ (context->getResourceCachePurgeableBytes (), 0ul );
867
+
868
+ int count = 0 ;
869
+ size_t bytes = 0 ;
870
+ context->getResourceCacheUsage (&count, &bytes);
871
+ EXPECT_EQ (bytes, 0ul );
872
+
873
+ auto image_info =
874
+ SkImageInfo::MakeN32Premul (500 , 500 , SkColorSpace::MakeSRGB ());
875
+ auto sk_surface =
876
+ SkSurface::MakeRenderTarget (context.get (), SkBudgeted::kYes , image_info);
877
+ EXPECT_TRUE (sk_surface);
878
+
879
+ SkPaint paint;
880
+ sk_surface->getCanvas ()->drawPaint (paint);
881
+ sk_surface->getCanvas ()->flush ();
882
+ context->flushAndSubmit (true );
883
+
884
+ EXPECT_EQ (context->getResourceCachePurgeableBytes (), 0ul );
885
+
886
+ sk_surface.reset ();
887
+
888
+ context->getResourceCacheUsage (&count, &bytes);
889
+ EXPECT_GT (bytes, 0ul );
890
+ EXPECT_GT (context->getResourceCachePurgeableBytes (), 0ul );
891
+
892
+ rasterizer->Teardown ();
893
+ EXPECT_EQ (context->getResourceCachePurgeableBytes (), 0ul );
894
+ }
895
+
896
+ TEST (RasterizerTest, TeardownNoSurface) {
897
+ std::string test_name =
898
+ ::testing::UnitTest::GetInstance ()->current_test_info()->name();
899
+ ThreadHost thread_host (" io.flutter.test." + test_name + " ." ,
900
+ ThreadHost::Type::Platform | ThreadHost::Type::RASTER |
901
+ ThreadHost::Type::IO | ThreadHost::Type::UI);
902
+ TaskRunners task_runners (" test" , thread_host.platform_thread ->GetTaskRunner (),
903
+ thread_host.raster_thread ->GetTaskRunner (),
904
+ thread_host.ui_thread ->GetTaskRunner (),
905
+ thread_host.io_thread ->GetTaskRunner ());
906
+
907
+ NiceMock<MockDelegate> delegate;
908
+ EXPECT_CALL (delegate, GetTaskRunners ())
909
+ .WillRepeatedly (ReturnRef (task_runners));
910
+
911
+ auto rasterizer = std::make_unique<Rasterizer>(delegate);
912
+
913
+ EXPECT_TRUE (rasterizer);
914
+ rasterizer->Teardown ();
915
+ }
916
+
834
917
TEST (RasterizerTest, presentationTimeSetWhenVsyncTargetInFuture) {
835
918
std::string test_name =
836
919
::testing::UnitTest::GetInstance ()->current_test_info()->name();
@@ -841,7 +924,8 @@ TEST(RasterizerTest, presentationTimeSetWhenVsyncTargetInFuture) {
841
924
thread_host.raster_thread ->GetTaskRunner (),
842
925
thread_host.ui_thread ->GetTaskRunner (),
843
926
thread_host.io_thread ->GetTaskRunner ());
844
- MockDelegate delegate;
927
+
928
+ NiceMock<MockDelegate> delegate;
845
929
ON_CALL (delegate, GetTaskRunners ()).WillByDefault (ReturnRef (task_runners));
846
930
847
931
fml::AutoResetWaitableEvent latch;
@@ -920,7 +1004,8 @@ TEST(RasterizerTest, presentationTimeNotSetWhenVsyncTargetInPast) {
920
1004
thread_host.raster_thread ->GetTaskRunner (),
921
1005
thread_host.ui_thread ->GetTaskRunner (),
922
1006
thread_host.io_thread ->GetTaskRunner ());
923
- MockDelegate delegate;
1007
+
1008
+ NiceMock<MockDelegate> delegate;
924
1009
ON_CALL (delegate, GetTaskRunners ()).WillByDefault (ReturnRef (task_runners));
925
1010
926
1011
fml::AutoResetWaitableEvent latch;
0 commit comments