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

Unified Diff: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp

Issue 1460523002: GIF decoding to Index8, unit tests and misusing unit test as benchmark (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comment #25 processed. Created 4 years, 11 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: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
index 1411c494248a4a21170f245dc5e8aaa5899035ae..e4a18a6741ef49be0291dc4a4e47e624a1e9bfb2 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -228,6 +228,8 @@ void DeferredImageDecoder::activateLazyDecoding()
const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationNone || (m_allDataReceived && m_actualDecoder->frameCount() == 1u);
m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_allDataReceived, !isSingleFrame);
+ // GIF images support Index8 decoding: other decoders do not.
+ m_frameGenerator->setDecoderCanDecodeToIndex8(m_filenameExtension == "gif");
}
void DeferredImageDecoder::prepareLazyDecodedFrames()
@@ -268,7 +270,7 @@ void DeferredImageDecoder::prepareLazyDecodedFrames()
}
}
-inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaque)
+static inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaque)
{
return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
}
@@ -279,8 +281,13 @@ PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index,
ASSERT(decodedSize.width() > 0);
ASSERT(decodedSize.height() > 0);
- DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), index);
- RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // SkImage takes ownership of the generator.
+ const SkImageInfo info = m_frameGenerator->canDecodeTo(index, kIndex_8_SkColorType)
+ ? SkImageInfo::Make(decodedSize.width(), decodedSize.height(), kIndex_8_SkColorType,
+ knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType)
+ : imageInfoFrom(decodedSize, knownToBeOpaque);
+
+ DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, info, index);
+ RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator));
if (!image)
return nullptr;

Powered by Google App Engine
This is Rietveld 408576698