OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 } | 50 } |
51 | 51 |
52 bool empty() const { return fBytesTotal == fBytesFree; } | 52 bool empty() const { return fBytesTotal == fBytesFree; } |
53 }; | 53 }; |
54 | 54 |
55 /////////////////////////////////////////////////////////////////////////////// | 55 /////////////////////////////////////////////////////////////////////////////// |
56 | 56 |
57 GrAllocPool::GrAllocPool(size_t blockSize) { | 57 GrAllocPool::GrAllocPool(size_t blockSize) { |
58 fBlock = NULL; | 58 fBlock = NULL; |
59 fMinBlockSize = GrMax(blockSize, GrAllocPool_MIN_BLOCK_SIZE); | 59 fMinBlockSize = GrMax(blockSize, GrAllocPool_MIN_BLOCK_SIZE); |
60 GR_DEBUGCODE(fBlocksAllocated = 0;) | 60 SkDEBUGCODE(fBlocksAllocated = 0;) |
61 } | 61 } |
62 | 62 |
63 GrAllocPool::~GrAllocPool() { | 63 GrAllocPool::~GrAllocPool() { |
64 this->reset(); | 64 this->reset(); |
65 } | 65 } |
66 | 66 |
67 void GrAllocPool::reset() { | 67 void GrAllocPool::reset() { |
68 this->validate(); | 68 this->validate(); |
69 | 69 |
70 Block* block = fBlock; | 70 Block* block = fBlock; |
71 while (block) { | 71 while (block) { |
72 Block* next = block->fNext; | 72 Block* next = block->fNext; |
73 GrFree(block); | 73 GrFree(block); |
74 block = next; | 74 block = next; |
75 } | 75 } |
76 fBlock = NULL; | 76 fBlock = NULL; |
77 GR_DEBUGCODE(fBlocksAllocated = 0;) | 77 SkDEBUGCODE(fBlocksAllocated = 0;) |
78 } | 78 } |
79 | 79 |
80 void* GrAllocPool::alloc(size_t size) { | 80 void* GrAllocPool::alloc(size_t size) { |
81 this->validate(); | 81 this->validate(); |
82 | 82 |
83 if (!fBlock || !fBlock->canAlloc(size)) { | 83 if (!fBlock || !fBlock->canAlloc(size)) { |
84 size_t blockSize = GrMax(fMinBlockSize, size); | 84 size_t blockSize = GrMax(fMinBlockSize, size); |
85 fBlock = Block::Create(blockSize, fBlock); | 85 fBlock = Block::Create(blockSize, fBlock); |
86 GR_DEBUGCODE(fBlocksAllocated += 1;) | 86 SkDEBUGCODE(fBlocksAllocated += 1;) |
87 } | 87 } |
88 return fBlock->alloc(size); | 88 return fBlock->alloc(size); |
89 } | 89 } |
90 | 90 |
91 void GrAllocPool::release(size_t bytes) { | 91 void GrAllocPool::release(size_t bytes) { |
92 this->validate(); | 92 this->validate(); |
93 | 93 |
94 while (bytes && NULL != fBlock) { | 94 while (bytes && NULL != fBlock) { |
95 bytes = fBlock->release(bytes); | 95 bytes = fBlock->release(bytes); |
96 if (fBlock->empty()) { | 96 if (fBlock->empty()) { |
97 Block* next = fBlock->fNext; | 97 Block* next = fBlock->fNext; |
98 GrFree(fBlock); | 98 GrFree(fBlock); |
99 fBlock = next; | 99 fBlock = next; |
100 GR_DEBUGCODE(fBlocksAllocated -= 1;) | 100 SkDEBUGCODE(fBlocksAllocated -= 1;) |
101 } | 101 } |
102 } | 102 } |
103 } | 103 } |
104 | 104 |
105 #ifdef SK_DEBUG | 105 #ifdef SK_DEBUG |
106 | 106 |
107 void GrAllocPool::validate() const { | 107 void GrAllocPool::validate() const { |
108 Block* block = fBlock; | 108 Block* block = fBlock; |
109 int count = 0; | 109 int count = 0; |
110 while (block) { | 110 while (block) { |
111 count += 1; | 111 count += 1; |
112 block = block->fNext; | 112 block = block->fNext; |
113 } | 113 } |
114 SkASSERT(fBlocksAllocated == count); | 114 SkASSERT(fBlocksAllocated == count); |
115 } | 115 } |
116 | 116 |
117 #endif | 117 #endif |
OLD | NEW |