xref: /third_party/skia/src/core/SkGraphics.cpp (revision cb93a386)
1/*
2 * Copyright 2006 The Android Open Source Project
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/SkGraphics.h"
9
10#include "include/core/SkCanvas.h"
11#include "include/core/SkMath.h"
12#include "include/core/SkMatrix.h"
13#include "include/core/SkPath.h"
14#include "include/core/SkPathEffect.h"
15#include "include/core/SkRefCnt.h"
16#include "include/core/SkShader.h"
17#include "include/core/SkStream.h"
18#include "include/core/SkTime.h"
19#include "src/core/SkBlitter.h"
20#include "src/core/SkCpu.h"
21#include "src/core/SkGeometry.h"
22#include "src/core/SkImageFilter_Base.h"
23#include "src/core/SkOpts.h"
24#include "src/core/SkResourceCache.h"
25#include "src/core/SkScalerContext.h"
26#include "src/core/SkStrikeCache.h"
27#include "src/core/SkTSearch.h"
28#include "src/core/SkTypefaceCache.h"
29
30#include <stdlib.h>
31
32void SkGraphics::Init() {
33    // SkGraphics::Init() must be thread-safe and idempotent.
34    SkCpu::CacheRuntimeFeatures();
35    SkOpts::Init();
36}
37
38///////////////////////////////////////////////////////////////////////////////
39
40void SkGraphics::DumpMemoryStatistics(SkTraceMemoryDump* dump) {
41  SkResourceCache::DumpMemoryStatistics(dump);
42  SkStrikeCache::DumpMemoryStatistics(dump);
43}
44
45void SkGraphics::PurgeAllCaches() {
46    SkGraphics::PurgeFontCache();
47    SkGraphics::PurgeResourceCache();
48    SkImageFilter_Base::PurgeCache();
49}
50
51///////////////////////////////////////////////////////////////////////////////
52
53static const char kFontCacheLimitStr[] = "font-cache-limit";
54static const size_t kFontCacheLimitLen = sizeof(kFontCacheLimitStr) - 1;
55
56static const struct {
57    const char* fStr;
58    size_t fLen;
59    size_t (*fFunc)(size_t);
60} gFlags[] = {
61    { kFontCacheLimitStr, kFontCacheLimitLen, SkGraphics::SetFontCacheLimit }
62};
63
64/* flags are of the form param; or param=value; */
65void SkGraphics::SetFlags(const char* flags) {
66    if (!flags) {
67        return;
68    }
69    const char* nextSemi;
70    do {
71        size_t len = strlen(flags);
72        const char* paramEnd = flags + len;
73        const char* nextEqual = strchr(flags, '=');
74        if (nextEqual && paramEnd > nextEqual) {
75            paramEnd = nextEqual;
76        }
77        nextSemi = strchr(flags, ';');
78        if (nextSemi && paramEnd > nextSemi) {
79            paramEnd = nextSemi;
80        }
81        size_t paramLen = paramEnd - flags;
82        for (int i = 0; i < (int)SK_ARRAY_COUNT(gFlags); ++i) {
83            if (paramLen != gFlags[i].fLen) {
84                continue;
85            }
86            if (strncmp(flags, gFlags[i].fStr, paramLen) == 0) {
87                size_t val = 0;
88                if (nextEqual) {
89                    val = (size_t) atoi(nextEqual + 1);
90                }
91                (gFlags[i].fFunc)(val);
92                break;
93            }
94        }
95        flags = nextSemi + 1;
96    } while (nextSemi);
97}
98
99size_t SkGraphics::GetFontCacheLimit() {
100    return SkStrikeCache::GlobalStrikeCache()->getCacheSizeLimit();
101}
102
103size_t SkGraphics::SetFontCacheLimit(size_t bytes) {
104    return SkStrikeCache::GlobalStrikeCache()->setCacheSizeLimit(bytes);
105}
106
107size_t SkGraphics::GetFontCacheUsed() {
108    return SkStrikeCache::GlobalStrikeCache()->getTotalMemoryUsed();
109}
110
111int SkGraphics::GetFontCacheCountLimit() {
112    return SkStrikeCache::GlobalStrikeCache()->getCacheCountLimit();
113}
114
115int SkGraphics::SetFontCacheCountLimit(int count) {
116    return SkStrikeCache::GlobalStrikeCache()->setCacheCountLimit(count);
117}
118
119int SkGraphics::GetFontCacheCountUsed() {
120    return SkStrikeCache::GlobalStrikeCache()->getCacheCountUsed();
121}
122
123void SkGraphics::PurgeFontCache() {
124    SkStrikeCache::GlobalStrikeCache()->purgeAll();
125    SkTypefaceCache::PurgeAll();
126}
127
128extern bool gSkVMAllowJIT;
129
130void SkGraphics::AllowJIT() {
131    gSkVMAllowJIT = true;
132}
133