Index: src/gpu/GrTextBlobCache.h |
diff --git a/src/gpu/GrTextBlobCache.h b/src/gpu/GrTextBlobCache.h |
index 4c9cb14000e7c1642177bea8b185bc37898e4ac7..14e6e3cdad973923da2364a716693c9c1a915d10 100644 |
--- a/src/gpu/GrTextBlobCache.h |
+++ b/src/gpu/GrTextBlobCache.h |
@@ -23,7 +23,8 @@ public: |
GrTextBlobCache(PFOverBudgetCB cb, void* data) |
: fPool(kPreAllocSize, kMinGrowthSize) |
, fCallback(cb) |
- , fData(data) { |
+ , fData(data) |
+ , fBudget(kDefaultBudget) { |
SkASSERT(cb && data); |
} |
~GrTextBlobCache(); |
@@ -82,12 +83,12 @@ public: |
fBlobList.addToHead(blob); |
// If we are overbudget, then unref until we are below budget again |
- if (fPool.size() > kBudget) { |
+ if (fPool.size() > fBudget) { |
BitmapBlobList::Iter iter; |
iter.init(fBlobList, BitmapBlobList::Iter::kTail_IterStart); |
GrAtlasTextBlob* lruBlob = iter.get(); |
SkASSERT(lruBlob); |
- while (fPool.size() > kBudget && (lruBlob = iter.get()) && lruBlob != blob) { |
+ while (fPool.size() > fBudget && (lruBlob = iter.get()) && lruBlob != blob) { |
fCache.remove(lruBlob->fKey); |
// Backup the iterator before removing and unrefing the blob |
@@ -103,8 +104,8 @@ public: |
(*fCallback)(fData); |
} |
-#ifdef SK_DEBUG |
- if (fPool.size() > kBudget) { |
+#ifdef SPEW_BUDGET_MESSAGE |
+ if (fPool.size() > fBudget) { |
SkDebugf("Single textblob is larger than our whole budget"); |
} |
#endif |
@@ -130,6 +131,8 @@ public: |
} |
} |
+ void setBudget(size_t budget) { fBudget = budget; } |
+ |
private: |
typedef SkTInternalLList<GrAtlasTextBlob> BitmapBlobList; |
@@ -137,12 +140,13 @@ private: |
// based off of the largest cached textblob I have seen in the skps(a couple of kilobytes). |
static const int kPreAllocSize = 1 << 17; |
static const int kMinGrowthSize = 1 << 17; |
- static const int kBudget = 1 << 22; |
+ static const int kDefaultBudget = 1 << 22; |
BitmapBlobList fBlobList; |
SkTDynamicHash<GrAtlasTextBlob, GrAtlasTextBlob::Key> fCache; |
GrMemoryPool fPool; |
PFOverBudgetCB fCallback; |
void* fData; |
+ size_t fBudget; |
}; |
#endif |