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()32void SkGraphics::Init() { 33 // SkGraphics::Init() must be thread-safe and idempotent. 34 SkCpu::CacheRuntimeFeatures(); 35 SkOpts::Init(); 36 } 37 38 /////////////////////////////////////////////////////////////////////////////// 39 DumpMemoryStatistics(SkTraceMemoryDump * dump)40void SkGraphics::DumpMemoryStatistics(SkTraceMemoryDump* dump) { 41 SkResourceCache::DumpMemoryStatistics(dump); 42 SkStrikeCache::DumpMemoryStatistics(dump); 43 } 44 PurgeAllCaches()45void 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)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 GetFontCacheLimit()99size_t SkGraphics::GetFontCacheLimit() { 100 return SkStrikeCache::GlobalStrikeCache()->getCacheSizeLimit(); 101 } 102 SetFontCacheLimit(size_t bytes)103size_t SkGraphics::SetFontCacheLimit(size_t bytes) { 104 return SkStrikeCache::GlobalStrikeCache()->setCacheSizeLimit(bytes); 105 } 106 GetFontCacheUsed()107size_t SkGraphics::GetFontCacheUsed() { 108 return SkStrikeCache::GlobalStrikeCache()->getTotalMemoryUsed(); 109 } 110 GetFontCacheCountLimit()111int SkGraphics::GetFontCacheCountLimit() { 112 return SkStrikeCache::GlobalStrikeCache()->getCacheCountLimit(); 113 } 114 SetFontCacheCountLimit(int count)115int SkGraphics::SetFontCacheCountLimit(int count) { 116 return SkStrikeCache::GlobalStrikeCache()->setCacheCountLimit(count); 117 } 118 GetFontCacheCountUsed()119int SkGraphics::GetFontCacheCountUsed() { 120 return SkStrikeCache::GlobalStrikeCache()->getCacheCountUsed(); 121 } 122 PurgeFontCache()123void SkGraphics::PurgeFontCache() { 124 SkStrikeCache::GlobalStrikeCache()->purgeAll(); 125 SkTypefaceCache::PurgeAll(); 126 } 127 128 extern bool gSkVMAllowJIT; 129 AllowJIT()130void SkGraphics::AllowJIT() { 131 gSkVMAllowJIT = true; 132 } 133