OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
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 #include "GrResourceCache2.h" | 10 #include "GrResourceCache2.h" |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 return; | 254 return; |
255 } | 255 } |
256 | 256 |
257 // Purge the resource if we're over budget | 257 // Purge the resource if we're over budget |
258 bool overBudget = fBudgetedCount > fMaxCount || fBudgetedBytes > fMaxBytes; | 258 bool overBudget = fBudgetedCount > fMaxCount || fBudgetedBytes > fMaxBytes; |
259 | 259 |
260 // Also purge if the resource has neither a valid scratch key nor a content
key. | 260 // Also purge if the resource has neither a valid scratch key nor a content
key. |
261 bool noKey = !resource->cacheAccess().isScratch() && | 261 bool noKey = !resource->cacheAccess().isScratch() && |
262 (NULL == resource->cacheAccess().getContentKey()); | 262 (NULL == resource->cacheAccess().getContentKey()); |
263 | 263 |
264 // Wrapped resources should never have a key. | 264 // Only cached resources should ever have a key. |
265 SkASSERT(noKey || !resource->cacheAccess().isWrapped()); | 265 SkASSERT(noKey || resource->cacheAccess().isBudgeted()); |
266 | 266 |
267 // And purge if the resource is wrapped | |
268 if (overBudget || noKey) { | 267 if (overBudget || noKey) { |
269 SkDEBUGCODE(int beforeCount = fCount;) | 268 SkDEBUGCODE(int beforeCount = fCount;) |
270 resource->cacheAccess().release(); | 269 resource->cacheAccess().release(); |
271 // We should at least free this resource, perhaps dependent resources as
well. | 270 // We should at least free this resource, perhaps dependent resources as
well. |
272 SkASSERT(fCount < beforeCount); | 271 SkASSERT(fCount < beforeCount); |
273 } | 272 } |
274 | 273 |
275 this->validate(); | 274 this->validate(); |
276 } | 275 } |
277 | 276 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 fBudgetedBytes += size; | 308 fBudgetedBytes += size; |
310 this->purgeAsNeeded(); | 309 this->purgeAsNeeded(); |
311 } else { | 310 } else { |
312 --fBudgetedCount; | 311 --fBudgetedCount; |
313 fBudgetedBytes -= size; | 312 fBudgetedBytes -= size; |
314 } | 313 } |
315 | 314 |
316 this->validate(); | 315 this->validate(); |
317 } | 316 } |
318 | 317 |
319 | |
320 void GrResourceCache2::internalPurgeAsNeeded() { | 318 void GrResourceCache2::internalPurgeAsNeeded() { |
321 SkASSERT(!fPurging); | 319 SkASSERT(!fPurging); |
322 SkASSERT(!fNewlyPurgableResourceWhilePurging); | 320 SkASSERT(!fNewlyPurgableResourceWhilePurging); |
323 SkASSERT(fBudgetedCount > fMaxCount || fBudgetedBytes > fMaxBytes); | 321 SkASSERT(fBudgetedCount > fMaxCount || fBudgetedBytes > fMaxBytes); |
324 | 322 |
325 fPurging = true; | 323 fPurging = true; |
326 | 324 |
327 bool overBudget = true; | 325 bool overBudget = true; |
328 do { | 326 do { |
329 fNewlyPurgableResourceWhilePurging = false; | 327 fNewlyPurgableResourceWhilePurging = false; |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 | 481 |
484 SkDebugf("Budget: %d items %d bytes\n", fMaxCount, fMaxBytes); | 482 SkDebugf("Budget: %d items %d bytes\n", fMaxCount, fMaxBytes); |
485 SkDebugf("\t\tEntry Count: current %d" | 483 SkDebugf("\t\tEntry Count: current %d" |
486 " (%d budgeted, %d wrapped, %d locked, %d scratch %.2g%% full), hig
h %d\n", | 484 " (%d budgeted, %d wrapped, %d locked, %d scratch %.2g%% full), hig
h %d\n", |
487 fCount, fBudgetedCount, wrapped, locked, scratch, countUtilization, fHig
hWaterCount); | 485 fCount, fBudgetedCount, wrapped, locked, scratch, countUtilization, fHig
hWaterCount); |
488 SkDebugf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full, %d unbudget
ed) high %d\n", | 486 SkDebugf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full, %d unbudget
ed) high %d\n", |
489 fBytes, fBudgetedBytes, byteUtilization, unbudgetedSize, fHighWa
terBytes); | 487 fBytes, fBudgetedBytes, byteUtilization, unbudgetedSize, fHighWa
terBytes); |
490 } | 488 } |
491 | 489 |
492 #endif | 490 #endif |
OLD | NEW |