| Index: third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
|
| index 1cbc8650d9b717f040ff0f0e9e8dae5b0bfe531a..933023eeb1171a19c7a7b7e4938d58f9a630b070 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
|
| @@ -130,12 +130,14 @@ ImageFrameGenerator::~ImageFrameGenerator() {
|
| ImageDecodingStore::Instance().RemoveCacheIndexedByGenerator(this);
|
| }
|
|
|
| -bool ImageFrameGenerator::DecodeAndScale(SegmentReader* data,
|
| - bool all_data_received,
|
| - size_t index,
|
| - const SkImageInfo& info,
|
| - void* pixels,
|
| - size_t row_bytes) {
|
| +bool ImageFrameGenerator::DecodeAndScale(
|
| + SegmentReader* data,
|
| + bool all_data_received,
|
| + size_t index,
|
| + const SkImageInfo& info,
|
| + void* pixels,
|
| + size_t row_bytes,
|
| + ImageDecoder::AlphaOption alpha_option) {
|
| if (decode_failed_)
|
| return false;
|
|
|
| @@ -151,8 +153,9 @@ bool ImageFrameGenerator::DecodeAndScale(SegmentReader* data,
|
| // returning (i.e. a pointer to |pixels|) and therefore 2) should not live
|
| // longer than the call to the current method.
|
| ExternalMemoryAllocator external_allocator(info, pixels, row_bytes);
|
| - SkBitmap bitmap = TryToResumeDecode(data, all_data_received, index,
|
| - scaled_size, &external_allocator);
|
| + SkBitmap bitmap =
|
| + TryToResumeDecode(data, all_data_received, index, scaled_size,
|
| + &external_allocator, alpha_option);
|
| DCHECK(external_allocator.unique()); // Verify we have the only ref-count.
|
|
|
| if (bitmap.isNull())
|
| @@ -214,7 +217,8 @@ SkBitmap ImageFrameGenerator::TryToResumeDecode(
|
| bool all_data_received,
|
| size_t index,
|
| const SkISize& scaled_size,
|
| - SkBitmap::Allocator* allocator) {
|
| + SkBitmap::Allocator* allocator,
|
| + ImageDecoder::AlphaOption alpha_option) {
|
| TRACE_EVENT1("blink", "ImageFrameGenerator::tryToResumeDecode", "frame index",
|
| static_cast<int>(index));
|
|
|
| @@ -222,13 +226,13 @@ SkBitmap ImageFrameGenerator::TryToResumeDecode(
|
|
|
| // Lock the mutex, so only one thread can use the decoder at once.
|
| MutexLocker lock(decode_mutex_);
|
| - const bool resume_decoding =
|
| - ImageDecodingStore::Instance().LockDecoder(this, full_size_, &decoder);
|
| + const bool resume_decoding = ImageDecodingStore::Instance().LockDecoder(
|
| + this, full_size_, alpha_option, &decoder);
|
| DCHECK(!resume_decoding || decoder);
|
|
|
| SkBitmap full_size_image;
|
| bool complete = Decode(data, all_data_received, index, &decoder,
|
| - &full_size_image, allocator);
|
| + &full_size_image, allocator, alpha_option);
|
|
|
| if (!decoder)
|
| return SkBitmap();
|
| @@ -293,7 +297,8 @@ bool ImageFrameGenerator::Decode(SegmentReader* data,
|
| size_t index,
|
| ImageDecoder** decoder,
|
| SkBitmap* bitmap,
|
| - SkBitmap::Allocator* allocator) {
|
| + SkBitmap::Allocator* allocator,
|
| + ImageDecoder::AlphaOption alpha_option) {
|
| #if DCHECK_IS_ON()
|
| DCHECK(decode_mutex_.Locked());
|
| #endif
|
| @@ -310,8 +315,7 @@ bool ImageFrameGenerator::Decode(SegmentReader* data,
|
| *decoder = image_decoder_factory_->Create().release();
|
|
|
| if (!*decoder) {
|
| - *decoder = ImageDecoder::Create(data, all_data_received,
|
| - ImageDecoder::kAlphaPremultiplied,
|
| + *decoder = ImageDecoder::Create(data, all_data_received, alpha_option,
|
| decoder_color_behavior_)
|
| .release();
|
| // The newly created decoder just grabbed the data. No need to reset it.
|
|
|