Revert r4287. Large numbers of textures created by random gradients can cause poor driver performance (at least on Mac)
BUG=670
git-svn-id: http://skia.googlecode.com/svn/trunk@4306 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrResourceCache.cpp b/src/gpu/GrResourceCache.cpp
index 8c93971..2ad5d6f 100644
--- a/src/gpu/GrResourceCache.cpp
+++ b/src/gpu/GrResourceCache.cpp
@@ -34,8 +34,9 @@
///////////////////////////////////////////////////////////////////////////////
-GrResourceCache::GrResourceCache(size_t maxBytes) {
- fMaxBytes = maxBytes;
+GrResourceCache::GrResourceCache(int maxCount, size_t maxBytes) :
+ fMaxCount(maxCount),
+ fMaxBytes(maxBytes) {
fEntryCount = 0;
fUnlockedEntryCount = 0;
fEntryBytes = 0;
@@ -52,9 +53,19 @@
this->removeAll();
}
-void GrResourceCache::setBudget(size_t maxResourceBytes) {
- bool smaller = maxResourceBytes < fMaxBytes;
+void GrResourceCache::getLimits(int* maxResources, size_t* maxResourceBytes) const{
+ if (maxResources) {
+ *maxResources = fMaxCount;
+ }
+ if (maxResourceBytes) {
+ *maxResourceBytes = fMaxBytes;
+ }
+}
+void GrResourceCache::setLimits(int maxResources, size_t maxResourceBytes) {
+ bool smaller = (maxResources < fMaxCount) || (maxResourceBytes < fMaxBytes);
+
+ fMaxCount = maxResources;
fMaxBytes = maxResourceBytes;
if (smaller) {
@@ -233,7 +244,6 @@
fClientDetachedCount -= 1;
fEntryCount -= 1;
size_t size = entry->resource()->sizeInBytes();
- GrAssert(size > 0);
fClientDetachedBytes -= size;
fEntryBytes -= size;
}
@@ -272,7 +282,7 @@
GrResourceEntry* entry = fTail;
while (entry && fUnlockedEntryCount) {
GrAutoResourceCacheValidate atcv(this);
- if (fEntryBytes <= fMaxBytes) {
+ if (fEntryCount <= fMaxCount && fEntryBytes <= fMaxBytes) {
withinBudget = true;
break;
}
@@ -308,7 +318,9 @@
// entry out. Instead change the budget and purge.
int savedMaxBytes = fMaxBytes;
- fMaxBytes = 0;
+ int savedMaxCount = fMaxCount;
+ fMaxBytes = (size_t) -1;
+ fMaxCount = 0;
this->purgeAsNeeded();
#if GR_DEBUG
@@ -325,6 +337,7 @@
#endif
fMaxBytes = savedMaxBytes;
+ fMaxCount = savedMaxCount;
}
///////////////////////////////////////////////////////////////////////////////