OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 const ImageFrameGenerator* m_generator; | 190 const ImageFrameGenerator* m_generator; |
191 int m_useCount; | 191 int m_useCount; |
192 bool m_isDiscardable; | 192 bool m_isDiscardable; |
193 bool m_isAccountingEnabled; | 193 bool m_isAccountingEnabled; |
194 | 194 |
195 private: | 195 private: |
196 CacheEntry* m_prev; | 196 CacheEntry* m_prev; |
197 CacheEntry* m_next; | 197 CacheEntry* m_next; |
198 }; | 198 }; |
199 | 199 |
200 class ImageCacheEntry : public CacheEntry { | 200 class ImageCacheEntry FINAL : public CacheEntry { |
201 public: | 201 public: |
202 static PassOwnPtr<ImageCacheEntry> createAndUse(const ImageFrameGenerato
r* generator, PassOwnPtr<ScaledImageFragment> image) | 202 static PassOwnPtr<ImageCacheEntry> createAndUse(const ImageFrameGenerato
r* generator, PassOwnPtr<ScaledImageFragment> image) |
203 { | 203 { |
204 return adoptPtr(new ImageCacheEntry(generator, 1, image)); | 204 return adoptPtr(new ImageCacheEntry(generator, 1, image)); |
205 } | 205 } |
206 | 206 |
207 ImageCacheEntry(const ImageFrameGenerator* generator, int count, PassOwn
Ptr<ScaledImageFragment> image) | 207 ImageCacheEntry(const ImageFrameGenerator* generator, int count, PassOwn
Ptr<ScaledImageFragment> image) |
208 : CacheEntry(generator, count, DiscardablePixelRef::isDiscardable(im
age->bitmap().pixelRef())) | 208 : CacheEntry(generator, count, DiscardablePixelRef::isDiscardable(im
age->bitmap().pixelRef())) |
209 , m_cachedImage(image) | 209 , m_cachedImage(image) |
210 { | 210 { |
211 } | 211 } |
212 | 212 |
213 // FIXME: getSafeSize() returns size in bytes truncated to a 32-bits int
eger. | 213 // FIXME: getSafeSize() returns size in bytes truncated to a 32-bits int
eger. |
214 // Find a way to get the size in 64-bits. | 214 // Find a way to get the size in 64-bits. |
215 virtual size_t memoryUsageInBytes() const { return cachedImage()->bitmap
().getSafeSize(); } | 215 virtual size_t memoryUsageInBytes() const OVERRIDE { return cachedImage(
)->bitmap().getSafeSize(); } |
216 virtual CacheType type() const { return TypeImage; } | 216 virtual CacheType type() const OVERRIDE { return TypeImage; } |
217 | 217 |
218 static ImageCacheKey makeCacheKey(const ImageFrameGenerator* generator,
const SkISize& size, size_t index, size_t generation) | 218 static ImageCacheKey makeCacheKey(const ImageFrameGenerator* generator,
const SkISize& size, size_t index, size_t generation) |
219 { | 219 { |
220 return std::make_pair(std::make_pair(generator, size), std::make_pai
r(index, generation)); | 220 return std::make_pair(std::make_pair(generator, size), std::make_pai
r(index, generation)); |
221 } | 221 } |
222 ImageCacheKey cacheKey() const { return makeCacheKey(m_generator, m_cach
edImage->scaledSize(), m_cachedImage->index(), m_cachedImage->generation()); } | 222 ImageCacheKey cacheKey() const { return makeCacheKey(m_generator, m_cach
edImage->scaledSize(), m_cachedImage->index(), m_cachedImage->generation()); } |
223 const ScaledImageFragment* cachedImage() const { return m_cachedImage.ge
t(); } | 223 const ScaledImageFragment* cachedImage() const { return m_cachedImage.ge
t(); } |
224 ScaledImageFragment* cachedImage() { return m_cachedImage.get(); } | 224 ScaledImageFragment* cachedImage() { return m_cachedImage.get(); } |
225 | 225 |
226 private: | 226 private: |
227 OwnPtr<ScaledImageFragment> m_cachedImage; | 227 OwnPtr<ScaledImageFragment> m_cachedImage; |
228 }; | 228 }; |
229 | 229 |
230 class DecoderCacheEntry : public CacheEntry { | 230 class DecoderCacheEntry FINAL : public CacheEntry { |
231 public: | 231 public: |
232 static PassOwnPtr<DecoderCacheEntry> create(const ImageFrameGenerator* g
enerator, PassOwnPtr<ImageDecoder> decoder, bool isDiscardable) | 232 static PassOwnPtr<DecoderCacheEntry> create(const ImageFrameGenerator* g
enerator, PassOwnPtr<ImageDecoder> decoder, bool isDiscardable) |
233 { | 233 { |
234 return adoptPtr(new DecoderCacheEntry(generator, 0, decoder, isDisca
rdable)); | 234 return adoptPtr(new DecoderCacheEntry(generator, 0, decoder, isDisca
rdable)); |
235 } | 235 } |
236 | 236 |
237 DecoderCacheEntry(const ImageFrameGenerator* generator, int count, PassO
wnPtr<ImageDecoder> decoder, bool isDiscardable) | 237 DecoderCacheEntry(const ImageFrameGenerator* generator, int count, PassO
wnPtr<ImageDecoder> decoder, bool isDiscardable) |
238 : CacheEntry(generator, count, isDiscardable) | 238 : CacheEntry(generator, count, isDiscardable) |
239 , m_cachedDecoder(decoder) | 239 , m_cachedDecoder(decoder) |
240 , m_size(SkISize::Make(m_cachedDecoder->decodedSize().width(), m_cac
hedDecoder->decodedSize().height())) | 240 , m_size(SkISize::Make(m_cachedDecoder->decodedSize().width(), m_cac
hedDecoder->decodedSize().height())) |
241 { | 241 { |
242 } | 242 } |
243 | 243 |
244 virtual size_t memoryUsageInBytes() const { return m_size.width() * m_si
ze.height() * 4; } | 244 virtual size_t memoryUsageInBytes() const OVERRIDE { return m_size.width
() * m_size.height() * 4; } |
245 virtual CacheType type() const { return TypeDecoder; } | 245 virtual CacheType type() const OVERRIDE { return TypeDecoder; } |
246 | 246 |
247 static DecoderCacheKey makeCacheKey(const ImageFrameGenerator* generator
, const SkISize& size) | 247 static DecoderCacheKey makeCacheKey(const ImageFrameGenerator* generator
, const SkISize& size) |
248 { | 248 { |
249 return std::make_pair(generator, size); | 249 return std::make_pair(generator, size); |
250 } | 250 } |
251 static DecoderCacheKey makeCacheKey(const ImageFrameGenerator* generator
, const ImageDecoder* decoder) | 251 static DecoderCacheKey makeCacheKey(const ImageFrameGenerator* generator
, const ImageDecoder* decoder) |
252 { | 252 { |
253 return std::make_pair(generator, SkISize::Make(decoder->decodedSize(
).width(), decoder->decodedSize().height())); | 253 return std::make_pair(generator, SkISize::Make(decoder->decodedSize(
).width(), decoder->decodedSize().height())); |
254 } | 254 } |
255 DecoderCacheKey cacheKey() const { return makeCacheKey(m_generator, m_si
ze); } | 255 DecoderCacheKey cacheKey() const { return makeCacheKey(m_generator, m_si
ze); } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 // m_cacheLimitInBytes | 333 // m_cacheLimitInBytes |
334 // m_memoryUsageInBytes | 334 // m_memoryUsageInBytes |
335 // This mutex also protects calls to underlying skBitmap's | 335 // This mutex also protects calls to underlying skBitmap's |
336 // lockPixels()/unlockPixels() as they are not threadsafe. | 336 // lockPixels()/unlockPixels() as they are not threadsafe. |
337 Mutex m_mutex; | 337 Mutex m_mutex; |
338 }; | 338 }; |
339 | 339 |
340 } // namespace WebCore | 340 } // namespace WebCore |
341 | 341 |
342 #endif | 342 #endif |
OLD | NEW |