aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrMemoryPool.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2016-01-07 10:12:16 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-07 10:12:17 -0800
commitb7f4b8e94e2414d17eb68a9ceae42b2eea38e604 (patch)
tree0549764ac8dd105224f85febd83ad72c7cd87656 /src/gpu/GrMemoryPool.cpp
parent5423ee17ed5a1becd0aeaa89d8faaaa5e2696cbb (diff)
Add sentinel to GrMemoryPool's block header
Diffstat (limited to 'src/gpu/GrMemoryPool.cpp')
-rw-r--r--src/gpu/GrMemoryPool.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gpu/GrMemoryPool.cpp b/src/gpu/GrMemoryPool.cpp
index 0fd7e90f66..adf46846c8 100644
--- a/src/gpu/GrMemoryPool.cpp
+++ b/src/gpu/GrMemoryPool.cpp
@@ -55,6 +55,7 @@ void* GrMemoryPool::allocate(size_t size) {
fSize += block->fSize;
SkDEBUGCODE(++fAllocBlockCnt);
}
+ SkASSERT(kAssignedMarker == fTail->fBlockSentinal);
SkASSERT(fTail->fFreeSize >= size);
intptr_t ptr = fTail->fCurrPtr;
// We stash a pointer to the block header, just before the allocated space,
@@ -80,6 +81,7 @@ void GrMemoryPool::release(void* p) {
SkASSERT(kAssignedMarker == allocData->fSentinal);
SkDEBUGCODE(allocData->fSentinal = kFreedMarker);
BlockHeader* block = allocData->fHeader;
+ SkASSERT(kAssignedMarker == block->fBlockSentinal);
if (1 == block->fLiveCount) {
// the head block is special, it is reset rather than deleted
if (fHead == block) {
@@ -119,6 +121,7 @@ GrMemoryPool::BlockHeader* GrMemoryPool::CreateBlock(size_t size) {
reinterpret_cast<BlockHeader*>(sk_malloc_throw(paddedSize));
// we assume malloc gives us aligned memory
SkASSERT(!(reinterpret_cast<intptr_t>(block) % kAlignment));
+ SkDEBUGCODE(block->fBlockSentinal = kAssignedMarker);
block->fLiveCount = 0;
block->fFreeSize = size;
block->fCurrPtr = reinterpret_cast<intptr_t>(block) + kHeaderSize;
@@ -128,6 +131,8 @@ GrMemoryPool::BlockHeader* GrMemoryPool::CreateBlock(size_t size) {
}
void GrMemoryPool::DeleteBlock(BlockHeader* block) {
+ SkASSERT(kAssignedMarker == block->fBlockSentinal);
+ SkDEBUGCODE(block->fBlockSentinal = kFreedMarker); // FWIW
sk_free(block);
}
@@ -138,6 +143,7 @@ void GrMemoryPool::validate() {
SkASSERT(block);
int allocCount = 0;
do {
+ SkASSERT(kAssignedMarker == block->fBlockSentinal);
allocCount += block->fLiveCount;
SkASSERT(prev == block->fPrev);
if (prev) {