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