| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #ifndef SkGlyphCache_DEFINED | 10 #ifndef SkGlyphCache_DEFINED |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 ~SkGlyphCache(); | 190 ~SkGlyphCache(); |
| 191 | 191 |
| 192 enum MetricsType { | 192 enum MetricsType { |
| 193 kJustAdvance_MetricsType, | 193 kJustAdvance_MetricsType, |
| 194 kFull_MetricsType | 194 kFull_MetricsType |
| 195 }; | 195 }; |
| 196 | 196 |
| 197 SkGlyph* lookupMetrics(uint32_t id, MetricsType); | 197 SkGlyph* lookupMetrics(uint32_t id, MetricsType); |
| 198 static bool DetachProc(const SkGlyphCache*, void*) { return true; } | 198 static bool DetachProc(const SkGlyphCache*, void*) { return true; } |
| 199 | 199 |
| 200 void detach(SkGlyphCache** head) { | |
| 201 if (fPrev) { | |
| 202 fPrev->fNext = fNext; | |
| 203 } else { | |
| 204 *head = fNext; | |
| 205 } | |
| 206 if (fNext) { | |
| 207 fNext->fPrev = fPrev; | |
| 208 } | |
| 209 fPrev = fNext = NULL; | |
| 210 } | |
| 211 | |
| 212 void attachToHead(SkGlyphCache** head) { | |
| 213 SkASSERT(NULL == fPrev && NULL == fNext); | |
| 214 if (*head) { | |
| 215 (*head)->fPrev = this; | |
| 216 fNext = *head; | |
| 217 } | |
| 218 *head = this; | |
| 219 } | |
| 220 | |
| 221 SkGlyphCache* fNext, *fPrev; | 200 SkGlyphCache* fNext, *fPrev; |
| 222 SkDescriptor* fDesc; | 201 SkDescriptor* fDesc; |
| 223 SkScalerContext* fScalerContext; | 202 SkScalerContext* fScalerContext; |
| 224 SkPaint::FontMetrics fFontMetrics; | 203 SkPaint::FontMetrics fFontMetrics; |
| 225 | 204 |
| 226 enum { | 205 enum { |
| 227 kHashBits = 8, | 206 kHashBits = 8, |
| 228 kHashCount = 1 << kHashBits, | 207 kHashCount = 1 << kHashBits, |
| 229 kHashMask = kHashCount - 1 | 208 kHashMask = kHashCount - 1 |
| 230 }; | 209 }; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 251 size_t fMemoryUsed; | 230 size_t fMemoryUsed; |
| 252 | 231 |
| 253 struct AuxProcRec { | 232 struct AuxProcRec { |
| 254 AuxProcRec* fNext; | 233 AuxProcRec* fNext; |
| 255 void (*fProc)(void*); | 234 void (*fProc)(void*); |
| 256 void* fData; | 235 void* fData; |
| 257 }; | 236 }; |
| 258 AuxProcRec* fAuxProcList; | 237 AuxProcRec* fAuxProcList; |
| 259 void invokeAndRemoveAuxProcs(); | 238 void invokeAndRemoveAuxProcs(); |
| 260 | 239 |
| 261 // This relies on the caller to have already acquired the mutex to access th
e global cache | |
| 262 static size_t InternalFreeCache(SkGlyphCache_Globals*, size_t bytesNeeded); | |
| 263 | |
| 264 inline static SkGlyphCache* FindTail(SkGlyphCache* head); | 240 inline static SkGlyphCache* FindTail(SkGlyphCache* head); |
| 265 | 241 |
| 266 friend class SkGlyphCache_Globals; | 242 friend class SkGlyphCache_Globals; |
| 267 }; | 243 }; |
| 268 | 244 |
| 269 class SkAutoGlyphCache { | 245 class SkAutoGlyphCache { |
| 270 public: | 246 public: |
| 271 SkAutoGlyphCache(SkGlyphCache* cache) : fCache(cache) {} | 247 SkAutoGlyphCache(SkGlyphCache* cache) : fCache(cache) {} |
| 272 SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) { | 248 SkAutoGlyphCache(SkTypeface* typeface, const SkDescriptor* desc) { |
| 273 fCache = SkGlyphCache::DetachCache(typeface, desc); | 249 fCache = SkGlyphCache::DetachCache(typeface, desc); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 292 } | 268 } |
| 293 } | 269 } |
| 294 | 270 |
| 295 private: | 271 private: |
| 296 SkGlyphCache* fCache; | 272 SkGlyphCache* fCache; |
| 297 | 273 |
| 298 static bool DetachProc(const SkGlyphCache*, void*); | 274 static bool DetachProc(const SkGlyphCache*, void*); |
| 299 }; | 275 }; |
| 300 | 276 |
| 301 #endif | 277 #endif |
| OLD | NEW |