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

Unified Diff: Source/core/platform/graphics/chromium/ImageFrameGenerator.h

Issue 17999003: Deferred image decoding to support animated GIFs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: done 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/ImageFrameGenerator.h
diff --git a/Source/core/platform/graphics/chromium/ImageFrameGenerator.h b/Source/core/platform/graphics/chromium/ImageFrameGenerator.h
index 4c8be4299e665235f87c00d047d07696889fb125..6a391c94da716b60be843a0cba44a363b8ebb4e0 100644
--- a/Source/core/platform/graphics/chromium/ImageFrameGenerator.h
+++ b/Source/core/platform/graphics/chromium/ImageFrameGenerator.h
@@ -53,15 +53,15 @@ public:
class ImageFrameGenerator : public ThreadSafeRefCounted<ImageFrameGenerator> {
public:
- static PassRefPtr<ImageFrameGenerator> create(const SkISize& fullSize, PassRefPtr<SharedBuffer> data, bool allDataReceived)
+ static PassRefPtr<ImageFrameGenerator> create(const SkISize& fullSize, PassRefPtr<SharedBuffer> data, bool allDataReceived, bool isMultiFrame = false)
{
- return adoptRef(new ImageFrameGenerator(fullSize, data, allDataReceived));
+ return adoptRef(new ImageFrameGenerator(fullSize, data, allDataReceived, isMultiFrame));
}
- ImageFrameGenerator(const SkISize& fullSize, PassRefPtr<SharedBuffer>, bool allDataReceived);
+ ImageFrameGenerator(const SkISize& fullSize, PassRefPtr<SharedBuffer>, bool allDataReceived, bool isMultiFrame);
~ImageFrameGenerator();
- const ScaledImageFragment* decodeAndScale(const SkISize& scaledSize);
+ const ScaledImageFragment* decodeAndScale(const SkISize& scaledSize, size_t index = 0);
void setData(PassRefPtr<SharedBuffer>, bool allDataReceived);
@@ -70,19 +70,22 @@ public:
SkISize getFullSize() const { return m_fullSize; }
+ bool isMultiFrame() const { return m_isMultiFrame; }
+
void setImageDecoderFactoryForTesting(PassOwnPtr<ImageDecoderFactory> factory) { m_imageDecoderFactory = factory; }
+ // FIXME: Return alpha state for each frame.
bool hasAlpha();
private:
// These methods are called while m_decodeMutex is locked.
- const ScaledImageFragment* tryToLockCompleteCache(const SkISize& scaledSize);
- const ScaledImageFragment* tryToScale(const ScaledImageFragment* fullSizeImage, const SkISize& scaledSize);
- const ScaledImageFragment* tryToResumeDecodeAndScale(const SkISize& scaledSize);
- const ScaledImageFragment* tryToDecodeAndScale(const SkISize& scaledSize);
+ const ScaledImageFragment* tryToLockCompleteCache(const SkISize& scaledSize, size_t index);
+ const ScaledImageFragment* tryToScale(const ScaledImageFragment* fullSizeImage, const SkISize& scaledSize, size_t index);
+ const ScaledImageFragment* tryToResumeDecodeAndScale(const SkISize& scaledSize, size_t index);
+ const ScaledImageFragment* tryToDecodeAndScale(const SkISize& scaledSize, size_t index);
// Use the given decoder to decode. If a decoder is not given then try to create one.
- PassOwnPtr<ScaledImageFragment> decode(ImageDecoder**);
+ PassOwnPtr<ScaledImageFragment> decode(size_t index, ImageDecoder**);
// Return the next generation ID of a new image object. This is used
// to identify images of the same frame from different stages of
@@ -91,6 +94,7 @@ private:
SkISize m_fullSize;
ThreadSafeDataTransport m_data;
+ bool m_isMultiFrame;
bool m_decodeFailedAndEmpty;
bool m_hasAlpha;
size_t m_decodeCount;

Powered by Google App Engine
This is Rietveld 408576698