| 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 6a88796935e60f1951be51faee22c0769e4a4cb5..bed10c0ad1597fc608ecd15914802670184700cc 100644
|
| --- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
|
| +++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
|
| @@ -126,6 +126,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) {
|
| @@ -135,6 +138,7 @@ size_t ImageDecoder::frameCount()
|
| initializeNewFrame(i);
|
| }
|
| }
|
| + m_haveUpdatedFrameCount = true;
|
| return newSize;
|
| }
|
|
|
| @@ -154,15 +158,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);
|
| + DCHECK(m_haveUpdatedFrameCount);
|
| + return (index < m_frameBufferCache.size())
|
| + && (m_isAllDataReceived || failed() || m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete);
|
| }
|
|
|
| size_t ImageDecoder::frameBytesAtIndex(size_t index) const
|
| @@ -183,6 +183,14 @@ size_t ImageDecoder::frameBytesAtIndex(size_t index) const
|
| return ImageSize(frameSizeAtIndex(index)).area * sizeof(ImageFrame::PixelData);
|
| }
|
|
|
| +bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const
|
| +{
|
| + DCHECK(m_haveUpdatedFrameCount);
|
| + if (m_frameBufferCache.size() == 1)
|
| + return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha();
|
| + return !frameIsFullyReceivedAtIndex(index) || m_frameBufferCache[index].hasAlpha();
|
| +}
|
| +
|
| size_t ImageDecoder::clearCacheExceptFrame(size_t clearExceptFrame)
|
| {
|
| // Don't clear if there are no frames or only one frame.
|
|
|