Index: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
index cc5954edf9de97a6391a4c904dc4826cc341741d..5c033e8e463b4a3944b0312078a597713398d9c6 100644 |
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
@@ -227,10 +227,25 @@ size_t GIFImageDecoder::clearCacheExceptFrame(size_t clearExceptFrame) |
// All other frames can be cleared. |
while ((clearExceptFrame < m_frameBufferCache.size()) && (m_frameBufferCache[clearExceptFrame].status() == ImageFrame::FrameEmpty)) |
clearExceptFrame = m_frameBufferCache[clearExceptFrame].requiredPreviousFrameIndex(); |
- |
+ if ((clearExceptFrame < m_frameBufferCache.size()) && (m_frameBufferCache.size() > 1) |
+ && (m_frameBufferCache[clearExceptFrame].disposalMethod() == ImageFrame::DisposeOverwritePrevious)) |
+ return clearCacheExceptTwoFrames(clearExceptFrame, m_frameBufferCache[clearExceptFrame].requiredPreviousFrameIndex()); |
Peter Kasting
2016/01/14 00:17:29
I don't think this is as correct as the algorithm
aleksandar.stojiljkovic
2016/01/14 11:32:53
I should have explained for not doing as you sugge
Peter Kasting
2016/01/14 22:58:39
I think you're mistaken about how both the existin
|
return ImageDecoder::clearCacheExceptFrame(clearExceptFrame); |
} |
+ |
+size_t GIFImageDecoder::clearCacheExceptTwoFrames(size_t dontClearFrame1, size_t dontClearFrame2) |
+{ |
+ size_t frameBytesCleared = 0; |
+ for (size_t i = 0; i < m_frameBufferCache.size(); ++i) { |
+ if (m_frameBufferCache[i].status() != ImageFrame::FrameEmpty && i != dontClearFrame1 && i != dontClearFrame2) { |
+ frameBytesCleared += frameBytesAtIndex(i); |
+ clearFrameBuffer(i); |
+ } |
+ } |
+ return frameBytesCleared; |
+} |
+ |
void GIFImageDecoder::clearFrameBuffer(size_t frameIndex) |
{ |
if (m_reader && m_frameBufferCache[frameIndex].status() == ImageFrame::FramePartial) { |