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

Unified Diff: Source/core/platform/graphics/chromium/ImageFrameGeneratorTest.cpp

Issue 19838002: Reland change to enable deferred image decoding for animated GIFs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: merved Created 7 years, 5 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/graphics/chromium/ImageFrameGeneratorTest.cpp
diff --git a/Source/core/platform/graphics/chromium/ImageFrameGeneratorTest.cpp b/Source/core/platform/graphics/chromium/ImageFrameGeneratorTest.cpp
index 7335763b649c2ed7fa86fb17f479fbddcc2ead24..4e04d87e5ad7ac0a09fb2a46a92c439a49c39a27 100644
--- a/Source/core/platform/graphics/chromium/ImageFrameGeneratorTest.cpp
+++ b/Source/core/platform/graphics/chromium/ImageFrameGeneratorTest.cpp
@@ -95,6 +95,10 @@ public:
return m_frameStatus;
}
+ virtual size_t frameCount() { return 1; }
+ virtual int repetitionCount() const { return cAnimationNone; }
+ virtual float frameDuration() const { return 0; }
+
protected:
PassOwnPtr<ScaledImageFragment> createCompleteImage(const SkISize& size)
{
@@ -137,7 +141,7 @@ TEST_F(ImageFrameGeneratorTest, cacheHit)
const ScaledImageFragment* tempImage = m_generator->decodeAndScale(fullSize());
EXPECT_EQ(fullImage, tempImage);
EXPECT_EQ(fullSize(), tempImage->scaledSize());
- EXPECT_TRUE(m_generator->hasAlpha());
+ EXPECT_TRUE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage);
EXPECT_EQ(0, m_frameBufferRequestCount);
}
@@ -153,14 +157,14 @@ TEST_F(ImageFrameGeneratorTest, cacheMissWithScale)
const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledSize());
EXPECT_NE(fullImage, scaledImage);
EXPECT_EQ(scaledSize(), scaledImage->scaledSize());
- EXPECT_TRUE(m_generator->hasAlpha());
+ EXPECT_TRUE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage);
// Cache hit.
const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSize());
EXPECT_EQ(scaledImage, tempImage);
EXPECT_EQ(scaledSize(), tempImage->scaledSize());
- EXPECT_TRUE(m_generator->hasAlpha());
+ EXPECT_TRUE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage);
EXPECT_EQ(0, m_frameBufferRequestCount);
}
@@ -173,7 +177,7 @@ TEST_F(ImageFrameGeneratorTest, cacheMissWithDecodeAndScale)
const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledSize());
EXPECT_EQ(1, m_frameBufferRequestCount);
EXPECT_EQ(scaledSize(), scaledImage->scaledSize());
- EXPECT_FALSE(m_generator->hasAlpha());
+ EXPECT_FALSE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage);
EXPECT_EQ(1, m_decodersDestroyed);
@@ -181,14 +185,14 @@ TEST_F(ImageFrameGeneratorTest, cacheMissWithDecodeAndScale)
const ScaledImageFragment* fullImage = m_generator->decodeAndScale(fullSize());
EXPECT_NE(scaledImage, fullImage);
EXPECT_EQ(fullSize(), fullImage->scaledSize());
- EXPECT_FALSE(m_generator->hasAlpha());
+ EXPECT_FALSE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage);
// Cache hit.
const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSize());
EXPECT_EQ(scaledImage, tempImage);
EXPECT_EQ(scaledSize(), tempImage->scaledSize());
- EXPECT_FALSE(m_generator->hasAlpha());
+ EXPECT_FALSE(m_generator->hasAlpha(0));
ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage);
EXPECT_EQ(1, m_frameBufferRequestCount);
}
@@ -388,4 +392,35 @@ TEST_F(ImageFrameGeneratorTest, incompleteBitmapCopied)
ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), tempDecoder);
}
+TEST_F(ImageFrameGeneratorTest, resumeDecodeEmptyFrame)
+{
+ m_generator = ImageFrameGenerator::create(fullSize(), m_data, false, true);
+ m_generator->setImageDecoderFactoryForTesting(MockImageDecoderFactory::create(this));
+ setFrameStatus(ImageFrame::FrameComplete);
+
+ const ScaledImageFragment* tempImage = m_generator->decodeAndScale(fullSize(), 0);
+ EXPECT_TRUE(tempImage->isComplete());
+ ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage);
+
+ setFrameStatus(ImageFrame::FrameEmpty);
+ EXPECT_FALSE(m_generator->decodeAndScale(fullSize(), 1));
+}
+
+TEST_F(ImageFrameGeneratorTest, frameHasAlpha)
+{
+ setFrameStatus(ImageFrame::FramePartial);
+ ImageDecodingStore::instance()->unlockCache(m_generator.get(), m_generator->decodeAndScale(fullSize(), 1));
+ EXPECT_TRUE(m_generator->hasAlpha(1));
+
+ ImageDecoder* tempDecoder = 0;
+ EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), fullSize(), &tempDecoder));
+ ASSERT_TRUE(tempDecoder);
+ static_cast<MockImageDecoder*>(tempDecoder)->setFrameHasAlpha(false);
+ ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), tempDecoder);
+
+ setFrameStatus(ImageFrame::FrameComplete);
+ ImageDecodingStore::instance()->unlockCache(m_generator.get(), m_generator->decodeAndScale(fullSize(), 1));
+ EXPECT_FALSE(m_generator->hasAlpha(1));
+}
+
} // namespace

Powered by Google App Engine
This is Rietveld 408576698