Chromium Code Reviews| 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) { |