1 /*
2  * Copyright 2020 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "include/core/SkFont.h"
9 #include "include/core/SkFontStyle.h"
10 #include "include/core/SkMatrix.h"
11 #include "include/core/SkPaint.h"
12 #include "include/core/SkRefCnt.h"
13 #include "include/core/SkSurfaceProps.h"
14 #include "include/core/SkTypeface.h"
15 #include "src/core/SkScalerContext.h"
16 #include "src/core/SkStrike.h"  // IWYU pragma: keep
17 #include "src/core/SkStrikeCache.h"
18 #include "src/core/SkStrikeSpec.h"
19 #include "tests/Test.h"
20 #include "tools/ToolUtils.h"
21 
DEF_TEST(SkStrikeCache_CachePurge,Reporter)22 DEF_TEST(SkStrikeCache_CachePurge, Reporter) {
23     SkStrikeCache cache;
24 
25     sk_sp<SkTypeface> typeface =
26             ToolUtils::create_portable_typeface("serif", SkFontStyle::Italic());
27 
28     SkFont font;
29     font.setEdging(SkFont::Edging::kAntiAlias);
30     font.setSubpixel(true);
31     font.setTypeface(typeface);
32 
33     SkPaint defaultPaint;
34     SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask(
35             font, defaultPaint, SkSurfaceProps(0, kUnknown_SkPixelGeometry),
36             SkScalerContextFlags::kNone, SkMatrix::I());
37 
38     // Initially empty cache
39     REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
40 
41     {
42         sk_sp<SkStrike> strike = strikeSpec.findOrCreateStrike(&cache);
43     }
44 
45     // Stuff in cache.
46     REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() > 0);
47 
48     cache.purgeAll();
49 
50     // Purged cache.
51     REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
52 
53     // Smallest cache.
54     cache.setCacheSizeLimit(0);
55     {
56         sk_sp<SkStrike> strike = strikeSpec.findOrCreateStrike(&cache);
57         REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
58     }
59     REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
60 
61 
62 }
63