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

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: fix constructor order 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
« no previous file with comments | « src/gpu/GrResourceCache2.h ('k') | tests/ResourceCacheTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrResourceCache2.cpp
diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp
index d5590d0e202b8ab745e024ec70373655569ed137..9764e623292d0755f2de8d7cfdcdbb71494de08f 100644
--- a/src/gpu/GrResourceCache2.cpp
+++ b/src/gpu/GrResourceCache2.cpp
@@ -100,12 +100,12 @@ void GrResourceCache2::insertResource(GrGpuResource* resource) {
size_t size = resource->gpuMemorySize();
++fCount;
- fBytes += resource->gpuMemorySize();
+ fBytes += size;
#if GR_CACHE_STATS
fHighWaterCount = SkTMax(fCount, fHighWaterCount);
fHighWaterBytes = SkTMax(fBytes, fHighWaterBytes);
#endif
- if (!resource->cacheAccess().isWrapped()) {
+ if (resource->cacheAccess().isBudgeted()) {
++fBudgetedCount;
fBudgetedBytes += size;
#if GR_CACHE_STATS
@@ -114,8 +114,7 @@ void GrResourceCache2::insertResource(GrGpuResource* resource) {
#endif
}
if (!resource->cacheAccess().getScratchKey().isNullScratch()) {
- // TODO(bsalomon): Make this assertion possible.
- // SkASSERT(!resource->isWrapped());
+ SkASSERT(!resource->cacheAccess().isWrapped());
fScratchMap.insert(resource->cacheAccess().getScratchKey(), resource);
}
@@ -130,7 +129,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;
}
@@ -187,7 +186,6 @@ public:
if (resource->internalHasRef() || !resource->cacheAccess().isScratch()) {
return false;
}
-
return !fRejectPendingIO || !resource->internalHasPendingIO();
}
@@ -293,7 +291,7 @@ void GrResourceCache2::didChangeGpuMemorySize(const GrGpuResource* resource, siz
#if GR_CACHE_STATS
fHighWaterBytes = SkTMax(fBytes, fHighWaterBytes);
#endif
- if (!resource->cacheAccess().isWrapped()) {
+ if (resource->cacheAccess().isBudgeted()) {
fBudgetedBytes += delta;
#if GR_CACHE_STATS
fBudgetedHighWaterBytes = SkTMax(fBudgetedBytes, fBudgetedHighWaterBytes);
@@ -304,6 +302,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);
@@ -410,7 +428,7 @@ void GrResourceCache2::validate() const {
SkASSERT(!resource->cacheAccess().isWrapped());
}
- if (!resource->cacheAccess().isWrapped()) {
+ if (resource->cacheAccess().isBudgeted()) {
++budgetedCount;
budgetedBytes += resource->gpuMemorySize();
}
@@ -446,6 +464,8 @@ void GrResourceCache2::printStats() const {
int locked = 0;
int scratch = 0;
+ int wrapped = 0;
+ size_t unbudgetedSize = 0;
ResourceList::Iter iter;
GrGpuResource* resource = iter.init(fResources, ResourceList::Iter::kHead_IterStart);
@@ -457,17 +477,23 @@ void GrResourceCache2::printStats() const {
if (resource->cacheAccess().isScratch()) {
++scratch;
}
+ if (resource->cacheAccess().isWrapped()) {
+ ++wrapped;
+ }
+ if (!resource->cacheAccess().isBudgeted()) {
+ unbudgetedSize += resource->gpuMemorySize();
+ }
}
float countUtilization = (100.f * fBudgetedCount) / fMaxCount;
float byteUtilization = (100.f * fBudgetedBytes) / fMaxBytes;
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);
- SkDebugf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full) high %d\n",
- fBytes, fBudgetedBytes, byteUtilization, fHighWaterBytes);
+ SkDebugf("\t\tEntry Count: current %d"
+ " (%d budgeted, %d wrapped, %d locked, %d scratch %.2g%% full), high %d\n",
+ fCount, fBudgetedCount, wrapped, locked, scratch, countUtilization, fHighWaterCount);
+ SkDebugf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full, %d unbudgeted) high %d\n",
+ fBytes, fBudgetedBytes, byteUtilization, unbudgetedSize, fHighWaterBytes);
}
#endif
« no previous file with comments | « src/gpu/GrResourceCache2.h ('k') | tests/ResourceCacheTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698