Index: src/gpu/GrMemoryPool.cpp |
diff --git a/src/gpu/GrMemoryPool.cpp b/src/gpu/GrMemoryPool.cpp |
index 5009f20152d5d7813956d4539f7e86c21adc7a48..ea64c2994af82dd195b3a22460580ec2eff674b7 100644 |
--- a/src/gpu/GrMemoryPool.cpp |
+++ b/src/gpu/GrMemoryPool.cpp |
@@ -102,6 +102,27 @@ void GrMemoryPool::release(void* p) { |
VALIDATE; |
} |
+void GrMemoryPool::releaseAll() { |
+ VALIDATE; |
+ while (fTail->fPrev) { |
+ BlockHeader* prev = fTail->fPrev; |
+ SkDEBUGCODE(fAllocationCnt -= fTail->fLiveCount); |
+ DeleteBlock(fTail); |
+ fTail = prev; |
+ fTail->fNext = NULL; |
+ } |
+ // now 'free' head block |
+ SkDEBUGCODE(fAllocationCnt -= fHead->fLiveCount); |
+ fHead->fCurrPtr = reinterpret_cast<intptr_t>(fHead) + |
+ kHeaderSize; |
+ fHead->fLiveCount = 0; |
+ fHead->fFreeSize = fPreallocSize; |
+ SkASSERT(0 == fAllocationCnt); |
+ SkASSERT(fHead == fTail); |
+ SkASSERT(0 == fHead->fLiveCount); |
+ VALIDATE; |
+} |
+ |
GrMemoryPool::BlockHeader* GrMemoryPool::CreateBlock(size_t size) { |
BlockHeader* block = |
reinterpret_cast<BlockHeader*>(sk_malloc_throw(size + kHeaderSize)); |