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

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

Issue 511283002: rename ScaledImageCache to ResourceCache (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 3 months 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
« no previous file with comments | « src/core/SkResourceCache.h ('k') | src/core/SkScaledImageCache.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "SkChecksum.h" 8 #include "SkChecksum.h"
9 #include "SkScaledImageCache.h" 9 #include "SkResourceCache.h"
10 #include "SkMipMap.h" 10 #include "SkMipMap.h"
11 #include "SkPixelRef.h" 11 #include "SkPixelRef.h"
12 12
13 // This can be defined by the caller's build system 13 // This can be defined by the caller's build system
14 //#define SK_USE_DISCARDABLE_SCALEDIMAGECACHE 14 //#define SK_USE_DISCARDABLE_SCALEDIMAGECACHE
15 15
16 #ifndef SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT 16 #ifndef SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT
17 # define SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT 1024 17 # define SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT 1024
18 #endif 18 #endif
19 19
20 #ifndef SK_DEFAULT_IMAGE_CACHE_LIMIT 20 #ifndef SK_DEFAULT_IMAGE_CACHE_LIMIT
21 #define SK_DEFAULT_IMAGE_CACHE_LIMIT (2 * 1024 * 1024) 21 #define SK_DEFAULT_IMAGE_CACHE_LIMIT (2 * 1024 * 1024)
22 #endif 22 #endif
23 23
24 void SkScaledImageCache::Key::init(size_t length) { 24 void SkResourceCache::Key::init(size_t length) {
25 SkASSERT(SkAlign4(length) == length); 25 SkASSERT(SkAlign4(length) == length);
26 // 2 is fCount32 and fHash 26 // 2 is fCount32 and fHash
27 fCount32 = SkToS32(2 + (length >> 2)); 27 fCount32 = SkToS32(2 + (length >> 2));
28 // skip both of our fields whe computing the murmur 28 // skip both of our fields whe computing the murmur
29 fHash = SkChecksum::Murmur3(this->as32() + 2, (fCount32 - 2) << 2); 29 fHash = SkChecksum::Murmur3(this->as32() + 2, (fCount32 - 2) << 2);
30 } 30 }
31 31
32 #include "SkTDynamicHash.h" 32 #include "SkTDynamicHash.h"
33 33
34 class SkScaledImageCache::Hash : 34 class SkResourceCache::Hash :
35 public SkTDynamicHash<SkScaledImageCache::Rec, SkScaledImageCache::Key> {}; 35 public SkTDynamicHash<SkResourceCache::Rec, SkResourceCache::Key> {};
36 36
37 37
38 /////////////////////////////////////////////////////////////////////////////// 38 ///////////////////////////////////////////////////////////////////////////////
39 39
40 // experimental hash to speed things up 40 // experimental hash to speed things up
41 #define USE_HASH 41 #define USE_HASH
42 42
43 #if !defined(USE_HASH) 43 #if !defined(USE_HASH)
44 static inline SkScaledImageCache::Rec* find_rec_in_list( 44 static inline SkResourceCache::Rec* find_rec_in_list(
45 SkScaledImageCache::Rec* head, const Key & key) { 45 SkResourceCache::Rec* head, const Key & key) {
46 SkScaledImageCache::Rec* rec = head; 46 SkResourceCache::Rec* rec = head;
47 while ((rec != NULL) && (rec->fKey != key)) { 47 while ((rec != NULL) && (rec->fKey != key)) {
48 rec = rec->fNext; 48 rec = rec->fNext;
49 } 49 }
50 return rec; 50 return rec;
51 } 51 }
52 #endif 52 #endif
53 53
54 void SkScaledImageCache::init() { 54 void SkResourceCache::init() {
55 fHead = NULL; 55 fHead = NULL;
56 fTail = NULL; 56 fTail = NULL;
57 #ifdef USE_HASH 57 #ifdef USE_HASH
58 fHash = new Hash; 58 fHash = new Hash;
59 #else 59 #else
60 fHash = NULL; 60 fHash = NULL;
61 #endif 61 #endif
62 fTotalBytesUsed = 0; 62 fTotalBytesUsed = 0;
63 fCount = 0; 63 fCount = 0;
64 fSingleAllocationByteLimit = 0; 64 fSingleAllocationByteLimit = 0;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 135
136 void SkOneShotDiscardablePixelRef::onUnlockPixels() { 136 void SkOneShotDiscardablePixelRef::onUnlockPixels() {
137 SkASSERT(!fFirstTime); 137 SkASSERT(!fFirstTime);
138 fDM->unlock(); 138 fDM->unlock();
139 } 139 }
140 140
141 size_t SkOneShotDiscardablePixelRef::getAllocatedSizeInBytes() const { 141 size_t SkOneShotDiscardablePixelRef::getAllocatedSizeInBytes() const {
142 return this->info().getSafeSize(fRB); 142 return this->info().getSafeSize(fRB);
143 } 143 }
144 144
145 class SkScaledImageCacheDiscardableAllocator : public SkBitmap::Allocator { 145 class SkResourceCacheDiscardableAllocator : public SkBitmap::Allocator {
146 public: 146 public:
147 SkScaledImageCacheDiscardableAllocator( 147 SkResourceCacheDiscardableAllocator(SkResourceCache::DiscardableFactory fact ory) {
148 SkScaledImageCache::DiscardableFactory factory) {
149 SkASSERT(factory); 148 SkASSERT(factory);
150 fFactory = factory; 149 fFactory = factory;
151 } 150 }
152 151
153 virtual bool allocPixelRef(SkBitmap*, SkColorTable*) SK_OVERRIDE; 152 virtual bool allocPixelRef(SkBitmap*, SkColorTable*) SK_OVERRIDE;
154 153
155 private: 154 private:
156 SkScaledImageCache::DiscardableFactory fFactory; 155 SkResourceCache::DiscardableFactory fFactory;
157 }; 156 };
158 157
159 bool SkScaledImageCacheDiscardableAllocator::allocPixelRef(SkBitmap* bitmap, 158 bool SkResourceCacheDiscardableAllocator::allocPixelRef(SkBitmap* bitmap, SkColo rTable* ctable) {
160 SkColorTable* ctable) {
161 size_t size = bitmap->getSize(); 159 size_t size = bitmap->getSize();
162 uint64_t size64 = bitmap->computeSize64(); 160 uint64_t size64 = bitmap->computeSize64();
163 if (0 == size || size64 > (uint64_t)size) { 161 if (0 == size || size64 > (uint64_t)size) {
164 return false; 162 return false;
165 } 163 }
166 164
167 SkDiscardableMemory* dm = fFactory(size); 165 SkDiscardableMemory* dm = fFactory(size);
168 if (NULL == dm) { 166 if (NULL == dm) {
169 return false; 167 return false;
170 } 168 }
171 169
172 // can we relax this? 170 // can we relax this?
173 if (kN32_SkColorType != bitmap->colorType()) { 171 if (kN32_SkColorType != bitmap->colorType()) {
174 return false; 172 return false;
175 } 173 }
176 174
177 SkImageInfo info = bitmap->info(); 175 SkImageInfo info = bitmap->info();
178 bitmap->setPixelRef(SkNEW_ARGS(SkOneShotDiscardablePixelRef, 176 bitmap->setPixelRef(SkNEW_ARGS(SkOneShotDiscardablePixelRef,
179 (info, dm, bitmap->rowBytes())))->unref(); 177 (info, dm, bitmap->rowBytes())))->unref();
180 bitmap->lockPixels(); 178 bitmap->lockPixels();
181 return bitmap->readyToDraw(); 179 return bitmap->readyToDraw();
182 } 180 }
183 181
184 SkScaledImageCache::SkScaledImageCache(DiscardableFactory factory) { 182 SkResourceCache::SkResourceCache(DiscardableFactory factory) {
185 this->init(); 183 this->init();
186 fDiscardableFactory = factory; 184 fDiscardableFactory = factory;
187 185
188 fAllocator = SkNEW_ARGS(SkScaledImageCacheDiscardableAllocator, (factory)); 186 fAllocator = SkNEW_ARGS(SkResourceCacheDiscardableAllocator, (factory));
189 } 187 }
190 188
191 SkScaledImageCache::SkScaledImageCache(size_t byteLimit) { 189 SkResourceCache::SkResourceCache(size_t byteLimit) {
192 this->init(); 190 this->init();
193 fTotalByteLimit = byteLimit; 191 fTotalByteLimit = byteLimit;
194 } 192 }
195 193
196 SkScaledImageCache::~SkScaledImageCache() { 194 SkResourceCache::~SkResourceCache() {
197 SkSafeUnref(fAllocator); 195 SkSafeUnref(fAllocator);
198 196
199 Rec* rec = fHead; 197 Rec* rec = fHead;
200 while (rec) { 198 while (rec) {
201 Rec* next = rec->fNext; 199 Rec* next = rec->fNext;
202 SkDELETE(rec); 200 SkDELETE(rec);
203 rec = next; 201 rec = next;
204 } 202 }
205 delete fHash; 203 delete fHash;
206 } 204 }
207 205
208 //////////////////////////////////////////////////////////////////////////////// 206 ////////////////////////////////////////////////////////////////////////////////
209 207
210 const SkScaledImageCache::Rec* SkScaledImageCache::findAndLock(const Key& key) { 208 const SkResourceCache::Rec* SkResourceCache::findAndLock(const Key& key) {
211 #ifdef USE_HASH 209 #ifdef USE_HASH
212 Rec* rec = fHash->find(key); 210 Rec* rec = fHash->find(key);
213 #else 211 #else
214 Rec* rec = find_rec_in_list(fHead, key); 212 Rec* rec = find_rec_in_list(fHead, key);
215 #endif 213 #endif
216 if (rec) { 214 if (rec) {
217 this->moveToHead(rec); // for our LRU 215 this->moveToHead(rec); // for our LRU
218 rec->fLockCount += 1; 216 rec->fLockCount += 1;
219 } 217 }
220 return rec; 218 return rec;
221 } 219 }
222 220
223 const SkScaledImageCache::Rec* SkScaledImageCache::addAndLock(Rec* rec) { 221 const SkResourceCache::Rec* SkResourceCache::addAndLock(Rec* rec) {
224 SkASSERT(rec); 222 SkASSERT(rec);
225 // See if we already have this key (racy inserts, etc.) 223 // See if we already have this key (racy inserts, etc.)
226 const Rec* existing = this->findAndLock(rec->getKey()); 224 const Rec* existing = this->findAndLock(rec->getKey());
227 if (NULL != existing) { 225 if (NULL != existing) {
228 SkDELETE(rec); 226 SkDELETE(rec);
229 return existing; 227 return existing;
230 } 228 }
231 229
232 this->addToHead(rec); 230 this->addToHead(rec);
233 SkASSERT(1 == rec->fLockCount); 231 SkASSERT(1 == rec->fLockCount);
234 #ifdef USE_HASH 232 #ifdef USE_HASH
235 SkASSERT(fHash); 233 SkASSERT(fHash);
236 fHash->add(rec); 234 fHash->add(rec);
237 #endif 235 #endif
238 // We may (now) be overbudget, so see if we need to purge something. 236 // We may (now) be overbudget, so see if we need to purge something.
239 this->purgeAsNeeded(); 237 this->purgeAsNeeded();
240 return rec; 238 return rec;
241 } 239 }
242 240
243 void SkScaledImageCache::add(Rec* rec) { 241 void SkResourceCache::add(Rec* rec) {
244 SkASSERT(rec); 242 SkASSERT(rec);
245 // See if we already have this key (racy inserts, etc.) 243 // See if we already have this key (racy inserts, etc.)
246 const Rec* existing = this->findAndLock(rec->getKey()); 244 const Rec* existing = this->findAndLock(rec->getKey());
247 if (NULL != existing) { 245 if (NULL != existing) {
248 SkDELETE(rec); 246 SkDELETE(rec);
249 this->unlock(existing); 247 this->unlock(existing);
250 return; 248 return;
251 } 249 }
252 250
253 this->addToHead(rec); 251 this->addToHead(rec);
254 SkASSERT(1 == rec->fLockCount); 252 SkASSERT(1 == rec->fLockCount);
255 #ifdef USE_HASH 253 #ifdef USE_HASH
256 SkASSERT(fHash); 254 SkASSERT(fHash);
257 fHash->add(rec); 255 fHash->add(rec);
258 #endif 256 #endif
259 this->unlock(rec); 257 this->unlock(rec);
260 } 258 }
261 259
262 void SkScaledImageCache::unlock(SkScaledImageCache::ID id) { 260 void SkResourceCache::unlock(SkResourceCache::ID id) {
263 SkASSERT(id); 261 SkASSERT(id);
264 262
265 #ifdef SK_DEBUG 263 #ifdef SK_DEBUG
266 { 264 {
267 bool found = false; 265 bool found = false;
268 Rec* rec = fHead; 266 Rec* rec = fHead;
269 while (rec != NULL) { 267 while (rec != NULL) {
270 if (rec == id) { 268 if (rec == id) {
271 found = true; 269 found = true;
272 break; 270 break;
273 } 271 }
274 rec = rec->fNext; 272 rec = rec->fNext;
275 } 273 }
276 SkASSERT(found); 274 SkASSERT(found);
277 } 275 }
278 #endif 276 #endif
279 const Rec* rec = id; 277 const Rec* rec = id;
280 SkASSERT(rec->fLockCount > 0); 278 SkASSERT(rec->fLockCount > 0);
281 // We're under our lock, and we're the only possible mutator, so unconsting is fine. 279 // We're under our lock, and we're the only possible mutator, so unconsting is fine.
282 const_cast<Rec*>(rec)->fLockCount -= 1; 280 const_cast<Rec*>(rec)->fLockCount -= 1;
283 281
284 // we may have been over-budget, but now have released something, so check 282 // we may have been over-budget, but now have released something, so check
285 // if we should purge. 283 // if we should purge.
286 if (0 == rec->fLockCount) { 284 if (0 == rec->fLockCount) {
287 this->purgeAsNeeded(); 285 this->purgeAsNeeded();
288 } 286 }
289 } 287 }
290 288
291 void SkScaledImageCache::purgeAsNeeded() { 289 void SkResourceCache::purgeAsNeeded() {
292 size_t byteLimit; 290 size_t byteLimit;
293 int countLimit; 291 int countLimit;
294 292
295 if (fDiscardableFactory) { 293 if (fDiscardableFactory) {
296 countLimit = SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT; 294 countLimit = SK_DISCARDABLEMEMORY_SCALEDIMAGECACHE_COUNT_LIMIT;
297 byteLimit = SK_MaxU32; // no limit based on bytes 295 byteLimit = SK_MaxU32; // no limit based on bytes
298 } else { 296 } else {
299 countLimit = SK_MaxS32; // no limit based on count 297 countLimit = SK_MaxS32; // no limit based on count
300 byteLimit = fTotalByteLimit; 298 byteLimit = fTotalByteLimit;
301 } 299 }
(...skipping 21 matching lines...) Expand all
323 bytesUsed -= used; 321 bytesUsed -= used;
324 countUsed -= 1; 322 countUsed -= 1;
325 } 323 }
326 rec = prev; 324 rec = prev;
327 } 325 }
328 326
329 fTotalBytesUsed = bytesUsed; 327 fTotalBytesUsed = bytesUsed;
330 fCount = countUsed; 328 fCount = countUsed;
331 } 329 }
332 330
333 size_t SkScaledImageCache::setTotalByteLimit(size_t newLimit) { 331 size_t SkResourceCache::setTotalByteLimit(size_t newLimit) {
334 size_t prevLimit = fTotalByteLimit; 332 size_t prevLimit = fTotalByteLimit;
335 fTotalByteLimit = newLimit; 333 fTotalByteLimit = newLimit;
336 if (newLimit < prevLimit) { 334 if (newLimit < prevLimit) {
337 this->purgeAsNeeded(); 335 this->purgeAsNeeded();
338 } 336 }
339 return prevLimit; 337 return prevLimit;
340 } 338 }
341 339
342 /////////////////////////////////////////////////////////////////////////////// 340 ///////////////////////////////////////////////////////////////////////////////
343 341
344 void SkScaledImageCache::detach(Rec* rec) { 342 void SkResourceCache::detach(Rec* rec) {
345 Rec* prev = rec->fPrev; 343 Rec* prev = rec->fPrev;
346 Rec* next = rec->fNext; 344 Rec* next = rec->fNext;
347 345
348 if (!prev) { 346 if (!prev) {
349 SkASSERT(fHead == rec); 347 SkASSERT(fHead == rec);
350 fHead = next; 348 fHead = next;
351 } else { 349 } else {
352 prev->fNext = next; 350 prev->fNext = next;
353 } 351 }
354 352
355 if (!next) { 353 if (!next) {
356 fTail = prev; 354 fTail = prev;
357 } else { 355 } else {
358 next->fPrev = prev; 356 next->fPrev = prev;
359 } 357 }
360 358
361 rec->fNext = rec->fPrev = NULL; 359 rec->fNext = rec->fPrev = NULL;
362 } 360 }
363 361
364 void SkScaledImageCache::moveToHead(Rec* rec) { 362 void SkResourceCache::moveToHead(Rec* rec) {
365 if (fHead == rec) { 363 if (fHead == rec) {
366 return; 364 return;
367 } 365 }
368 366
369 SkASSERT(fHead); 367 SkASSERT(fHead);
370 SkASSERT(fTail); 368 SkASSERT(fTail);
371 369
372 this->validate(); 370 this->validate();
373 371
374 this->detach(rec); 372 this->detach(rec);
375 373
376 fHead->fPrev = rec; 374 fHead->fPrev = rec;
377 rec->fNext = fHead; 375 rec->fNext = fHead;
378 fHead = rec; 376 fHead = rec;
379 377
380 this->validate(); 378 this->validate();
381 } 379 }
382 380
383 void SkScaledImageCache::addToHead(Rec* rec) { 381 void SkResourceCache::addToHead(Rec* rec) {
384 this->validate(); 382 this->validate();
385 383
386 rec->fPrev = NULL; 384 rec->fPrev = NULL;
387 rec->fNext = fHead; 385 rec->fNext = fHead;
388 if (fHead) { 386 if (fHead) {
389 fHead->fPrev = rec; 387 fHead->fPrev = rec;
390 } 388 }
391 fHead = rec; 389 fHead = rec;
392 if (!fTail) { 390 if (!fTail) {
393 fTail = rec; 391 fTail = rec;
394 } 392 }
395 fTotalBytesUsed += rec->bytesUsed(); 393 fTotalBytesUsed += rec->bytesUsed();
396 fCount += 1; 394 fCount += 1;
397 395
398 this->validate(); 396 this->validate();
399 } 397 }
400 398
401 /////////////////////////////////////////////////////////////////////////////// 399 ///////////////////////////////////////////////////////////////////////////////
402 400
403 #ifdef SK_DEBUG 401 #ifdef SK_DEBUG
404 void SkScaledImageCache::validate() const { 402 void SkResourceCache::validate() const {
405 if (NULL == fHead) { 403 if (NULL == fHead) {
406 SkASSERT(NULL == fTail); 404 SkASSERT(NULL == fTail);
407 SkASSERT(0 == fTotalBytesUsed); 405 SkASSERT(0 == fTotalBytesUsed);
408 return; 406 return;
409 } 407 }
410 408
411 if (fHead == fTail) { 409 if (fHead == fTail) {
412 SkASSERT(NULL == fHead->fPrev); 410 SkASSERT(NULL == fHead->fPrev);
413 SkASSERT(NULL == fHead->fNext); 411 SkASSERT(NULL == fHead->fNext);
414 SkASSERT(fHead->bytesUsed() == fTotalBytesUsed); 412 SkASSERT(fHead->bytesUsed() == fTotalBytesUsed);
(...skipping 23 matching lines...) Expand all
438 SkASSERT(used >= rec->bytesUsed()); 436 SkASSERT(used >= rec->bytesUsed());
439 used -= rec->bytesUsed(); 437 used -= rec->bytesUsed();
440 rec = rec->fPrev; 438 rec = rec->fPrev;
441 } 439 }
442 440
443 SkASSERT(0 == count); 441 SkASSERT(0 == count);
444 SkASSERT(0 == used); 442 SkASSERT(0 == used);
445 } 443 }
446 #endif 444 #endif
447 445
448 void SkScaledImageCache::dump() const { 446 void SkResourceCache::dump() const {
449 this->validate(); 447 this->validate();
450 448
451 const Rec* rec = fHead; 449 const Rec* rec = fHead;
452 int locked = 0; 450 int locked = 0;
453 while (rec) { 451 while (rec) {
454 locked += rec->fLockCount > 0; 452 locked += rec->fLockCount > 0;
455 rec = rec->fNext; 453 rec = rec->fNext;
456 } 454 }
457 455
458 SkDebugf("SkScaledImageCache: count=%d bytes=%d locked=%d %s\n", 456 SkDebugf("SkResourceCache: count=%d bytes=%d locked=%d %s\n",
459 fCount, fTotalBytesUsed, locked, 457 fCount, fTotalBytesUsed, locked,
460 fDiscardableFactory ? "discardable" : "malloc"); 458 fDiscardableFactory ? "discardable" : "malloc");
461 } 459 }
462 460
463 size_t SkScaledImageCache::setSingleAllocationByteLimit(size_t newLimit) { 461 size_t SkResourceCache::setSingleAllocationByteLimit(size_t newLimit) {
464 size_t oldLimit = fSingleAllocationByteLimit; 462 size_t oldLimit = fSingleAllocationByteLimit;
465 fSingleAllocationByteLimit = newLimit; 463 fSingleAllocationByteLimit = newLimit;
466 return oldLimit; 464 return oldLimit;
467 } 465 }
468 466
469 size_t SkScaledImageCache::getSingleAllocationByteLimit() const { 467 size_t SkResourceCache::getSingleAllocationByteLimit() const {
470 return fSingleAllocationByteLimit; 468 return fSingleAllocationByteLimit;
471 } 469 }
472 470
473 /////////////////////////////////////////////////////////////////////////////// 471 ///////////////////////////////////////////////////////////////////////////////
474 472
475 #include "SkThread.h" 473 #include "SkThread.h"
476 474
477 SK_DECLARE_STATIC_MUTEX(gMutex); 475 SK_DECLARE_STATIC_MUTEX(gMutex);
478 static SkScaledImageCache* gScaledImageCache = NULL; 476 static SkResourceCache* gResourceCache = NULL;
479 static void cleanup_gScaledImageCache() { 477 static void cleanup_gResourceCache() {
480 // We'll clean this up in our own tests, but disable for clients. 478 // We'll clean this up in our own tests, but disable for clients.
481 // Chrome seems to have funky multi-process things going on in unit tests th at 479 // Chrome seems to have funky multi-process things going on in unit tests th at
482 // makes this unsafe to delete when the main process atexit()s. 480 // makes this unsafe to delete when the main process atexit()s.
483 // SkLazyPtr does the same sort of thing. 481 // SkLazyPtr does the same sort of thing.
484 #if SK_DEVELOPER 482 #if SK_DEVELOPER
485 SkDELETE(gScaledImageCache); 483 SkDELETE(gResourceCache);
486 #endif 484 #endif
487 } 485 }
488 486
489 /** Must hold gMutex when calling. */ 487 /** Must hold gMutex when calling. */
490 static SkScaledImageCache* get_cache() { 488 static SkResourceCache* get_cache() {
491 // gMutex is always held when this is called, so we don't need to be fancy i n here. 489 // gMutex is always held when this is called, so we don't need to be fancy i n here.
492 gMutex.assertHeld(); 490 gMutex.assertHeld();
493 if (NULL == gScaledImageCache) { 491 if (NULL == gResourceCache) {
494 #ifdef SK_USE_DISCARDABLE_SCALEDIMAGECACHE 492 #ifdef SK_USE_DISCARDABLE_SCALEDIMAGECACHE
495 gScaledImageCache = SkNEW_ARGS(SkScaledImageCache, (SkDiscardableMemory: :Create)); 493 gResourceCache = SkNEW_ARGS(SkResourceCache, (SkDiscardableMemory::Creat e));
496 #else 494 #else
497 gScaledImageCache = SkNEW_ARGS(SkScaledImageCache, (SK_DEFAULT_IMAGE_CAC HE_LIMIT)); 495 gResourceCache = SkNEW_ARGS(SkResourceCache, (SK_DEFAULT_IMAGE_CACHE_LIM IT));
498 #endif 496 #endif
499 atexit(cleanup_gScaledImageCache); 497 atexit(cleanup_gResourceCache);
500 } 498 }
501 return gScaledImageCache; 499 return gResourceCache;
502 } 500 }
503 501
504 void SkScaledImageCache::Unlock(SkScaledImageCache::ID id) { 502 void SkResourceCache::Unlock(SkResourceCache::ID id) {
505 SkAutoMutexAcquire am(gMutex); 503 SkAutoMutexAcquire am(gMutex);
506 get_cache()->unlock(id); 504 get_cache()->unlock(id);
507 505
508 // get_cache()->dump(); 506 // get_cache()->dump();
509 } 507 }
510 508
511 size_t SkScaledImageCache::GetTotalBytesUsed() { 509 size_t SkResourceCache::GetTotalBytesUsed() {
512 SkAutoMutexAcquire am(gMutex); 510 SkAutoMutexAcquire am(gMutex);
513 return get_cache()->getTotalBytesUsed(); 511 return get_cache()->getTotalBytesUsed();
514 } 512 }
515 513
516 size_t SkScaledImageCache::GetTotalByteLimit() { 514 size_t SkResourceCache::GetTotalByteLimit() {
517 SkAutoMutexAcquire am(gMutex); 515 SkAutoMutexAcquire am(gMutex);
518 return get_cache()->getTotalByteLimit(); 516 return get_cache()->getTotalByteLimit();
519 } 517 }
520 518
521 size_t SkScaledImageCache::SetTotalByteLimit(size_t newLimit) { 519 size_t SkResourceCache::SetTotalByteLimit(size_t newLimit) {
522 SkAutoMutexAcquire am(gMutex); 520 SkAutoMutexAcquire am(gMutex);
523 return get_cache()->setTotalByteLimit(newLimit); 521 return get_cache()->setTotalByteLimit(newLimit);
524 } 522 }
525 523
526 SkBitmap::Allocator* SkScaledImageCache::GetAllocator() { 524 SkBitmap::Allocator* SkResourceCache::GetAllocator() {
527 SkAutoMutexAcquire am(gMutex); 525 SkAutoMutexAcquire am(gMutex);
528 return get_cache()->allocator(); 526 return get_cache()->allocator();
529 } 527 }
530 528
531 void SkScaledImageCache::Dump() { 529 void SkResourceCache::Dump() {
532 SkAutoMutexAcquire am(gMutex); 530 SkAutoMutexAcquire am(gMutex);
533 get_cache()->dump(); 531 get_cache()->dump();
534 } 532 }
535 533
536 size_t SkScaledImageCache::SetSingleAllocationByteLimit(size_t size) { 534 size_t SkResourceCache::SetSingleAllocationByteLimit(size_t size) {
537 SkAutoMutexAcquire am(gMutex); 535 SkAutoMutexAcquire am(gMutex);
538 return get_cache()->setSingleAllocationByteLimit(size); 536 return get_cache()->setSingleAllocationByteLimit(size);
539 } 537 }
540 538
541 size_t SkScaledImageCache::GetSingleAllocationByteLimit() { 539 size_t SkResourceCache::GetSingleAllocationByteLimit() {
542 SkAutoMutexAcquire am(gMutex); 540 SkAutoMutexAcquire am(gMutex);
543 return get_cache()->getSingleAllocationByteLimit(); 541 return get_cache()->getSingleAllocationByteLimit();
544 } 542 }
545 543
546 const SkScaledImageCache::Rec* SkScaledImageCache::FindAndLock(const Key& key) { 544 const SkResourceCache::Rec* SkResourceCache::FindAndLock(const Key& key) {
547 SkAutoMutexAcquire am(gMutex); 545 SkAutoMutexAcquire am(gMutex);
548 return get_cache()->findAndLock(key); 546 return get_cache()->findAndLock(key);
549 } 547 }
550 548
551 const SkScaledImageCache::Rec* SkScaledImageCache::AddAndLock(Rec* rec) { 549 const SkResourceCache::Rec* SkResourceCache::AddAndLock(Rec* rec) {
552 SkAutoMutexAcquire am(gMutex); 550 SkAutoMutexAcquire am(gMutex);
553 return get_cache()->addAndLock(rec); 551 return get_cache()->addAndLock(rec);
554 } 552 }
555 553
556 void SkScaledImageCache::Add(Rec* rec) { 554 void SkResourceCache::Add(Rec* rec) {
557 SkAutoMutexAcquire am(gMutex); 555 SkAutoMutexAcquire am(gMutex);
558 get_cache()->add(rec); 556 get_cache()->add(rec);
559 } 557 }
560 558
561 /////////////////////////////////////////////////////////////////////////////// 559 ///////////////////////////////////////////////////////////////////////////////
562 560
563 #include "SkGraphics.h" 561 #include "SkGraphics.h"
564 562
565 size_t SkGraphics::GetImageCacheTotalBytesUsed() { 563 size_t SkGraphics::GetResourceCacheTotalBytesUsed() {
566 return SkScaledImageCache::GetTotalBytesUsed(); 564 return SkResourceCache::GetTotalBytesUsed();
567 } 565 }
568 566
569 size_t SkGraphics::GetImageCacheTotalByteLimit() { 567 size_t SkGraphics::GetResourceCacheTotalByteLimit() {
570 return SkScaledImageCache::GetTotalByteLimit(); 568 return SkResourceCache::GetTotalByteLimit();
571 } 569 }
572 570
573 size_t SkGraphics::SetImageCacheTotalByteLimit(size_t newLimit) { 571 size_t SkGraphics::SetResourceCacheTotalByteLimit(size_t newLimit) {
574 return SkScaledImageCache::SetTotalByteLimit(newLimit); 572 return SkResourceCache::SetTotalByteLimit(newLimit);
575 } 573 }
576 574
577 size_t SkGraphics::GetImageCacheSingleAllocationByteLimit() { 575 size_t SkGraphics::GetResourceCacheSingleAllocationByteLimit() {
578 return SkScaledImageCache::GetSingleAllocationByteLimit(); 576 return SkResourceCache::GetSingleAllocationByteLimit();
579 } 577 }
580 578
581 size_t SkGraphics::SetImageCacheSingleAllocationByteLimit(size_t newLimit) { 579 size_t SkGraphics::SetResourceCacheSingleAllocationByteLimit(size_t newLimit) {
582 return SkScaledImageCache::SetSingleAllocationByteLimit(newLimit); 580 return SkResourceCache::SetSingleAllocationByteLimit(newLimit);
583 } 581 }
584 582
OLDNEW
« no previous file with comments | « src/core/SkResourceCache.h ('k') | src/core/SkScaledImageCache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698