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; |