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); |
} |