Chromium Code Reviews| Index: src/gpu/GrResourceCache2.cpp |
| diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp |
| index dd16ebe53ae700d93a4bb46a1e9d2d6e9576c57d..c2c00f09459d0cf68586a08a54501564cbffaba0 100644 |
| --- a/src/gpu/GrResourceCache2.cpp |
| +++ b/src/gpu/GrResourceCache2.cpp |
| @@ -104,15 +104,14 @@ void GrResourceCache2::insertResource(GrGpuResource* resource) { |
| SkDEBUGCODE(fHighWaterCount = SkTMax(fCount, fHighWaterCount)); |
| fBytes += size; |
| SkDEBUGCODE(fHighWaterBytes = SkTMax(fBytes, fHighWaterBytes)); |
| - if (!resource->cacheAccess().isWrapped()) { |
| + if (resource->cacheAccess().isBudgeted()) { |
|
bsalomon
2014/11/13 19:20:54
Previously isWrapped() controlled whether a resour
|
| ++fBudgetedCount; |
| SkDEBUGCODE(fBudgetedHighWaterCount = SkTMax(fBudgetedCount, fBudgetedHighWaterCount)); |
| fBudgetedBytes += size; |
| SkDEBUGCODE(fBudgetedHighWaterBytes = SkTMax(fBudgetedBytes, fBudgetedHighWaterBytes)); |
| } |
| if (!resource->cacheAccess().getScratchKey().isNullScratch()) { |
| - // TODO(bsalomon): Make this assertion possible. |
| - // SkASSERT(!resource->isWrapped()); |
| + SkASSERT(!resource->cacheAccess().isWrapped()); |
| fScratchMap.insert(resource->cacheAccess().getScratchKey(), resource); |
| } |
| @@ -127,7 +126,7 @@ void GrResourceCache2::removeResource(GrGpuResource* resource) { |
| size_t size = resource->gpuMemorySize(); |
| --fCount; |
| fBytes -= size; |
| - if (!resource->cacheAccess().isWrapped()) { |
| + if (resource->cacheAccess().isBudgeted()) { |
| --fBudgetedCount; |
| fBudgetedBytes -= size; |
| } |
| @@ -186,7 +185,6 @@ public: |
| if (!resource->reffedOnlyByCache() || !resource->cacheAccess().isScratch()) { |
| return false; |
| } |
| - |
| return !fRejectPendingIO || !resource->internalHasPendingIO(); |
| } |
| @@ -300,7 +298,7 @@ void GrResourceCache2::didChangeGpuMemorySize(const GrGpuResource* resource, siz |
| fBytes += delta; |
| SkDEBUGCODE(fHighWaterBytes = SkTMax(fBytes, fHighWaterBytes)); |
| - if (!resource->cacheAccess().isWrapped()) { |
| + if (resource->cacheAccess().isBudgeted()) { |
| fBudgetedBytes += delta; |
| SkDEBUGCODE(fBudgetedHighWaterBytes = SkTMax(fBudgetedBytes, fBudgetedHighWaterBytes)); |
| } |
| @@ -309,6 +307,26 @@ void GrResourceCache2::didChangeGpuMemorySize(const GrGpuResource* resource, siz |
| this->validate(); |
| } |
| +void GrResourceCache2::didChangeBudgetStatus(GrGpuResource* resource) { |
| + SkASSERT(!fPurging); |
| + SkASSERT(resource); |
| + SkASSERT(this->isInCache(resource)); |
| + |
| + size_t size = resource->gpuMemorySize(); |
| + |
| + if (resource->cacheAccess().isBudgeted()) { |
| + ++fBudgetedCount; |
| + fBudgetedBytes += size; |
| + this->purgeAsNeeded(); |
| + } else { |
| + --fBudgetedCount; |
| + fBudgetedBytes -= size; |
| + } |
| + |
| + this->validate(); |
| +} |
| + |
| + |
| void GrResourceCache2::internalPurgeAsNeeded() { |
| SkASSERT(!fPurging); |
| SkASSERT(!fNewlyPurgableResourceWhilePurging); |
| @@ -415,7 +433,7 @@ void GrResourceCache2::validate() const { |
| SkASSERT(!resource->cacheAccess().isWrapped()); |
| } |
| - if (!resource->cacheAccess().isWrapped()) { |
| + if (resource->cacheAccess().isBudgeted()) { |
| ++budgetedCount; |
| budgetedBytes += resource->gpuMemorySize(); |
| } |
| @@ -449,6 +467,7 @@ void GrResourceCache2::printStats() const { |
| int locked = 0; |
| int scratch = 0; |
| + int wrapped = 0; |
| ResourceList::Iter iter; |
| GrGpuResource* resource = iter.init(fResources, ResourceList::Iter::kHead_IterStart); |
| @@ -460,6 +479,9 @@ void GrResourceCache2::printStats() const { |
| if (resource->cacheAccess().isScratch()) { |
| ++scratch; |
| } |
| + if (resource->cacheAccess().isWrapped()) { |
| + ++wrapped; |
| + } |
| } |
| float countUtilization = (100.f * fBudgetedCount) / fMaxCount; |
| @@ -467,8 +489,8 @@ void GrResourceCache2::printStats() const { |
| SkDebugf("Budget: %d items %d bytes\n", fMaxCount, fMaxBytes); |
| SkDebugf( |
| - "\t\tEntry Count: current %d (%d budgeted, %d locked, %d scratch %.2g%% full), high %d\n", |
| - fCount, fBudgetedCount, locked, scratch, countUtilization, fHighWaterCount); |
| + "\t\tEntry Count: current %d (%d budgeted, %d wrapped, %d locked, %d scratch %.2g%% full), high %d\n", |
|
egdaniel
2014/11/13 20:47:32
over 100, but not the easiest to make look nice...
bsalomon
2014/11/13 20:53:34
wrapped
|
| + fCount, fBudgetedCount, wrapped, locked, scratch, countUtilization, fHighWaterCount); |
| SkDebugf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full) high %d\n", |
| fBytes, fBudgetedBytes, byteUtilization, fHighWaterBytes); |
| } |