| Index: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| index 11944420d2e5e960756c96732004e4eb94f8684b..e563f918bae4a4432ccd3aab6f68f0df775ec38b 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| @@ -128,15 +128,7 @@ sk_sp<SkImage> DeferredImageDecoder::CreateFrameAtIndex(size_t index) {
|
| }
|
|
|
| PassRefPtr<SharedBuffer> DeferredImageDecoder::Data() {
|
| - if (!rw_buffer_)
|
| - return nullptr;
|
| - sk_sp<SkROBuffer> ro_buffer(rw_buffer_->makeROBufferSnapshot());
|
| - RefPtr<SharedBuffer> shared_buffer = SharedBuffer::Create();
|
| - SkROBuffer::Iter it(ro_buffer.get());
|
| - do {
|
| - shared_buffer->Append(static_cast<const char*>(it.data()), it.size());
|
| - } while (it.next());
|
| - return shared_buffer.Release();
|
| + return buffer_;
|
| }
|
|
|
| void DeferredImageDecoder::SetData(PassRefPtr<SharedBuffer> data,
|
| @@ -144,28 +136,17 @@ void DeferredImageDecoder::SetData(PassRefPtr<SharedBuffer> data,
|
| SetDataInternal(std::move(data), all_data_received, true);
|
| }
|
|
|
| -void DeferredImageDecoder::SetDataInternal(RefPtr<SharedBuffer> data,
|
| +void DeferredImageDecoder::SetDataInternal(PassRefPtr<SharedBuffer> data,
|
| bool all_data_received,
|
| bool push_data_to_decoder) {
|
| + buffer_ = std::move(data);
|
| +
|
| if (actual_decoder_) {
|
| all_data_received_ = all_data_received;
|
| if (push_data_to_decoder)
|
| - actual_decoder_->SetData(data, all_data_received);
|
| + actual_decoder_->SetData(buffer_, all_data_received);
|
| PrepareLazyDecodedFrames();
|
| }
|
| -
|
| - if (frame_generator_) {
|
| - if (!rw_buffer_)
|
| - rw_buffer_ = WTF::WrapUnique(new SkRWBuffer(data->size()));
|
| -
|
| - const char* segment = 0;
|
| - for (size_t length = data->GetSomeData(segment, rw_buffer_->size()); length;
|
| - length = data->GetSomeData(segment, rw_buffer_->size())) {
|
| - DCHECK_GE(data->size(), rw_buffer_->size() + length);
|
| - const size_t remaining = data->size() - rw_buffer_->size() - length;
|
| - rw_buffer_->append(segment, length, remaining);
|
| - }
|
| - }
|
| }
|
|
|
| bool DeferredImageDecoder::IsSizeAvailable() {
|
| @@ -316,9 +297,8 @@ sk_sp<SkImage> DeferredImageDecoder::CreateFrameImageAtIndex(
|
| DCHECK_GT(decoded_size.width(), 0);
|
| DCHECK_GT(decoded_size.height(), 0);
|
|
|
| - sk_sp<SkROBuffer> ro_buffer(rw_buffer_->makeROBufferSnapshot());
|
| - RefPtr<SegmentReader> segment_reader =
|
| - SegmentReader::CreateFromSkROBuffer(std::move(ro_buffer));
|
| + RefPtr<SharedBuffer::ThreadSafeStepper> stepper =
|
| + buffer_->thread_safe_stepper();
|
|
|
| SkImageInfo info = SkImageInfo::MakeN32(
|
| decoded_size.width(), decoded_size.height(),
|
| @@ -326,8 +306,8 @@ sk_sp<SkImage> DeferredImageDecoder::CreateFrameImageAtIndex(
|
| color_space_for_sk_images_);
|
|
|
| auto generator = WTF::MakeUnique<DecodingImageGenerator>(
|
| - frame_generator_, info, std::move(segment_reader), all_data_received_,
|
| - index, frame_data_[index].unique_id_);
|
| + frame_generator_, info, stepper, all_data_received_, index,
|
| + frame_data_[index].unique_id_);
|
| generator->SetCanYUVDecode(can_yuv_decode_);
|
| sk_sp<SkImage> image = SkImage::MakeFromGenerator(std::move(generator));
|
| if (!image)
|
|
|