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..f9b7213f86bb1e90f488ec2a56fffcd31660ca2a 100644 |
| --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| @@ -225,10 +225,30 @@ size_t GIFImageDecoder::clearCacheExceptFrame(size_t clearExceptFrame) |
| // 2. We don't clear any frame from which a future initFrameBuffer() call |
| // will copy bitmap data. |
| // All other frames can be cleared. |
|
Peter Kasting
2016/01/15 21:57:57
Nit: Change this comment as follows, then follow m
aleksandar.stojiljkovic
2016/01/16 07:09:35
Done.
|
| + size_t clearExceptFrame2 = kNotFound; |
| + if (clearExceptFrame < m_frameBufferCache.size()) { |
| + const ImageFrame& frame = m_frameBufferCache[clearExceptFrame]; |
| + if ((frame.status() != ImageFrame::FrameEmpty) && (frame.disposalMethod() == ImageFrame::DisposeOverwritePrevious)) { |
| + clearExceptFrame2 = clearExceptFrame; |
| + clearExceptFrame = frame.requiredPreviousFrameIndex(); |
| + } |
| + } |
| while ((clearExceptFrame < m_frameBufferCache.size()) && (m_frameBufferCache[clearExceptFrame].status() == ImageFrame::FrameEmpty)) |
|
Peter Kasting
2016/01/15 21:57:57
Nit: Now add a blank line above this and then this
aleksandar.stojiljkovic
2016/01/16 07:09:35
Done.
|
| clearExceptFrame = m_frameBufferCache[clearExceptFrame].requiredPreviousFrameIndex(); |
| + return clearCacheExceptTwoFrames(clearExceptFrame, clearExceptFrame2); |
| +} |
| + |
| - return ImageDecoder::clearCacheExceptFrame(clearExceptFrame); |
| +size_t GIFImageDecoder::clearCacheExceptTwoFrames(size_t clearExceptFrame1, size_t clearExceptFrame2) |
| +{ |
| + size_t frameBytesCleared = 0; |
| + for (size_t i = 0; i < m_frameBufferCache.size(); ++i) { |
| + if (m_frameBufferCache[i].status() != ImageFrame::FrameEmpty && i != clearExceptFrame1 && i != clearExceptFrame2) { |
| + frameBytesCleared += frameBytesAtIndex(i); |
| + clearFrameBuffer(i); |
| + } |
| + } |
| + return frameBytesCleared; |
| } |
| void GIFImageDecoder::clearFrameBuffer(size_t frameIndex) |