• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
Init()32 void SkGraphics::Init() {
33     // SkGraphics::Init() must be thread-safe and idempotent.
34     SkCpu::CacheRuntimeFeatures();
35     SkOpts::Init();
36 }
37 
38 ///////////////////////////////////////////////////////////////////////////////
39 
DumpMemoryStatistics(SkTraceMemoryDump * dump)40 void SkGraphics::DumpMemoryStatistics(SkTraceMemoryDump* dump) {
41   SkResourceCache::DumpMemoryStatistics(dump);
42   SkStrikeCache::DumpMemoryStatistics(dump);
43 }
44 
PurgeAllCaches()45 void SkGraphics::PurgeAllCaches() {
46     SkGraphics::PurgeFontCache();
47     SkGraphics::PurgeResourceCache();
48     SkImageFilter_Base::PurgeCache();
49 }
50 
51 ///////////////////////////////////////////////////////////////////////////////
52 
53 static const char kFontCacheLimitStr[] = "font-cache-limit";
54 static const size_t kFontCacheLimitLen = sizeof(kFontCacheLimitStr) - 1;
55 
56 static 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; */
SetFlags(const char * flags)65 void 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 
GetFontCacheLimit()99 size_t SkGraphics::GetFontCacheLimit() {
100     return SkStrikeCache::GlobalStrikeCache()->getCacheSizeLimit();
101 }
102 
SetFontCacheLimit(size_t bytes)103 size_t SkGraphics::SetFontCacheLimit(size_t bytes) {
104     return SkStrikeCache::GlobalStrikeCache()->setCacheSizeLimit(bytes);
105 }
106 
GetFontCacheUsed()107 size_t SkGraphics::GetFontCacheUsed() {
108     return SkStrikeCache::GlobalStrikeCache()->getTotalMemoryUsed();
109 }
110 
GetFontCacheCountLimit()111 int SkGraphics::GetFontCacheCountLimit() {
112     return SkStrikeCache::GlobalStrikeCache()->getCacheCountLimit();
113 }
114 
SetFontCacheCountLimit(int count)115 int SkGraphics::SetFontCacheCountLimit(int count) {
116     return SkStrikeCache::GlobalStrikeCache()->setCacheCountLimit(count);
117 }
118 
GetFontCacheCountUsed()119 int SkGraphics::GetFontCacheCountUsed() {
120     return SkStrikeCache::GlobalStrikeCache()->getCacheCountUsed();
121 }
122 
PurgeFontCache()123 void SkGraphics::PurgeFontCache() {
124     SkStrikeCache::GlobalStrikeCache()->purgeAll();
125     SkTypefaceCache::PurgeAll();
126 }
127 
128 extern bool gSkVMAllowJIT;
129 
AllowJIT()130 void SkGraphics::AllowJIT() {
131     gSkVMAllowJIT = true;
132 }
133