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 f1d76fd87415897d55de43781599b662de78c1d1..0be98893f44c0a6b9dcd9c665a1fa68c5df2a479 100644 |
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
@@ -27,7 +27,6 @@ |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/graphics/DecodingImageGenerator.h" |
-#include "platform/graphics/FrameData.h" |
#include "platform/graphics/ImageDecodingStore.h" |
#include "platform/graphics/ImageFrameGenerator.h" |
#include "third_party/skia/include/core/SkImage.h" |
@@ -35,6 +34,23 @@ |
namespace blink { |
+struct DeferredFrameData { |
Peter Kasting
2016/04/28 23:07:55
This probably needs comments about why you can't u
aleksandar.stojiljkovic
2016/04/29 17:17:43
After second patch these two diverged further - D
|
+ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
+ WTF_MAKE_NONCOPYABLE(DeferredFrameData); |
+public: |
+ DeferredFrameData() |
+ : m_orientation(DefaultImageOrientation) |
+ , m_duration(0) |
+ , m_isComplete(false) |
+ , m_frameBytes(0) |
+ {} |
+ |
+ ImageOrientation m_orientation; |
+ float m_duration; |
+ bool m_isComplete : 1; |
+ size_t m_frameBytes; |
+}; |
+ |
bool DeferredImageDecoder::s_enabled = true; |
PassOwnPtr<DeferredImageDecoder> DeferredImageDecoder::create(const SharedBuffer& data, ImageDecoder::AlphaOption alphaOption, ImageDecoder::GammaAndColorProfileOption colorOptions) |
@@ -89,16 +105,15 @@ PassRefPtr<SkImage> DeferredImageDecoder::createFrameAtIndex(size_t index) |
prepareLazyDecodedFrames(); |
if (index < m_frameData.size()) { |
- FrameData* frameData = &m_frameData[index]; |
- // ImageFrameGenerator has the latest known alpha state. There will be a |
- // performance boost if this frame is opaque. |
- ASSERT(m_frameGenerator); |
- frameData->m_hasAlpha = m_frameGenerator->hasAlpha(index); |
+ DeferredFrameData* frameData = &m_frameData[index]; |
if (m_actualDecoder) |
frameData->m_frameBytes = m_actualDecoder->frameBytesAtIndex(index); |
else |
frameData->m_frameBytes = m_size.area() * sizeof(ImageFrame::PixelData); |
- return createFrameImageAtIndex(index, !frameData->m_hasAlpha); |
+ // ImageFrameGenerator has the latest known alpha state. There will be a |
+ // performance boost if this frame is opaque. |
+ ASSERT(m_frameGenerator); |
+ return createFrameImageAtIndex(index, !m_frameGenerator->hasAlpha(index)); |
} |
if (!m_actualDecoder || m_actualDecoder->failed()) |
@@ -251,7 +266,6 @@ void DeferredImageDecoder::prepareLazyDecodedFrames() |
return; |
for (size_t i = previousSize; i < m_frameData.size(); ++i) { |
- m_frameData[i].m_haveMetadata = true; |
m_frameData[i].m_duration = m_actualDecoder->frameDurationAtIndex(i); |
m_frameData[i].m_orientation = m_actualDecoder->orientation(); |
m_frameData[i].m_isComplete = m_actualDecoder->frameIsCompleteAtIndex(i); |
@@ -300,3 +314,10 @@ bool DeferredImageDecoder::hotSpot(IntPoint& hotSpot) const |
} |
} // namespace blink |
+ |
+namespace WTF { |
+template<> struct VectorTraits<blink::DeferredFrameData> : public SimpleClassVectorTraits<blink::DeferredFrameData> { |
+ STATIC_ONLY(VectorTraits); |
+ static const bool canInitializeWithMemset = false; // Not all DeferredFrameData members initialize to 0. |
+}; |
+} |