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

Unified Diff: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp

Issue 1962563002: Fix ImageDecoder::frameIsCompleteAtIndex - fully received instead of decoded. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 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/image-decoders/ImageDecoder.cpp
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
index 6a88796935e60f1951be51faee22c0769e4a4cb5..bed10c0ad1597fc608ecd15914802670184700cc 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -126,6 +126,9 @@ PassOwnPtr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOp
size_t ImageDecoder::frameCount()
{
+ if (m_haveUpdatedFrameCount)
+ return m_frameBufferCache.size();
+
const size_t oldSize = m_frameBufferCache.size();
const size_t newSize = decodeFrameCount();
if (oldSize != newSize) {
@@ -135,6 +138,7 @@ size_t ImageDecoder::frameCount()
initializeNewFrame(i);
}
}
+ m_haveUpdatedFrameCount = true;
return newSize;
}
@@ -154,15 +158,11 @@ ImageFrame* ImageDecoder::frameBufferAtIndex(size_t index)
return frame;
}
-bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const
-{
- return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha();
-}
-
-bool ImageDecoder::frameIsCompleteAtIndex(size_t index) const
+bool ImageDecoder::frameIsFullyReceivedAtIndex(size_t index) const
{
- return (index < m_frameBufferCache.size()) &&
- (m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete);
+ DCHECK(m_haveUpdatedFrameCount);
+ return (index < m_frameBufferCache.size())
+ && (m_isAllDataReceived || failed() || m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete);
}
size_t ImageDecoder::frameBytesAtIndex(size_t index) const
@@ -183,6 +183,14 @@ size_t ImageDecoder::frameBytesAtIndex(size_t index) const
return ImageSize(frameSizeAtIndex(index)).area * sizeof(ImageFrame::PixelData);
}
+bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const
+{
+ DCHECK(m_haveUpdatedFrameCount);
+ if (m_frameBufferCache.size() == 1)
+ return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha();
+ return !frameIsFullyReceivedAtIndex(index) || m_frameBufferCache[index].hasAlpha();
+}
+
size_t ImageDecoder::clearCacheExceptFrame(size_t clearExceptFrame)
{
// Don't clear if there are no frames or only one frame.

Powered by Google App Engine
This is Rietveld 408576698