Chromium Code Reviews| 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..b1f815863a81afb3ed6697f06ab9869a69553c66 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. |
|
Peter Kasting
2013/08/22 20:04:36
Might also want to test that non-full frames with
urvang (Google)
2013/08/22 23:25:14
Done.
Using 3 frames instead of 2 to correctly tes
|
| +TEST(ImageDecoderTest, requiredPreviousFrameIndexFullFrameBlendOverwrite) |
| +{ |
| + OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder())); |
| + decoder->initFrames(2); |
| + Vector<ImageFrame, 1>& decoderFrameBufferCache = decoder->frameBufferCache(); |
|
Peter Kasting
2013/08/22 20:04:36
Tiny nit: Honestly, this temp only saves a few cha
urvang (Google)
2013/08/22 23:25:14
I agree.
Renamed it to 'frameBuffers' to be curt.
|
| + |
| + decoderFrameBufferCache[0].setOriginalFrameRect(IntRect(25, 25, 50, 50)); |
| + decoderFrameBufferCache[1].setAlphaBlendSource(ImageFrame::BlendAtopBgcolor); |
| + |
| + 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].setAlphaBlendSource(ImageFrame::BlendAtopBgcolor); |
| + |
| + for (int disposeMethod = ImageFrame::DisposeNotSpecified; disposeMethod <= ImageFrame::DisposeOverwritePrevious; ++disposeMethod) { |
| + decoderFrameBufferCache[0].setDisposalMethod(static_cast<ImageFrame::FrameDisposalMethod>(disposeMethod)); |
| + decoder->resetRequiredPreviousFrames(true); // Opaque. |
|
Peter Kasting
2013/08/22 20:04:36
Nit: I'd nuke the comment
urvang (Google)
2013/08/22 23:25:14
Done.
|
| + EXPECT_EQ(notFound, decoderFrameBufferCache[1].requiredPreviousFrameIndex()); |
| + } |
| +} |
| + |
| TEST(ImageDecoderTest, clearCacheExceptFrameDoNothing) |
| { |
| OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder())); |