| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkBitmapHeap_DEFINED | 8 #ifndef SkBitmapHeap_DEFINED |
| 9 #define SkBitmapHeap_DEFINED | 9 #define SkBitmapHeap_DEFINED |
| 10 | 10 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 * @param heapSize The maximum size of the heap. Because of the sequential
limitation imposed | 109 * @param heapSize The maximum size of the heap. Because of the sequential
limitation imposed |
| 110 * by our LRU implementation we can guarantee that the heap will never gro
w beyond this size. | 110 * by our LRU implementation we can guarantee that the heap will never gro
w beyond this size. |
| 111 */ | 111 */ |
| 112 SkBitmapHeap(ExternalStorage* externalStorage, int32_t heapSize = UNLIMITED_
SIZE); | 112 SkBitmapHeap(ExternalStorage* externalStorage, int32_t heapSize = UNLIMITED_
SIZE); |
| 113 | 113 |
| 114 virtual ~SkBitmapHeap(); | 114 virtual ~SkBitmapHeap(); |
| 115 | 115 |
| 116 /** | 116 /** |
| 117 * Retrieves the bitmap from the specified slot in the heap | 117 * Retrieves the bitmap from the specified slot in the heap |
| 118 * | 118 * |
| 119 * @return The bitmap located at that slot or NULL if external storage is b
eing used. | 119 * @return The bitmap located at that slot or nullptr if external storage i
s being used. |
| 120 */ | 120 */ |
| 121 SkBitmap* getBitmap(int32_t slot) const override { | 121 SkBitmap* getBitmap(int32_t slot) const override { |
| 122 SkASSERT(fExternalStorage == NULL); | 122 SkASSERT(fExternalStorage == nullptr); |
| 123 SkBitmapHeapEntry* entry = getEntry(slot); | 123 SkBitmapHeapEntry* entry = getEntry(slot); |
| 124 if (entry) { | 124 if (entry) { |
| 125 return &entry->fBitmap; | 125 return &entry->fBitmap; |
| 126 } | 126 } |
| 127 return NULL; | 127 return nullptr; |
| 128 } | 128 } |
| 129 | 129 |
| 130 /** | 130 /** |
| 131 * Retrieves the bitmap from the specified slot in the heap | 131 * Retrieves the bitmap from the specified slot in the heap |
| 132 * | 132 * |
| 133 * @return The bitmap located at that slot or NULL if external storage is b
eing used. | 133 * @return The bitmap located at that slot or nullptr if external storage i
s being used. |
| 134 */ | 134 */ |
| 135 void releaseRef(int32_t slot) override { | 135 void releaseRef(int32_t slot) override { |
| 136 SkASSERT(fExternalStorage == NULL); | 136 SkASSERT(fExternalStorage == nullptr); |
| 137 if (fOwnerCount != IGNORE_OWNERS) { | 137 if (fOwnerCount != IGNORE_OWNERS) { |
| 138 SkBitmapHeapEntry* entry = getEntry(slot); | 138 SkBitmapHeapEntry* entry = getEntry(slot); |
| 139 if (entry) { | 139 if (entry) { |
| 140 entry->releaseRef(); | 140 entry->releaseRef(); |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 | 144 |
| 145 /** | 145 /** |
| 146 * Inserts a bitmap into the heap. The stored version of bitmap is guarantee
d to be immutable | 146 * Inserts a bitmap into the heap. The stored version of bitmap is guarantee
d to be immutable |
| 147 * and is not dependent on the lifecycle of the provided bitmap. | 147 * and is not dependent on the lifecycle of the provided bitmap. |
| 148 * | 148 * |
| 149 * @param bitmap the bitmap to be inserted into the heap | 149 * @param bitmap the bitmap to be inserted into the heap |
| 150 * @return the slot in the heap where the bitmap is stored or INVALID_SLOT
if the bitmap could | 150 * @return the slot in the heap where the bitmap is stored or INVALID_SLOT
if the bitmap could |
| 151 * not be added to the heap. If it was added the slot will remain v
alid... | 151 * not be added to the heap. If it was added the slot will remain v
alid... |
| 152 * (1) indefinitely if no owner count has been specified. | 152 * (1) indefinitely if no owner count has been specified. |
| 153 * (2) until all owners have called releaseRef on the appropriate
SkBitmapHeapEntry* | 153 * (2) until all owners have called releaseRef on the appropriate
SkBitmapHeapEntry* |
| 154 */ | 154 */ |
| 155 int32_t insert(const SkBitmap& bitmap); | 155 int32_t insert(const SkBitmap& bitmap); |
| 156 | 156 |
| 157 /** | 157 /** |
| 158 * Retrieves an entry from the heap at a given slot. | 158 * Retrieves an entry from the heap at a given slot. |
| 159 * | 159 * |
| 160 * @param slot the slot in the heap where a bitmap was stored. | 160 * @param slot the slot in the heap where a bitmap was stored. |
| 161 * @return a SkBitmapHeapEntry that wraps the bitmap or NULL if external st
orage is used. | 161 * @return a SkBitmapHeapEntry that wraps the bitmap or nullptr if external
storage is used. |
| 162 */ | 162 */ |
| 163 SkBitmapHeapEntry* getEntry(int32_t slot) const { | 163 SkBitmapHeapEntry* getEntry(int32_t slot) const { |
| 164 SkASSERT(slot <= fStorage.count()); | 164 SkASSERT(slot <= fStorage.count()); |
| 165 if (fExternalStorage != NULL) { | 165 if (fExternalStorage != nullptr) { |
| 166 return NULL; | 166 return nullptr; |
| 167 } | 167 } |
| 168 return fStorage[slot]; | 168 return fStorage[slot]; |
| 169 } | 169 } |
| 170 | 170 |
| 171 /** | 171 /** |
| 172 * Returns a count of the number of items currently in the heap | 172 * Returns a count of the number of items currently in the heap |
| 173 */ | 173 */ |
| 174 int count() const { | 174 int count() const { |
| 175 SkASSERT(fExternalStorage != NULL || | 175 SkASSERT(fExternalStorage != nullptr || |
| 176 fStorage.count() - fUnusedSlots.count() == fLookupTable.count()
); | 176 fStorage.count() - fUnusedSlots.count() == fLookupTable.count()
); |
| 177 return fLookupTable.count(); | 177 return fLookupTable.count(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 /** | 180 /** |
| 181 * Returns the total number of bytes allocated by the bitmaps in the heap | 181 * Returns the total number of bytes allocated by the bitmaps in the heap |
| 182 */ | 182 */ |
| 183 size_t bytesAllocated() const { | 183 size_t bytesAllocated() const { |
| 184 return fBytesAllocated; | 184 return fBytesAllocated; |
| 185 } | 185 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 208 */ | 208 */ |
| 209 void endAddingOwnersDeferral(bool add); | 209 void endAddingOwnersDeferral(bool add); |
| 210 | 210 |
| 211 private: | 211 private: |
| 212 struct LookupEntry { | 212 struct LookupEntry { |
| 213 LookupEntry(const SkBitmap& bm) | 213 LookupEntry(const SkBitmap& bm) |
| 214 : fGenerationId(bm.getGenerationID()) | 214 : fGenerationId(bm.getGenerationID()) |
| 215 , fPixelOrigin(bm.pixelRefOrigin()) | 215 , fPixelOrigin(bm.pixelRefOrigin()) |
| 216 , fWidth(bm.width()) | 216 , fWidth(bm.width()) |
| 217 , fHeight(bm.height()) | 217 , fHeight(bm.height()) |
| 218 , fMoreRecentlyUsed(NULL) | 218 , fMoreRecentlyUsed(nullptr) |
| 219 , fLessRecentlyUsed(NULL){} | 219 , fLessRecentlyUsed(nullptr){} |
| 220 | 220 |
| 221 const uint32_t fGenerationId; // SkPixelRef GenerationID. | 221 const uint32_t fGenerationId; // SkPixelRef GenerationID. |
| 222 const SkIPoint fPixelOrigin; | 222 const SkIPoint fPixelOrigin; |
| 223 const uint32_t fWidth; | 223 const uint32_t fWidth; |
| 224 const uint32_t fHeight; | 224 const uint32_t fHeight; |
| 225 | 225 |
| 226 // TODO: Generalize the LRU caching mechanism | 226 // TODO: Generalize the LRU caching mechanism |
| 227 LookupEntry* fMoreRecentlyUsed; | 227 LookupEntry* fMoreRecentlyUsed; |
| 228 LookupEntry* fLessRecentlyUsed; | 228 LookupEntry* fLessRecentlyUsed; |
| 229 | 229 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 253 * in the lookup table is populated with the entry from the he
ap storage. | 253 * in the lookup table is populated with the entry from the he
ap storage. |
| 254 */ | 254 */ |
| 255 int findInLookupTable(const LookupEntry& key, SkBitmapHeapEntry** entry); | 255 int findInLookupTable(const LookupEntry& key, SkBitmapHeapEntry** entry); |
| 256 | 256 |
| 257 LookupEntry* findEntryToReplace(const SkBitmap& replacement); | 257 LookupEntry* findEntryToReplace(const SkBitmap& replacement); |
| 258 bool copyBitmap(const SkBitmap& originalBitmap, SkBitmap& copiedBitmap); | 258 bool copyBitmap(const SkBitmap& originalBitmap, SkBitmap& copiedBitmap); |
| 259 | 259 |
| 260 /** | 260 /** |
| 261 * Remove a LookupEntry from the LRU, in preparation for either deleting or
appending as most | 261 * Remove a LookupEntry from the LRU, in preparation for either deleting or
appending as most |
| 262 * recent. Points the LookupEntry's old neighbors at each other, and sets fL
eastRecentlyUsed | 262 * recent. Points the LookupEntry's old neighbors at each other, and sets fL
eastRecentlyUsed |
| 263 * (if there is still an entry left). Sets LookupEntry's fMoreRecentlyUsed t
o NULL and leaves | 263 * (if there is still an entry left). Sets LookupEntry's fMoreRecentlyUsed t
o nullptr and leaves |
| 264 * its fLessRecentlyUsed unmodified. | 264 * its fLessRecentlyUsed unmodified. |
| 265 */ | 265 */ |
| 266 void removeFromLRU(LookupEntry* entry); | 266 void removeFromLRU(LookupEntry* entry); |
| 267 | 267 |
| 268 /** | 268 /** |
| 269 * Append a LookupEntry to the end of the LRU cache, marking it as the most | 269 * Append a LookupEntry to the end of the LRU cache, marking it as the most |
| 270 * recently used. Assumes that the LookupEntry is already in fLookupTable, | 270 * recently used. Assumes that the LookupEntry is already in fLookupTable, |
| 271 * but is not in the LRU cache. If it is in the cache, removeFromLRU should | 271 * but is not in the LRU cache. If it is in the cache, removeFromLRU should |
| 272 * be called first. | 272 * be called first. |
| 273 */ | 273 */ |
| (...skipping 16 matching lines...) Expand all Loading... |
| 290 const int32_t fOwnerCount; | 290 const int32_t fOwnerCount; |
| 291 size_t fBytesAllocated; | 291 size_t fBytesAllocated; |
| 292 | 292 |
| 293 bool fDeferAddingOwners; | 293 bool fDeferAddingOwners; |
| 294 SkTDArray<int> fDeferredEntries; | 294 SkTDArray<int> fDeferredEntries; |
| 295 | 295 |
| 296 typedef SkBitmapHeapReader INHERITED; | 296 typedef SkBitmapHeapReader INHERITED; |
| 297 }; | 297 }; |
| 298 | 298 |
| 299 #endif // SkBitmapHeap_DEFINED | 299 #endif // SkBitmapHeap_DEFINED |
| OLD | NEW |