Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1499)

Unified Diff: Source/core/platform/image-decoders/ImageDecoderTest.cpp

Issue 23068027: Animated WebP: Optimize decoding in case of seeking (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@add_noblend_image
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()));

Powered by Google App Engine
This is Rietveld 408576698