| Index: Source/core/platform/image-decoders/ImageDecoderTest.cpp
|
| diff --git a/Source/core/platform/image-decoders/ImageDecoderTest.cpp b/Source/core/platform/image-decoders/ImageDecoderTest.cpp
|
| index 65dfe4d76f810462e5ab3899fdfb28820ce4b7fc..7f6e81d587a44dae9fbf93d7a958c7fbff93da88 100644
|
| --- a/Source/core/platform/image-decoders/ImageDecoderTest.cpp
|
| +++ b/Source/core/platform/image-decoders/ImageDecoderTest.cpp
|
| @@ -54,10 +54,10 @@ public:
|
| return m_frameBufferCache;
|
| }
|
|
|
| - void resetRequiredPreviousFrames()
|
| + void resetRequiredPreviousFrames(bool knownOpaque = false)
|
| {
|
| for (size_t i = 0; i < m_frameBufferCache.size(); ++i)
|
| - m_frameBufferCache[i].setRequiredPreviousFrameIndex(findRequiredPreviousFrame(i));
|
| + m_frameBufferCache[i].setRequiredPreviousFrameIndex(findRequiredPreviousFrame(i, knownOpaque));
|
| }
|
|
|
| void initFrames(size_t numFrames, unsigned width = 100, unsigned height = 100)
|
| @@ -140,6 +140,40 @@ TEST(ImageDecoderTest, requiredPreviousFrameIndexForFrame1)
|
| EXPECT_EQ(notFound, decoderFrameBufferCache[1].requiredPreviousFrameIndex());
|
| }
|
|
|
| +// A full frame with 'blending method == BlendOverwrite' doesn't depend on any prior frames.
|
| +TEST(ImageDecoderTest, requiredPreviousFrameIndexFullFrameBlendOverwrite)
|
| +{
|
| + OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
|
| + decoder->initFrames(2);
|
| + Vector<ImageFrame, 1>& decoderFrameBufferCache = decoder->frameBufferCache();
|
| +
|
| + decoderFrameBufferCache[0].setOriginalFrameRect(IntRect(25, 25, 50, 50));
|
| + decoderFrameBufferCache[1].setBlendingMethod(ImageFrame::BlendOverwrite);
|
| +
|
| + for (int disposeMethod = ImageFrame::DisposeNotSpecified; disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
|
| + decoderFrameBufferCache[0].setDisposalMethod(static_cast<ImageFrame::FrameDisposalMethod>(disposeMethod));
|
| + decoder->resetRequiredPreviousFrames();
|
| + EXPECT_EQ(notFound, decoderFrameBufferCache[1].requiredPreviousFrameIndex());
|
| + }
|
| +}
|
| +
|
| +// A full frame that is known to be opaque doesn't depend on any prior frames.
|
| +TEST(ImageDecoderTest, requiredPreviousFrameIndexFullFrameOpaque)
|
| +{
|
| + OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
|
| + decoder->initFrames(2);
|
| + Vector<ImageFrame, 1>& decoderFrameBufferCache = decoder->frameBufferCache();
|
| +
|
| + decoderFrameBufferCache[0].setOriginalFrameRect(IntRect(25, 25, 50, 50));
|
| + decoderFrameBufferCache[1].setBlendingMethod(ImageFrame::BlendOverwrite);
|
| +
|
| + for (int disposeMethod = ImageFrame::DisposeNotSpecified; disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) {
|
| + decoderFrameBufferCache[0].setDisposalMethod(static_cast<ImageFrame::FrameDisposalMethod>(disposeMethod));
|
| + decoder->resetRequiredPreviousFrames(true); // Opaque.
|
| + EXPECT_EQ(notFound, decoderFrameBufferCache[1].requiredPreviousFrameIndex());
|
| + }
|
| +}
|
| +
|
| TEST(ImageDecoderTest, clearCacheExceptFrameDoNothing)
|
| {
|
| OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
|
|
|