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

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

Issue 2918443003: Remove redundant reading and writing of data about SharedBuffer.
Patch Set: benchmark Created 3 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/SegmentReader.cpp
diff --git a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp b/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp
index f40f5e70697d4d9a2a60cf0c49a2f9d151e856fd..113296cd1214f99e3af049034963094040a5bce0 100644
--- a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp
@@ -5,6 +5,7 @@
#include "platform/image-decoders/SegmentReader.h"
#include "platform/SharedBuffer.h"
+#include "platform/SharedBufferStep.h"
#include "platform/wtf/Assertions.h"
#include "platform/wtf/Noncopyable.h"
#include "platform/wtf/PassRefPtr.h"
@@ -47,6 +48,41 @@ sk_sp<SkData> SharedBufferSegmentReader::GetAsSkData() const {
return shared_buffer_->GetAsSkData();
}
+// SharedBufferStepSegmentReader
+// ---------------------------------------------------
+
+// Interface for ImageDecoder to read a SharedBufferStep.
+class SharedBufferStepSegmentReader final : public SegmentReader {
+ WTF_MAKE_NONCOPYABLE(SharedBufferStepSegmentReader);
+
+ public:
+ SharedBufferStepSegmentReader(PassRefPtr<SharedBufferStep>);
+ size_t size() const override;
+ size_t GetSomeData(const char*& data, size_t position) const override;
+ sk_sp<SkData> GetAsSkData() const override;
+
+ private:
+ RefPtr<SharedBufferStep> step_;
+ size_t size_;
+};
+
+SharedBufferStepSegmentReader::SharedBufferStepSegmentReader(
+ PassRefPtr<SharedBufferStep> step)
+ : step_(std::move(step)), size_(step_->size()) {}
+
+size_t SharedBufferStepSegmentReader::size() const {
+ return size_;
+}
+
+size_t SharedBufferStepSegmentReader::GetSomeData(const char*& data,
+ size_t position) const {
+ return step_->GetSomeData(data, position);
+}
+
+sk_sp<SkData> SharedBufferStepSegmentReader::GetAsSkData() const {
+ return step_->GetAsSkData();
+}
+
// DataSegmentReader -----------------------------------------------------------
// Interface for ImageDecoder to read an SkData.
@@ -190,6 +226,11 @@ PassRefPtr<SegmentReader> SegmentReader::CreateFromSkData(sk_sp<SkData> data) {
return AdoptRef(new DataSegmentReader(std::move(data)));
}
+PassRefPtr<SegmentReader> SegmentReader::CreateFromSharedBufferStep(
+ PassRefPtr<SharedBufferStep> step) {
+ return AdoptRef(new SharedBufferStepSegmentReader(std::move(step)));
+}
+
PassRefPtr<SegmentReader> SegmentReader::CreateFromSkROBuffer(
sk_sp<SkROBuffer> buffer) {
return AdoptRef(new ROBufferSegmentReader(std::move(buffer)));

Powered by Google App Engine
This is Rietveld 408576698