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

Unified Diff: src/gpu/GrResourceCache2.cpp

Issue 721353002: Allow GPU resources to not be counted against the cache budget. (Closed) Base URL: https://skia.googlesource.com/skia.git@wrap
Patch Set: update Created 6 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 side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698