| Index: Source/core/platform/image-decoders/ImageDecoder.cpp
|
| diff --git a/Source/core/platform/image-decoders/ImageDecoder.cpp b/Source/core/platform/image-decoders/ImageDecoder.cpp
|
| index 917161f10527eb91c1636fd73868dfe04515499f..db18ed09280479e0719b72675ecee755b285321d 100644
|
| --- a/Source/core/platform/image-decoders/ImageDecoder.cpp
|
| +++ b/Source/core/platform/image-decoders/ImageDecoder.cpp
|
| @@ -152,7 +152,7 @@ void ImageDecoder::clearFrameBuffer(size_t frameIndex)
|
| m_frameBufferCache[frameIndex].clearPixelData();
|
| }
|
|
|
| -size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex)
|
| +size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex, bool frameRectIsOpaque)
|
| {
|
| ASSERT(frameIndex <= m_frameBufferCache.size());
|
| if (!frameIndex) {
|
| @@ -160,6 +160,11 @@ size_t ImageDecoder::findRequiredPreviousFrame(size_t frameIndex)
|
| return notFound;
|
| }
|
|
|
| + const ImageFrame* currBuffer = &m_frameBufferCache[frameIndex];
|
| + if ((frameRectIsOpaque || currBuffer->alphaBlendSource() == ImageFrame::BlendAtopBgcolor)
|
| + && currBuffer->originalFrameRect().contains(IntRect(IntPoint(), size())))
|
| + return notFound;
|
| +
|
| // The starting state for this frame depends on the previous frame's
|
| // disposal method.
|
| size_t prevFrame = frameIndex - 1;
|
|
|