| Index: src/gpu/GrMemoryPool.cpp
|
| diff --git a/src/gpu/GrMemoryPool.cpp b/src/gpu/GrMemoryPool.cpp
|
| index 1e005857b226a6932199695c6e4548ceadf24db9..0fd7e90f6671dca1be2e95f5f28a98be2ffe7a5f 100644
|
| --- a/src/gpu/GrMemoryPool.cpp
|
| +++ b/src/gpu/GrMemoryPool.cpp
|
| @@ -40,8 +40,8 @@ GrMemoryPool::~GrMemoryPool() {
|
|
|
| void* GrMemoryPool::allocate(size_t size) {
|
| VALIDATE;
|
| - size = GrSizeAlignUp(size, kAlignment);
|
| size += kPerAllocPad;
|
| + size = GrSizeAlignUp(size, kAlignment);
|
| if (fTail->fFreeSize < size) {
|
| size_t blockSize = size;
|
| blockSize = SkTMax<size_t>(blockSize, fMinAllocSize);
|
| @@ -59,7 +59,9 @@ void* GrMemoryPool::allocate(size_t size) {
|
| intptr_t ptr = fTail->fCurrPtr;
|
| // We stash a pointer to the block header, just before the allocated space,
|
| // so that we can decrement the live count on delete in constant time.
|
| - *reinterpret_cast<BlockHeader**>(ptr) = fTail;
|
| + AllocHeader* allocData = reinterpret_cast<AllocHeader*>(ptr);
|
| + SkDEBUGCODE(allocData->fSentinal = kAssignedMarker);
|
| + allocData->fHeader = fTail;
|
| ptr += kPerAllocPad;
|
| fTail->fPrevPtr = fTail->fCurrPtr;
|
| fTail->fCurrPtr += size;
|
| @@ -74,7 +76,10 @@ void* GrMemoryPool::allocate(size_t size) {
|
| void GrMemoryPool::release(void* p) {
|
| VALIDATE;
|
| intptr_t ptr = reinterpret_cast<intptr_t>(p) - kPerAllocPad;
|
| - BlockHeader* block = *reinterpret_cast<BlockHeader**>(ptr);
|
| + AllocHeader* allocData = reinterpret_cast<AllocHeader*>(ptr);
|
| + SkASSERT(kAssignedMarker == allocData->fSentinal);
|
| + SkDEBUGCODE(allocData->fSentinal = kFreedMarker);
|
| + BlockHeader* block = allocData->fHeader;
|
| if (1 == block->fLiveCount) {
|
| // the head block is special, it is reset rather than deleted
|
| if (fHead == block) {
|
| @@ -159,8 +164,12 @@ void GrMemoryPool::validate() {
|
| SkASSERT(ptrOffset == kHeaderSize);
|
| SkASSERT(userStart == block->fCurrPtr);
|
| } else {
|
| - SkASSERT(block == *reinterpret_cast<BlockHeader**>(userStart));
|
| + AllocHeader* allocData = reinterpret_cast<AllocHeader*>(userStart);
|
| + SkASSERT(allocData->fSentinal == kAssignedMarker ||
|
| + allocData->fSentinal == kFreedMarker);
|
| + SkASSERT(block == allocData->fHeader);
|
| }
|
| +
|
| prev = block;
|
| } while ((block = block->fNext));
|
| SkASSERT(allocCount == fAllocationCnt);
|
|
|