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

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: better check in unit test 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 70de78249db332997998e3edd75e1cd5195529e1..c8383a0fa48e37c0d07b2644c18460b9280b4bb9 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -114,6 +114,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) {
@@ -123,6 +126,7 @@ size_t ImageDecoder::frameCount()
initializeNewFrame(i);
}
}
+ m_haveUpdatedFrameCount = true;
return newSize;
}
@@ -142,15 +146,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);
+ ASSERT(m_haveUpdatedFrameCount);
+ return (index < m_frameBufferCache.size())
+ && (m_isAllDataReceived || failed() || m_frameBufferCache[index].getStatus() == ImageFrame::FrameComplete);
Peter Kasting 2016/06/10 00:10:02 If we know all decoders report only fully-received
aleksandar.stojiljkovic 2016/06/10 21:51:08 For GIF and single frame (e.g. JPEG) we return par
Peter Kasting 2016/06/10 22:25:03 I know, but it sounded on another CL like there wa
}
size_t ImageDecoder::frameBytesAtIndex(size_t index) const
@@ -171,6 +171,14 @@ size_t ImageDecoder::frameBytesAtIndex(size_t index) const
return ImageSize(frameSizeAtIndex(index)).area * sizeof(ImageFrame::PixelData);
}
+bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const
+{
+ ASSERT(m_haveUpdatedFrameCount);
+ if (m_frameBufferCache.size() == 1)
+ return !frameIsCompleteAtIndex(index) || m_frameBufferCache[index].hasAlpha();
+ return !frameIsFullyReceivedAtIndex(index) || m_frameBufferCache[index].hasAlpha();
Peter Kasting 2016/06/10 00:10:02 This implementation confuses me. I don't understa
aleksandar.stojiljkovic 2016/06/10 21:51:08 I think that adding failed() to fullyReceived is c
Peter Kasting 2016/06/10 22:25:03 I don't understand why we would ever want to toggl
+}
+
bool ImageDecoder::deferredImageDecodingEnabled()
{
return DeferredImageDecoder::enabled();

Powered by Google App Engine
This is Rietveld 408576698