• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "flutter/flow/raster_cache.h"
6 #include "gtest/gtest.h"
7 #include "third_party/skia/include/core/SkPicture.h"
8 #include "third_party/skia/include/core/SkPictureRecorder.h"
9 
GetSamplePicture()10 sk_sp<SkPicture> GetSamplePicture() {
11   SkPictureRecorder recorder;
12   recorder.beginRecording(SkRect::MakeWH(150, 100));
13   SkPaint paint;
14   paint.setColor(SK_ColorRED);
15   recorder.getRecordingCanvas()->drawRect(SkRect::MakeXYWH(10, 10, 80, 80),
16                                           paint);
17   return recorder.finishRecordingAsPicture();
18 }
19 
TEST(RasterCache,SimpleInitialization)20 TEST(RasterCache, SimpleInitialization) {
21   flutter::RasterCache cache;
22   ASSERT_TRUE(true);
23 }
24 
TEST(RasterCache,ThresholdIsRespected)25 TEST(RasterCache, ThresholdIsRespected) {
26   size_t threshold = 3;
27   flutter::RasterCache cache(threshold);
28 
29   SkMatrix matrix = SkMatrix::I();
30 
31   auto picture = GetSamplePicture();
32 
33   sk_sp<SkImage> image;
34 
35   sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB();
36   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
37                              false));  // 1
38   cache.SweepAfterFrame();
39   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
40                              false));  // 2
41   cache.SweepAfterFrame();
42   ASSERT_TRUE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
43                             false));  // 3
44   cache.SweepAfterFrame();
45 }
46 
TEST(RasterCache,ThresholdIsRespectedWhenZero)47 TEST(RasterCache, ThresholdIsRespectedWhenZero) {
48   size_t threshold = 0;
49   flutter::RasterCache cache(threshold);
50 
51   SkMatrix matrix = SkMatrix::I();
52 
53   auto picture = GetSamplePicture();
54 
55   sk_sp<SkImage> image;
56 
57   sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB();
58   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
59                              false));  // 1
60   cache.SweepAfterFrame();
61   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
62                              false));  // 2
63   cache.SweepAfterFrame();
64   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
65                              false));  // 3
66   cache.SweepAfterFrame();
67 }
68 
TEST(RasterCache,SweepsRemoveUnusedFrames)69 TEST(RasterCache, SweepsRemoveUnusedFrames) {
70   size_t threshold = 3;
71   flutter::RasterCache cache(threshold);
72 
73   SkMatrix matrix = SkMatrix::I();
74 
75   auto picture = GetSamplePicture();
76 
77   sk_sp<SkImage> image;
78 
79   sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB();
80   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
81                              false));  // 1
82   cache.SweepAfterFrame();
83   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
84                              false));  // 2
85   cache.SweepAfterFrame();
86   ASSERT_TRUE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
87                             false));  // 3
88   cache.SweepAfterFrame();
89   ASSERT_TRUE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
90                             false));  // 4
91   cache.SweepAfterFrame();
92   cache.SweepAfterFrame();  // Extra frame without a preroll image access.
93   ASSERT_FALSE(cache.Prepare(NULL, picture.get(), matrix, srgb.get(), true,
94                              false));  // 5
95 }
96