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

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

Issue 1866243003: Revert of Eliminate copies of encoded image data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 5c20f1df0f92ca51910a2f0a6d9a2e9df0b1ce65..03ca9b2cef22c4cae1967c003bca17facf5ec44b 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -26,12 +26,10 @@
#include "platform/graphics/DeferredImageDecoder.h"
#include "platform/RuntimeEnabledFeatures.h"
-#include "platform/SharedBuffer.h"
#include "platform/graphics/DecodingImageGenerator.h"
#include "platform/graphics/FrameData.h"
#include "platform/graphics/ImageDecodingStore.h"
#include "platform/graphics/ImageFrameGenerator.h"
-#include "platform/image-decoders/SegmentReader.h"
#include "third_party/skia/include/core/SkImage.h"
#include "wtf/PassOwnPtr.h"
@@ -56,6 +54,7 @@
DeferredImageDecoder::DeferredImageDecoder(PassOwnPtr<ImageDecoder> actualDecoder)
: m_allDataReceived(false)
+ , m_lastDataSize(0)
, m_actualDecoder(std::move(actualDecoder))
, m_repetitionCount(cAnimationNone)
, m_hasColorProfile(false)
@@ -112,20 +111,15 @@
void DeferredImageDecoder::setData(SharedBuffer& data, bool allDataReceived)
{
if (m_actualDecoder) {
+ m_data = RefPtr<SharedBuffer>(data);
+ m_lastDataSize = data.size();
m_allDataReceived = allDataReceived;
m_actualDecoder->setData(&data, allDataReceived);
prepareLazyDecodedFrames();
}
- if (m_frameGenerator) {
- if (!m_rwBuffer)
- m_rwBuffer = adoptPtr(new SkRWBuffer(data.size()));
-
- const char* segment = 0;
- for (size_t length = data.getSomeData(segment, m_rwBuffer->size());
- length; length = data.getSomeData(segment, m_rwBuffer->size()))
- m_rwBuffer->append(segment, length);
- }
+ if (m_frameGenerator)
+ m_frameGenerator->setData(&data, allDataReceived);
}
bool DeferredImageDecoder::isSizeAvailable()
@@ -233,8 +227,7 @@
m_hasColorProfile = m_actualDecoder->hasColorProfile();
const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationNone || (m_allDataReceived && m_actualDecoder->frameCount() == 1u);
- const SkISize decodedSize = SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height());
- m_frameGenerator = ImageFrameGenerator::create(decodedSize, !isSingleFrame);
+ m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_allDataReceived, !isSingleFrame);
}
void DeferredImageDecoder::prepareLazyDecodedFrames()
@@ -271,7 +264,7 @@
if (m_allDataReceived) {
m_repetitionCount = m_actualDecoder->repetitionCount();
m_actualDecoder.clear();
- // Hold on to m_rwBuffer, which is still needed by createFrameAtIndex.
+ m_data = nullptr;
}
}
@@ -286,9 +279,7 @@
ASSERT(decodedSize.width() > 0);
ASSERT(decodedSize.height() > 0);
- RefPtr<SkROBuffer> roBuffer = adoptRef(m_rwBuffer->newRBufferSnapshot());
- RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkROBuffer(roBuffer.release());
- DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), segmentReader.release(), m_allDataReceived, index);
+ DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), index);
RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // SkImage takes ownership of the generator.
if (!image)
return nullptr;

Powered by Google App Engine
This is Rietveld 408576698