|
1 |
|
2 /* |
|
3 * Copyright 2006 The Android Open Source Project |
|
4 * |
|
5 * Use of this source code is governed by a BSD-style license that can be |
|
6 * found in the LICENSE file. |
|
7 */ |
|
8 |
|
9 |
|
10 #ifndef SkGraphics_DEFINED |
|
11 #define SkGraphics_DEFINED |
|
12 |
|
13 #include "SkTypes.h" |
|
14 |
|
15 class SK_API SkGraphics { |
|
16 public: |
|
17 /** |
|
18 * Call this at process initialization time if your environment does not |
|
19 * permit static global initializers that execute code. Note that |
|
20 * Init() is not thread-safe. |
|
21 */ |
|
22 static void Init(); |
|
23 |
|
24 /** |
|
25 * Call this to release any memory held privately, such as the font cache. |
|
26 */ |
|
27 static void Term(); |
|
28 |
|
29 /** |
|
30 * Return the version numbers for the library. If the parameter is not |
|
31 * null, it is set to the version number. |
|
32 */ |
|
33 static void GetVersion(int32_t* major, int32_t* minor, int32_t* patch); |
|
34 |
|
35 /** |
|
36 * Return the max number of bytes that should be used by the font cache. |
|
37 * If the cache needs to allocate more, it will purge previous entries. |
|
38 * This max can be changed by calling SetFontCacheLimit(). |
|
39 */ |
|
40 static size_t GetFontCacheLimit(); |
|
41 |
|
42 /** |
|
43 * Specify the max number of bytes that should be used by the font cache. |
|
44 * If the cache needs to allocate more, it will purge previous entries. |
|
45 * |
|
46 * This function returns the previous setting, as if GetFontCacheLimit() |
|
47 * had be called before the new limit was set. |
|
48 */ |
|
49 static size_t SetFontCacheLimit(size_t bytes); |
|
50 |
|
51 /** |
|
52 * Return the number of bytes currently used by the font cache. |
|
53 */ |
|
54 static size_t GetFontCacheUsed(); |
|
55 |
|
56 /** |
|
57 * Return the number of entries in the font cache. |
|
58 * A cache "entry" is associated with each typeface + pointSize + matrix. |
|
59 */ |
|
60 static int GetFontCacheCountUsed(); |
|
61 |
|
62 /** |
|
63 * Return the current limit to the number of entries in the font cache. |
|
64 * A cache "entry" is associated with each typeface + pointSize + matrix. |
|
65 */ |
|
66 static int GetFontCacheCountLimit(); |
|
67 |
|
68 /** |
|
69 * Set the limit to the number of entries in the font cache, and return |
|
70 * the previous value. If this new value is lower than the previous, |
|
71 * it will automatically try to purge entries to meet the new limit. |
|
72 */ |
|
73 static int SetFontCacheCountLimit(int count); |
|
74 |
|
75 /** |
|
76 * For debugging purposes, this will attempt to purge the font cache. It |
|
77 * does not change the limit, but will cause subsequent font measures and |
|
78 * draws to be recreated, since they will no longer be in the cache. |
|
79 */ |
|
80 static void PurgeFontCache(); |
|
81 |
|
82 static size_t GetImageCacheBytesUsed(); |
|
83 static size_t GetImageCacheByteLimit(); |
|
84 static size_t SetImageCacheByteLimit(size_t newLimit); |
|
85 |
|
86 /** |
|
87 * Applications with command line options may pass optional state, such |
|
88 * as cache sizes, here, for instance: |
|
89 * font-cache-limit=12345678 |
|
90 * |
|
91 * The flags format is name=value[;name=value...] with no spaces. |
|
92 * This format is subject to change. |
|
93 */ |
|
94 static void SetFlags(const char* flags); |
|
95 |
|
96 /** |
|
97 * Return the max number of bytes that should be used by the thread-local |
|
98 * font cache. |
|
99 * If the cache needs to allocate more, it will purge previous entries. |
|
100 * This max can be changed by calling SetFontCacheLimit(). |
|
101 * |
|
102 * If this thread has never called SetTLSFontCacheLimit, or has called it |
|
103 * with 0, then this thread is using the shared font cache. In that case, |
|
104 * this function will always return 0, and the caller may want to call |
|
105 * GetFontCacheLimit. |
|
106 */ |
|
107 static size_t GetTLSFontCacheLimit(); |
|
108 |
|
109 /** |
|
110 * Specify the max number of bytes that should be used by the thread-local |
|
111 * font cache. If this value is 0, then this thread will use the shared |
|
112 * global font cache. |
|
113 */ |
|
114 static void SetTLSFontCacheLimit(size_t bytes); |
|
115 |
|
116 private: |
|
117 /** This is automatically called by SkGraphics::Init(), and must be |
|
118 implemented by the host OS. This allows the host OS to register a callback |
|
119 with the C++ runtime to call SkGraphics::FreeCaches() |
|
120 */ |
|
121 static void InstallNewHandler(); |
|
122 }; |
|
123 |
|
124 class SkAutoGraphics { |
|
125 public: |
|
126 SkAutoGraphics() { |
|
127 SkGraphics::Init(); |
|
128 } |
|
129 ~SkAutoGraphics() { |
|
130 SkGraphics::Term(); |
|
131 } |
|
132 }; |
|
133 |
|
134 #endif |