Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1286)

Side by Side Diff: src/core/SkScaledImageCache.cpp

Issue 54203006: Break up SkLazyPixelRef functionally into class hierarchy. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: lint nits Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkScaledImageCache.h" 8 #include "SkScaledImageCache.h"
9 #include "SkMipMap.h" 9 #include "SkMipMap.h"
10 #include "SkOnce.h" 10 #include "SkOnce.h"
11 #include "SkPixelRef.h" 11 #include "SkPixelRef.h"
12 #include "SkRect.h" 12 #include "SkRect.h"
13 13
14 #ifndef SK_DEFAULT_IMAGE_CACHE_LIMIT 14 #ifndef SK_DEFAULT_IMAGE_CACHE_LIMIT
15 #define SK_DEFAULT_IMAGE_CACHE_LIMIT (2 * 1024 * 1024) 15 #define SK_DEFAULT_IMAGE_CACHE_LIMIT (2 * 1024 * 1024)
16 #endif 16 #endif
17 17
18 static inline SkScaledImageCache::ID* rec_to_id(SkScaledImageCache::Rec* rec) { 18 static inline SkScaledImageCache::ID* rec_to_id(SkScaledImageCache::Rec* rec) {
19 return reinterpret_cast<SkScaledImageCache::ID*>(rec); 19 return reinterpret_cast<SkScaledImageCache::ID*>(rec);
20 } 20 }
21 21
22 static inline SkScaledImageCache::Rec* id_to_rec(SkScaledImageCache::ID* id) { 22 static inline SkScaledImageCache::Rec* id_to_rec(SkScaledImageCache::ID* id) {
23 return reinterpret_cast<SkScaledImageCache::Rec*>(id); 23 return reinterpret_cast<SkScaledImageCache::Rec*>(id);
24 } 24 }
25 25
26 // Implemented from en.wikipedia.org/wiki/MurmurHash. 26 // Implemented from en.wikipedia.org/wiki/MurmurHash.
27 static uint32_t compute_hash(const uint32_t data[], int count) { 27 static uint32_t compute_hash(const uint32_t data[], int count) {
28 uint32_t hash = 0; 28 uint32_t hash = 0;
29 29
30 for (int i = 0; i < count; ++i) { 30 for (int i = 0; i < count; ++i) {
31 uint32_t k = data[i]; 31 uint32_t k = data[i];
32 k *= 0xcc9e2d51; 32 k *= 0xcc9e2d51;
33 k = (k << 15) | (k >> 17); 33 k = (k << 15) | (k >> 17);
34 k *= 0x1b873593; 34 k *= 0x1b873593;
35 35
36 hash ^= k; 36 hash ^= k;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 121
122 int32_t fLockCount; 122 int32_t fLockCount;
123 123
124 // we use either fBitmap or fMip, but not both 124 // we use either fBitmap or fMip, but not both
125 SkBitmap fBitmap; 125 SkBitmap fBitmap;
126 const SkMipMap* fMip; 126 const SkMipMap* fMip;
127 }; 127 };
128 128
129 #include "SkTDynamicHash.h" 129 #include "SkTDynamicHash.h"
130 130
131 namespace { // can't use static functions w/ template parameters 131 namespace { // can't use static functions w/ template parameters
132 const Key& key_from_rec(const SkScaledImageCache::Rec& rec) { 132 const Key& key_from_rec(const SkScaledImageCache::Rec& rec) {
133 return rec.fKey; 133 return rec.fKey;
134 } 134 }
135 135
136 uint32_t hash_from_key(const Key& key) { 136 uint32_t hash_from_key(const Key& key) {
137 return key.fHash; 137 return key.fHash;
138 } 138 }
139 139
140 bool eq_rec_key(const SkScaledImageCache::Rec& rec, const Key& key) { 140 bool eq_rec_key(const SkScaledImageCache::Rec& rec, const Key& key) {
141 return rec.fKey == key; 141 return rec.fKey == key;
142 } 142 }
143 } 143 } // namespace
144 144
145 class SkScaledImageCache::Hash : public SkTDynamicHash<SkScaledImageCache::Rec, 145 class SkScaledImageCache::Hash : public SkTDynamicHash<SkScaledImageCache::Rec,
146 Key, key_from_rec, hash_from_key, 146 Key, key_from_rec, hash_from_key,
147 eq_rec_key> {}; 147 eq_rec_key> {};
148 148
149 /////////////////////////////////////////////////////////////////////////////// 149 ///////////////////////////////////////////////////////////////////////////////
150 150
151 // experimental hash to speed things up 151 // experimental hash to speed things up
152 #define USE_HASH 152 #define USE_HASH
153 153
154 #if !defined(USE_HASH) 154 #if !defined(USE_HASH)
155 static inline SkScaledImageCache::Rec* find_rec_in_list( 155 static inline SkScaledImageCache::Rec* find_rec_in_list(
156 SkScaledImageCache::Rec* head, const Key & key) { 156 SkScaledImageCache::Rec* head, const Key & key) {
157 SkScaledImageCache::Rec* rec = head; 157 SkScaledImageCache::Rec* rec = head;
158 while ((rec != NULL) && (rec->fKey != key)) { 158 while ((rec != NULL) && (rec->fKey != key)) {
159 rec = rec->fNext; 159 rec = rec->fNext;
160 } 160 }
161 return rec; 161 return rec;
162 } 162 }
163 #endif 163 #endif
164 164
165 SkScaledImageCache::SkScaledImageCache(size_t byteLimit) { 165 SkScaledImageCache::SkScaledImageCache(size_t byteLimit, SkBaseMutex* mutex)
166 : fMutex(mutex) {
166 fHead = NULL; 167 fHead = NULL;
167 fTail = NULL; 168 fTail = NULL;
168 #ifdef USE_HASH 169 #ifdef USE_HASH
169 fHash = new Hash; 170 fHash = new Hash;
170 #else 171 #else
171 fHash = NULL; 172 fHash = NULL;
172 #endif 173 #endif
173 fBytesUsed = 0; 174 fBytesUsed = 0;
174 fByteLimit = byteLimit; 175 fByteLimit = byteLimit;
175 fCount = 0; 176 fCount = 0;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 SkTDivMod(bm.pixelRefOffset(), bm.rowBytes(), &y, &x); 224 SkTDivMod(bm.pixelRefOffset(), bm.rowBytes(), &y, &x);
224 x >>= bm.shiftPerPixel(); 225 x >>= bm.shiftPerPixel();
225 return SkIRect::MakeXYWH(x, y, bm.width(), bm.height()); 226 return SkIRect::MakeXYWH(x, y, bm.width(), bm.height());
226 } 227 }
227 228
228 229
229 SkScaledImageCache::ID* SkScaledImageCache::findAndLock(uint32_t genID, 230 SkScaledImageCache::ID* SkScaledImageCache::findAndLock(uint32_t genID,
230 int32_t width, 231 int32_t width,
231 int32_t height, 232 int32_t height,
232 SkBitmap* bitmap) { 233 SkBitmap* bitmap) {
234 SkAutoMutexAcquire am(fMutex);
233 Rec* rec = this->findAndLock(genID, SK_Scalar1, SK_Scalar1, 235 Rec* rec = this->findAndLock(genID, SK_Scalar1, SK_Scalar1,
234 SkIRect::MakeWH(width, height)); 236 SkIRect::MakeWH(width, height));
235 if (rec) { 237 if (rec) {
236 SkASSERT(NULL == rec->fMip); 238 SkASSERT(NULL == rec->fMip);
237 SkASSERT(rec->fBitmap.pixelRef()); 239 SkASSERT(rec->fBitmap.pixelRef());
238 *bitmap = rec->fBitmap; 240 *bitmap = rec->fBitmap;
239 } 241 }
240 return rec_to_id(rec); 242 return rec_to_id(rec);
241 } 243 }
242 244
243 SkScaledImageCache::ID* SkScaledImageCache::findAndLock(const SkBitmap& orig, 245 SkScaledImageCache::ID* SkScaledImageCache::findAndLock(const SkBitmap& orig,
244 SkScalar scaleX, 246 SkScalar scaleX,
245 SkScalar scaleY, 247 SkScalar scaleY,
246 SkBitmap* scaled) { 248 SkBitmap* scaled) {
249 SkAutoMutexAcquire am(fMutex);
247 if (0 == scaleX || 0 == scaleY) { 250 if (0 == scaleX || 0 == scaleY) {
248 // degenerate, and the key we use for mipmaps 251 // degenerate, and the key we use for mipmaps
249 return NULL; 252 return NULL;
250 } 253 }
251 Rec* rec = this->findAndLock(orig.getGenerationID(), scaleX, 254 Rec* rec = this->findAndLock(orig.getGenerationID(), scaleX,
252 scaleY, get_bounds_from_bitmap(orig)); 255 scaleY, get_bounds_from_bitmap(orig));
253 if (rec) { 256 if (rec) {
254 SkASSERT(NULL == rec->fMip); 257 SkASSERT(NULL == rec->fMip);
255 SkASSERT(rec->fBitmap.pixelRef()); 258 SkASSERT(rec->fBitmap.pixelRef());
256 *scaled = rec->fBitmap; 259 *scaled = rec->fBitmap;
257 } 260 }
258 return rec_to_id(rec); 261 return rec_to_id(rec);
259 } 262 }
260 263
261 SkScaledImageCache::ID* SkScaledImageCache::findAndLockMip(const SkBitmap& orig, 264 SkScaledImageCache::ID* SkScaledImageCache::findAndLockMip(const SkBitmap& orig,
262 SkMipMap const ** mip ) { 265 SkMipMap const ** mip ) {
266 SkAutoMutexAcquire am(fMutex);
263 Rec* rec = this->findAndLock(orig.getGenerationID(), 0, 0, 267 Rec* rec = this->findAndLock(orig.getGenerationID(), 0, 0,
264 get_bounds_from_bitmap(orig)); 268 get_bounds_from_bitmap(orig));
265 if (rec) { 269 if (rec) {
266 SkASSERT(rec->fMip); 270 SkASSERT(rec->fMip);
267 SkASSERT(NULL == rec->fBitmap.pixelRef()); 271 SkASSERT(NULL == rec->fBitmap.pixelRef());
268 *mip = rec->fMip; 272 *mip = rec->fMip;
269 } 273 }
270 return rec_to_id(rec); 274 return rec_to_id(rec);
271 } 275 }
272 276
(...skipping 11 matching lines...) Expand all
284 fHash->add(rec); 288 fHash->add(rec);
285 #endif 289 #endif
286 // We may (now) be overbudget, so see if we need to purge something. 290 // We may (now) be overbudget, so see if we need to purge something.
287 this->purgeAsNeeded(); 291 this->purgeAsNeeded();
288 } 292 }
289 293
290 SkScaledImageCache::ID* SkScaledImageCache::addAndLock(uint32_t genID, 294 SkScaledImageCache::ID* SkScaledImageCache::addAndLock(uint32_t genID,
291 int32_t width, 295 int32_t width,
292 int32_t height, 296 int32_t height,
293 const SkBitmap& bitmap) { 297 const SkBitmap& bitmap) {
298 SkAutoMutexAcquire am(fMutex);
294 Key key(genID, SK_Scalar1, SK_Scalar1, SkIRect::MakeWH(width, height)); 299 Key key(genID, SK_Scalar1, SK_Scalar1, SkIRect::MakeWH(width, height));
295 Rec* rec = SkNEW_ARGS(Rec, (key, bitmap)); 300 Rec* rec = SkNEW_ARGS(Rec, (key, bitmap));
296 this->addAndLock(rec); 301 this->addAndLock(rec);
297 return rec_to_id(rec); 302 return rec_to_id(rec);
298 } 303 }
299 304
300 SkScaledImageCache::ID* SkScaledImageCache::addAndLock(const SkBitmap& orig, 305 SkScaledImageCache::ID* SkScaledImageCache::addAndLock(const SkBitmap& orig,
301 SkScalar scaleX, 306 SkScalar scaleX,
302 SkScalar scaleY, 307 SkScalar scaleY,
303 const SkBitmap& scaled) { 308 const SkBitmap& scaled) {
309 SkAutoMutexAcquire am(fMutex);
304 if (0 == scaleX || 0 == scaleY) { 310 if (0 == scaleX || 0 == scaleY) {
305 // degenerate, and the key we use for mipmaps 311 // degenerate, and the key we use for mipmaps
306 return NULL; 312 return NULL;
307 } 313 }
308 SkIRect bounds = get_bounds_from_bitmap(orig); 314 SkIRect bounds = get_bounds_from_bitmap(orig);
309 if (bounds.isEmpty()) { 315 if (bounds.isEmpty()) {
310 return NULL; 316 return NULL;
311 } 317 }
312 Key key(orig.getGenerationID(), scaleX, scaleY, bounds); 318 Key key(orig.getGenerationID(), scaleX, scaleY, bounds);
313 Rec* rec = SkNEW_ARGS(Rec, (key, scaled)); 319 Rec* rec = SkNEW_ARGS(Rec, (key, scaled));
314 this->addAndLock(rec); 320 this->addAndLock(rec);
315 return rec_to_id(rec); 321 return rec_to_id(rec);
316 } 322 }
317 323
318 SkScaledImageCache::ID* SkScaledImageCache::addAndLockMip(const SkBitmap& orig, 324 SkScaledImageCache::ID* SkScaledImageCache::addAndLockMip(const SkBitmap& orig,
319 const SkMipMap* mip) { 325 const SkMipMap* mip) {
326 SkAutoMutexAcquire am(fMutex);
320 SkIRect bounds = get_bounds_from_bitmap(orig); 327 SkIRect bounds = get_bounds_from_bitmap(orig);
321 if (bounds.isEmpty()) { 328 if (bounds.isEmpty()) {
322 return NULL; 329 return NULL;
323 } 330 }
324 Key key(orig.getGenerationID(), 0, 0, bounds); 331 Key key(orig.getGenerationID(), 0, 0, bounds);
325 Rec* rec = SkNEW_ARGS(Rec, (key, mip)); 332 Rec* rec = SkNEW_ARGS(Rec, (key, mip));
326 this->addAndLock(rec); 333 this->addAndLock(rec);
327 return rec_to_id(rec); 334 return rec_to_id(rec);
328 } 335 }
329 336
330 void SkScaledImageCache::unlock(SkScaledImageCache::ID* id) { 337 void SkScaledImageCache::unlock(SkScaledImageCache::ID* id) {
338 SkAutoMutexAcquire am(fMutex);
331 SkASSERT(id); 339 SkASSERT(id);
332 340
333 #ifdef SK_DEBUG 341 #ifdef SK_DEBUG
334 { 342 {
335 bool found = false; 343 bool found = false;
336 Rec* rec = fHead; 344 Rec* rec = fHead;
337 while (rec != NULL) { 345 while (rec != NULL) {
338 if (rec == id_to_rec(id)) { 346 if (rec == id_to_rec(id)) {
339 found = true; 347 found = true;
340 break; 348 break;
341 } 349 }
342 rec = rec->fNext; 350 rec = rec->fNext;
343 } 351 }
344 SkASSERT(found); 352 SkASSERT(found);
345 } 353 }
346 #endif 354 #endif
347 Rec* rec = id_to_rec(id); 355 Rec* rec = id_to_rec(id);
348 SkASSERT(rec->fLockCount > 0); 356 SkASSERT(rec->fLockCount > 0);
349 rec->fLockCount -= 1; 357 rec->fLockCount -= 1;
350 358
351 // we may have been over-budget, but now have released something, so check 359 // we may have been over-budget, but now have released something, so check
352 // if we should purge. 360 // if we should purge.
353 if (0 == rec->fLockCount) { 361 if (0 == rec->fLockCount) {
354 this->purgeAsNeeded(); 362 this->purgeAsNeeded();
355 } 363 }
356 } 364 }
357 365
358 void SkScaledImageCache::purgeAsNeeded() { 366 void SkScaledImageCache::purgeAsNeeded() {
359 size_t byteLimit = fByteLimit; 367 const size_t & byteLimit = fByteLimit;
360 size_t bytesUsed = fBytesUsed; 368 size_t bytesUsed = fBytesUsed;
361 369
362 Rec* rec = fTail; 370 Rec* rec = fTail;
363 while (rec) { 371 while (rec) {
364 if (bytesUsed < byteLimit) { 372 if (bytesUsed < byteLimit) {
365 break; 373 break;
366 } 374 }
367 Rec* prev = rec->fPrev; 375 Rec* prev = rec->fPrev;
368 if (0 == rec->fLockCount) { 376 if (0 == rec->fLockCount) {
369 size_t used = rec->bytesUsed(); 377 size_t used = rec->bytesUsed();
370 SkASSERT(used <= bytesUsed); 378 SkASSERT(used <= bytesUsed);
371 bytesUsed -= used; 379 bytesUsed -= used;
372 this->detach(rec); 380 this->detach(rec);
373 #ifdef USE_HASH 381 #ifdef USE_HASH
374 fHash->remove(rec->fKey); 382 fHash->remove(rec->fKey);
375 #endif 383 #endif
376 384
377 SkDELETE(rec); 385 SkDELETE(rec);
378 fCount -= 1; 386 fCount -= 1;
379 } 387 }
380 rec = prev; 388 rec = prev;
381 } 389 }
382 fBytesUsed = bytesUsed; 390 fBytesUsed = bytesUsed;
383 } 391 }
384 392
385 size_t SkScaledImageCache::setByteLimit(size_t newLimit) { 393 size_t SkScaledImageCache::setByteLimit(size_t newLimit) {
394 SkAutoMutexAcquire am(fMutex);
386 size_t prevLimit = fByteLimit; 395 size_t prevLimit = fByteLimit;
387 fByteLimit = newLimit; 396 fByteLimit = newLimit;
388 if (newLimit < prevLimit) { 397 if (newLimit < prevLimit) {
389 this->purgeAsNeeded(); 398 this->purgeAsNeeded();
390 } 399 }
391 return prevLimit; 400 return prevLimit;
392 } 401 }
393 402
403 size_t SkScaledImageCache::getBytesUsed() const {
404 SkAutoMutexAcquire am(fMutex);
405 return fBytesUsed;
406 }
407
408 size_t SkScaledImageCache::getByteLimit() const {
409 SkAutoMutexAcquire am(fMutex);
410 return fByteLimit;
411 }
412
394 /////////////////////////////////////////////////////////////////////////////// 413 ///////////////////////////////////////////////////////////////////////////////
395 414
396 void SkScaledImageCache::detach(Rec* rec) { 415 void SkScaledImageCache::detach(Rec* rec) {
397 Rec* prev = rec->fPrev; 416 Rec* prev = rec->fPrev;
398 Rec* next = rec->fNext; 417 Rec* next = rec->fNext;
399 418
400 if (!prev) { 419 if (!prev) {
401 SkASSERT(fHead == rec); 420 SkASSERT(fHead == rec);
402 fHead = next; 421 fHead = next;
403 } else { 422 } else {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 size_t used = 0; 492 size_t used = 0;
474 int count = 0; 493 int count = 0;
475 const Rec* rec = fHead; 494 const Rec* rec = fHead;
476 while (rec) { 495 while (rec) {
477 count += 1; 496 count += 1;
478 used += rec->bytesUsed(); 497 used += rec->bytesUsed();
479 SkASSERT(used <= fBytesUsed); 498 SkASSERT(used <= fBytesUsed);
480 rec = rec->fNext; 499 rec = rec->fNext;
481 } 500 }
482 SkASSERT(fCount == count); 501 SkASSERT(fCount == count);
502 SkASSERT(fBytesUsed == used);
483 503
484 rec = fTail; 504 rec = fTail;
485 while (rec) { 505 while (rec) {
486 SkASSERT(count > 0); 506 SkASSERT(count > 0);
487 count -= 1; 507 count -= 1;
488 SkASSERT(used >= rec->bytesUsed()); 508 SkASSERT(used >= rec->bytesUsed());
489 used -= rec->bytesUsed(); 509 used -= rec->bytesUsed();
490 rec = rec->fPrev; 510 rec = rec->fPrev;
491 } 511 }
492 512
493 SkASSERT(0 == count); 513 SkASSERT(0 == count);
494 SkASSERT(0 == used); 514 SkASSERT(0 == used);
495 } 515 }
496 #endif 516 #endif
497 517
498 /////////////////////////////////////////////////////////////////////////////// 518 ///////////////////////////////////////////////////////////////////////////////
499 519
500 #include "SkThread.h" 520 #include "SkThread.h"
501 521
502 SK_DECLARE_STATIC_MUTEX(gMutex);
503
504 static void create_cache(SkScaledImageCache** cache) { 522 static void create_cache(SkScaledImageCache** cache) {
505 *cache = SkNEW_ARGS(SkScaledImageCache, (SK_DEFAULT_IMAGE_CACHE_LIMIT)); 523 SK_DECLARE_STATIC_MUTEX(mutex);
524 *cache = SkNEW_ARGS(SkScaledImageCache,
525 (SK_DEFAULT_IMAGE_CACHE_LIMIT, &mutex));
506 } 526 }
507 527
508 static SkScaledImageCache* get_cache() { 528 SkScaledImageCache* SkScaledImageCache::GetGlobalInstance() {
509 static SkScaledImageCache* gCache(NULL); 529 static SkScaledImageCache* gCache(NULL);
510 SK_DECLARE_STATIC_ONCE(create_cache_once); 530 SK_DECLARE_STATIC_ONCE(create_cache_once);
511 SkOnce<SkScaledImageCache**>(&create_cache_once, create_cache, &gCache); 531 SkOnce<SkScaledImageCache**>(&create_cache_once, create_cache, &gCache);
512 SkASSERT(NULL != gCache); 532 SkASSERT(NULL != gCache);
513 return gCache; 533 return gCache;
514 } 534 }
515 535
516 536
517 SkScaledImageCache::ID* SkScaledImageCache::FindAndLock( 537 SkScaledImageCache::ID* SkScaledImageCache::FindAndLock(
518 uint32_t pixelGenerationID, 538 uint32_t pixelGenerationID,
519 int32_t width, 539 int32_t width,
520 int32_t height, 540 int32_t height,
521 SkBitmap* scaled) { 541 SkBitmap* scaled) {
522 SkAutoMutexAcquire am(gMutex); 542 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
523 return get_cache()->findAndLock(pixelGenerationID, width, height, scaled); 543 return cache->findAndLock(pixelGenerationID, width, height, scaled);
524 } 544 }
525 545
526 SkScaledImageCache::ID* SkScaledImageCache::AddAndLock( 546 SkScaledImageCache::ID* SkScaledImageCache::AddAndLock(
527 uint32_t pixelGenerationID, 547 uint32_t pixelGenerationID,
528 int32_t width, 548 int32_t width,
529 int32_t height, 549 int32_t height,
530 const SkBitmap& scaled) { 550 const SkBitmap& scaled) {
531 SkAutoMutexAcquire am(gMutex); 551 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
532 return get_cache()->addAndLock(pixelGenerationID, width, height, scaled); 552 return cache->addAndLock(pixelGenerationID, width, height, scaled);
533 } 553 }
534 554
535 555
536 SkScaledImageCache::ID* SkScaledImageCache::FindAndLock(const SkBitmap& orig, 556 SkScaledImageCache::ID* SkScaledImageCache::FindAndLock(const SkBitmap& orig,
537 SkScalar scaleX, 557 SkScalar scaleX,
538 SkScalar scaleY, 558 SkScalar scaleY,
539 SkBitmap* scaled) { 559 SkBitmap* scaled) {
540 SkAutoMutexAcquire am(gMutex); 560 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
541 return get_cache()->findAndLock(orig, scaleX, scaleY, scaled); 561 return cache->findAndLock(orig, scaleX, scaleY, scaled);
542 } 562 }
543 563
544 SkScaledImageCache::ID* SkScaledImageCache::FindAndLockMip(const SkBitmap& orig, 564 SkScaledImageCache::ID* SkScaledImageCache::FindAndLockMip(const SkBitmap& orig,
545 SkMipMap const ** mip) { 565 SkMipMap const ** mip) {
546 SkAutoMutexAcquire am(gMutex); 566 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
547 return get_cache()->findAndLockMip(orig, mip); 567 return cache->findAndLockMip(orig, mip);
548 } 568 }
549 569
550 SkScaledImageCache::ID* SkScaledImageCache::AddAndLock(const SkBitmap& orig, 570 SkScaledImageCache::ID* SkScaledImageCache::AddAndLock(const SkBitmap& orig,
551 SkScalar scaleX, 571 SkScalar scaleX,
552 SkScalar scaleY, 572 SkScalar scaleY,
553 const SkBitmap& scaled) { 573 const SkBitmap& scaled) {
554 SkAutoMutexAcquire am(gMutex); 574 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
555 return get_cache()->addAndLock(orig, scaleX, scaleY, scaled); 575 return cache->addAndLock(orig, scaleX, scaleY, scaled);
556 } 576 }
557 577
558 SkScaledImageCache::ID* SkScaledImageCache::AddAndLockMip(const SkBitmap& orig, 578 SkScaledImageCache::ID* SkScaledImageCache::AddAndLockMip(const SkBitmap& orig,
559 const SkMipMap* mip) { 579 const SkMipMap* mip) {
560 SkAutoMutexAcquire am(gMutex); 580 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
561 return get_cache()->addAndLockMip(orig, mip); 581 return cache->addAndLockMip(orig, mip);
562 } 582 }
563 583
564 void SkScaledImageCache::Unlock(SkScaledImageCache::ID* id) { 584 void SkScaledImageCache::Unlock(SkScaledImageCache::ID* id) {
565 SkAutoMutexAcquire am(gMutex); 585 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
566 return get_cache()->unlock(id); 586 return cache->unlock(id);
567 } 587 }
568 588
569 size_t SkScaledImageCache::GetBytesUsed() { 589 size_t SkScaledImageCache::GetBytesUsed() {
570 SkAutoMutexAcquire am(gMutex); 590 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
571 return get_cache()->getBytesUsed(); 591 return cache->getBytesUsed();
572 } 592 }
573 593
574 size_t SkScaledImageCache::GetByteLimit() { 594 size_t SkScaledImageCache::GetByteLimit() {
575 SkAutoMutexAcquire am(gMutex); 595 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
576 return get_cache()->getByteLimit(); 596 return cache->getByteLimit();
577 } 597 }
578 598
579 size_t SkScaledImageCache::SetByteLimit(size_t newLimit) { 599 size_t SkScaledImageCache::SetByteLimit(size_t newLimit) {
580 SkAutoMutexAcquire am(gMutex); 600 SkScaledImageCache* cache = SkScaledImageCache::GetGlobalInstance();
581 return get_cache()->setByteLimit(newLimit); 601 return cache->setByteLimit(newLimit);
582 } 602 }
583 603
584 /////////////////////////////////////////////////////////////////////////////// 604 ///////////////////////////////////////////////////////////////////////////////
585 605
586 #include "SkGraphics.h" 606 #include "SkGraphics.h"
587 607
588 size_t SkGraphics::GetImageCacheBytesUsed() { 608 size_t SkGraphics::GetImageCacheBytesUsed() {
589 return SkScaledImageCache::GetBytesUsed(); 609 return SkScaledImageCache::GetBytesUsed();
590 } 610 }
591 611
592 size_t SkGraphics::GetImageCacheByteLimit() { 612 size_t SkGraphics::GetImageCacheByteLimit() {
593 return SkScaledImageCache::GetByteLimit(); 613 return SkScaledImageCache::GetByteLimit();
594 } 614 }
595 615
596 size_t SkGraphics::SetImageCacheByteLimit(size_t newLimit) { 616 size_t SkGraphics::SetImageCacheByteLimit(size_t newLimit) {
597 return SkScaledImageCache::SetByteLimit(newLimit); 617 return SkScaledImageCache::SetByteLimit(newLimit);
598 } 618 }
619
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698