Chromium Code Reviews| 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 5600cc13cc12c8c73fd6a7088e16eafc53bf2852..969d0942f528d635ae80b32aa10fc9783ed558fe 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
| @@ -117,6 +117,24 @@ PassRefPtr<SkImage> DeferredImageDecoder::createFrameAtIndex(size_t index) |
| return adoptRef(SkImage::NewFromBitmap(frame->bitmap())); |
| } |
| +bool DeferredImageDecoder::hasData() const |
| +{ |
| + return static_cast<bool>(m_rwBuffer); |
| +} |
| + |
| +PassRefPtr<SharedBuffer> DeferredImageDecoder::data() |
|
scroggo_chromium
2016/06/20 19:00:43
This method can be slow, especially if it's called
hajimehoshi
2016/06/22 09:42:29
IIUC this is not called often: Resource::resourceB
|
| +{ |
| + if (!m_rwBuffer) |
| + return nullptr; |
| + RefPtr<SkROBuffer> roBuffer = adoptRef(m_rwBuffer->newRBufferSnapshot()); |
| + RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(roBuffer->size()); |
| + SkROBuffer::Iter it(roBuffer.get()); |
| + do { |
| + sharedBuffer->append(static_cast<const char*>(it.data()), it.size()); |
| + } while (it.next()); |
| + return sharedBuffer; |
| +} |
| + |
| void DeferredImageDecoder::setData(SharedBuffer& data, bool allDataReceived) |
| { |
| if (m_actualDecoder) { |
| @@ -131,8 +149,9 @@ void DeferredImageDecoder::setData(SharedBuffer& data, bool allDataReceived) |
| const char* segment = 0; |
| for (size_t length = data.getSomeData(segment, m_rwBuffer->size()); |
| - length; length = data.getSomeData(segment, m_rwBuffer->size())) |
| + length; length = data.getSomeData(segment, m_rwBuffer->size())) { |
| m_rwBuffer->append(segment, length); |
| + } |
| } |
| } |