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 #include "tools/fonts/FontToolUtils.h"
22
DEF_TEST(SkStrikeCache_CachePurge,Reporter)23 DEF_TEST(SkStrikeCache_CachePurge, Reporter) {
24 SkStrikeCache cache;
25
26 sk_sp<SkTypeface> typeface =
27 ToolUtils::CreatePortableTypeface("serif", SkFontStyle::Italic());
28
29 SkFont font;
30 font.setEdging(SkFont::Edging::kAntiAlias);
31 font.setSubpixel(true);
32 font.setTypeface(typeface);
33
34 SkPaint defaultPaint;
35 SkStrikeSpec strikeSpec = SkStrikeSpec::MakeMask(
36 font, defaultPaint, SkSurfaceProps(0, kUnknown_SkPixelGeometry),
37 SkScalerContextFlags::kNone, SkMatrix::I());
38
39 // Initially empty cache
40 REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
41
42 {
43 sk_sp<SkStrike> strike = strikeSpec.findOrCreateStrike(&cache);
44 }
45
46 // Stuff in cache.
47 REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() > 0);
48
49 cache.purgeAll();
50
51 // Purged cache.
52 REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
53
54 // Smallest cache.
55 cache.setCacheSizeLimit(0);
56 {
57 sk_sp<SkStrike> strike = strikeSpec.findOrCreateStrike(&cache);
58 REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
59 }
60 REPORTER_ASSERT(Reporter, cache.getTotalMemoryUsed() == 0);
61
62
63 }
64