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

Unified Diff: Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.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: Fix assert fail on debug 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
« no previous file with comments | « Source/core/platform/image-decoders/webp/WEBPImageDecoder.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
diff --git a/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp b/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
index 6c1e9a7e9b4177bee277a8466958dae592ed77c9..033d97029ddb752257f95b05e7f1aa5b3d8a1439 100644
--- a/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
+++ b/Source/core/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
@@ -182,13 +182,14 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersTransparentImage)
const int canvasHeight = 29;
const struct AnimParam {
int xOffset, yOffset, width, height;
- ImageFrame::FrameDisposalMethod dispose;
+ ImageFrame::DisposalMethod disposalMethod;
+ ImageFrame::AlphaBlendSource alphaBlendSource;
unsigned duration;
bool hasAlpha;
} frameParameters[] = {
- { 0, 0, 11, 29, ImageFrame::DisposeKeep, 1000u, true },
- { 2, 10, 7, 17, ImageFrame::DisposeKeep, 500u, true },
- { 2, 2, 7, 16, ImageFrame::DisposeKeep, 1000u, true },
+ { 0, 0, 11, 29, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
+ { 2, 10, 7, 17, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 500u, true },
+ { 2, 2, 7, 16, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
};
for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
@@ -200,7 +201,8 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersTransparentImage)
EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
- EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod());
+ EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
+ EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
EXPECT_EQ(frameParameters[i].duration, frame->duration());
EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
}
@@ -222,14 +224,15 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
const int canvasHeight = 87;
const struct AnimParam {
int xOffset, yOffset, width, height;
- ImageFrame::FrameDisposalMethod dispose;
+ ImageFrame::DisposalMethod disposalMethod;
+ ImageFrame::AlphaBlendSource alphaBlendSource;
unsigned duration;
bool hasAlpha;
} frameParameters[] = {
- { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
- { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
- { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
- { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, 1000u, true },
+ { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
+ { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
+ { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
+ { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopPreviousFrame, 1000u, true },
};
for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
@@ -241,7 +244,51 @@ TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
- EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod());
+ EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
+ EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
+ EXPECT_EQ(frameParameters[i].duration, frame->duration());
+ EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
+ }
+
+ EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount());
+ EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount());
+}
+
+TEST_F(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite)
+{
+ OwnPtr<WEBPImageDecoder> decoder = createDecoder();
+ EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
+
+ RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated-no-blend.webp");
+ ASSERT_TRUE(data.get());
+ decoder->setData(data.get(), true);
+
+ const int canvasWidth = 94;
+ const int canvasHeight = 87;
+ const struct AnimParam {
+ int xOffset, yOffset, width, height;
+ ImageFrame::DisposalMethod disposalMethod;
+ ImageFrame::AlphaBlendSource alphaBlendSource;
+ unsigned duration;
+ bool hasAlpha;
+ } frameParameters[] = {
+ { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
+ { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
+ { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
+ { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendAtopBgcolor, 1000u, true },
+ };
+
+ for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) {
+ const ImageFrame* const frame = decoder->frameBufferAtIndex(i);
+ EXPECT_EQ(ImageFrame::FrameComplete, frame->status());
+ EXPECT_EQ(canvasWidth, frame->getSkBitmap().width());
+ EXPECT_EQ(canvasHeight, frame->getSkBitmap().height());
+ EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x());
+ EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y());
+ EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width());
+ EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height());
+ EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod());
+ EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource());
EXPECT_EQ(frameParameters[i].duration, frame->duration());
EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha());
}
« no previous file with comments | « Source/core/platform/image-decoders/webp/WEBPImageDecoder.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698