Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h |
| diff --git a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h |
| index 04ee218b7d00bf1695dca826e010a9ea0954aef0..ff2efd2b62b32a9dcb8d30af7d669833e5d48d9b 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h |
| +++ b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h |
| @@ -78,6 +78,7 @@ class PLATFORM_EXPORT ImageDecodingStore final { |
| // found. |
| bool LockDecoder(const ImageFrameGenerator*, |
| const SkISize& scaled_size, |
| + ImageDecoder::AlphaOption, |
| ImageDecoder**); |
| void UnlockDecoder(const ImageFrameGenerator*, const ImageDecoder*); |
| void InsertDecoder(const ImageFrameGenerator*, std::unique_ptr<ImageDecoder>); |
| @@ -96,7 +97,9 @@ class PLATFORM_EXPORT ImageDecodingStore final { |
| // Decoder cache entry is identified by: |
| // 1. Pointer to ImageFrameGenerator. |
| // 2. Size of the image. |
| - typedef std::pair<const ImageFrameGenerator*, SkISize> DecoderCacheKey; |
| + // 3. ImageDecoder::AlphaOption |
| + typedef std::tuple<const ImageFrameGenerator*, SkISize, uint8_t> |
| + DecoderCacheKey; |
|
Nico
2017/04/11 15:41:05
Do you have an idea how much this will increase th
msarett1
2017/04/11 20:52:05
I imagine it's very small. I'm just adding a 8 by
|
| // Base class for all cache entries. |
| class CacheEntry : public DoublyLinkedListNode<CacheEntry> { |
| @@ -145,35 +148,43 @@ class PLATFORM_EXPORT ImageDecodingStore final { |
| new DecoderCacheEntry(generator, 0, std::move(decoder))); |
| } |
| - DecoderCacheEntry(const ImageFrameGenerator* generator, |
| - int count, |
| - std::unique_ptr<ImageDecoder> decoder) |
| - : CacheEntry(generator, count), |
| - cached_decoder_(std::move(decoder)), |
| - size_(SkISize::Make(cached_decoder_->DecodedSize().Width(), |
| - cached_decoder_->DecodedSize().Height())) {} |
| - |
| size_t MemoryUsageInBytes() const override { |
| return size_.width() * size_.height() * 4; |
| } |
| CacheType GetType() const override { return kTypeDecoder; } |
| - static DecoderCacheKey MakeCacheKey(const ImageFrameGenerator* generator, |
| - const SkISize& size) { |
| - return std::make_pair(generator, size); |
| + static DecoderCacheKey MakeCacheKey( |
| + const ImageFrameGenerator* generator, |
| + const SkISize& size, |
| + ImageDecoder::AlphaOption alpha_option) { |
| + return std::make_tuple(generator, size, |
| + static_cast<uint8_t>(alpha_option)); |
| } |
| static DecoderCacheKey MakeCacheKey(const ImageFrameGenerator* generator, |
| const ImageDecoder* decoder) { |
| - return std::make_pair(generator, |
| - SkISize::Make(decoder->DecodedSize().Width(), |
| - decoder->DecodedSize().Height())); |
| + return MakeCacheKey(generator, |
| + SkISize::Make(decoder->DecodedSize().Width(), |
| + decoder->DecodedSize().Height()), |
| + decoder->GetAlphaOption()); |
| + } |
| + DecoderCacheKey CacheKey() const { |
| + return MakeCacheKey(generator_, size_, alpha_option_); |
| } |
| - DecoderCacheKey CacheKey() const { return MakeCacheKey(generator_, size_); } |
| ImageDecoder* CachedDecoder() const { return cached_decoder_.get(); } |
| private: |
| + DecoderCacheEntry(const ImageFrameGenerator* generator, |
| + int count, |
| + std::unique_ptr<ImageDecoder> decoder) |
| + : CacheEntry(generator, count), |
| + cached_decoder_(std::move(decoder)), |
| + size_(SkISize::Make(cached_decoder_->DecodedSize().Width(), |
| + cached_decoder_->DecodedSize().Height())), |
| + alpha_option_(cached_decoder_->GetAlphaOption()) {} |
| + |
| std::unique_ptr<ImageDecoder> cached_decoder_; |
| SkISize size_; |
| + ImageDecoder::AlphaOption alpha_option_; |
| }; |
| ImageDecodingStore(); |