Chromium Code Reviews| Index: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
| diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
| index 70de78249db332997998e3edd75e1cd5195529e1..c8383a0fa48e37c0d07b2644c18460b9280b4bb9 100644 |
| --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
| +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp |
| @@ -114,6 +114,9 @@ PassOwnPtr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOp |
| size_t ImageDecoder::frameCount() |
| { |
| + if (m_haveUpdatedFrameCount) |
| + return m_frameBufferCache.size(); |
| + |
| const size_t oldSize = m_frameBufferCache.size(); |
| const size_t newSize = decodeFrameCount(); |
| if (oldSize != newSize) { |
| @@ -123,6 +126,7 @@ size_t ImageDecoder::frameCount() |
| initializeNewFrame(i); |
| } |
| } |
| + m_haveUpdatedFrameCount = true; |
| return newSize; |
| } |
| @@ -142,15 +146,11 @@ ImageFrame* ImageDecoder::frameBufferAtIndex(size_t index) |
| return frame; |
| } |
| -bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const |
| -{ |
| - return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
| -} |
| - |
| -bool ImageDecoder::frameIsCompleteAtIndex(size_t index) const |
| +bool ImageDecoder::frameIsFullyReceivedAtIndex(size_t index) const |
| { |
| - return (index < m_frameBufferCache.size()) && |
| - (m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete); |
| + ASSERT(m_haveUpdatedFrameCount); |
| + return (index < m_frameBufferCache.size()) |
| + && (m_isAllDataReceived || failed() || m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete); |
|
Peter Kasting
2016/06/10 00:10:02
If we know all decoders report only fully-received
aleksandar.stojiljkovic
2016/06/10 21:51:08
For GIF and single frame (e.g. JPEG) we return par
Peter Kasting
2016/06/10 22:25:03
I know, but it sounded on another CL like there wa
|
| } |
| size_t ImageDecoder::frameBytesAtIndex(size_t index) const |
| @@ -171,6 +171,14 @@ size_t ImageDecoder::frameBytesAtIndex(size_t index) const |
| return ImageSize(frameSizeAtIndex(index)).area * sizeof(ImageFrame::PixelData); |
| } |
| +bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const |
| +{ |
| + ASSERT(m_haveUpdatedFrameCount); |
| + if (m_frameBufferCache.size() == 1) |
| + return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
| + return !frameIsFullyReceivedAtIndex(index) || m_frameBufferCache[index].hasAlpha(); |
|
Peter Kasting
2016/06/10 00:10:02
This implementation confuses me. I don't understa
aleksandar.stojiljkovic
2016/06/10 21:51:08
I think that adding failed() to fullyReceived is c
Peter Kasting
2016/06/10 22:25:03
I don't understand why we would ever want to toggl
|
| +} |
| + |
| bool ImageDecoder::deferredImageDecodingEnabled() |
| { |
| return DeferredImageDecoder::enabled(); |