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

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

Issue 2206263003: Remove SK_SUPPORT_LEGACY_DATA_FACTORIES. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Gotta catch 'em all. Created 4 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/image-decoders/SegmentReader.h" 5 #include "platform/image-decoders/SegmentReader.h"
6 6
7 #include "platform/SharedBuffer.h" 7 #include "platform/SharedBuffer.h"
8 #include "third_party/skia/include/core/SkData.h" 8 #include "third_party/skia/include/core/SkData.h"
9 #include "wtf/Assertions.h" 9 #include "wtf/Assertions.h"
10 #include "wtf/Noncopyable.h" 10 #include "wtf/Noncopyable.h"
11 #include "wtf/PassRefPtr.h" 11 #include "wtf/PassRefPtr.h"
12 #include "wtf/RefPtr.h" 12 #include "wtf/RefPtr.h"
13 #include "wtf/ThreadingPrimitives.h" 13 #include "wtf/ThreadingPrimitives.h"
14 14
15 namespace blink { 15 namespace blink {
16 16
17 // SharedBufferSegmentReader --------------------------------------------------- 17 // SharedBufferSegmentReader ---------------------------------------------------
18 18
19 // Interface for ImageDecoder to read a SharedBuffer. 19 // Interface for ImageDecoder to read a SharedBuffer.
20 class SharedBufferSegmentReader final : public SegmentReader { 20 class SharedBufferSegmentReader final : public SegmentReader {
21 WTF_MAKE_NONCOPYABLE(SharedBufferSegmentReader); 21 WTF_MAKE_NONCOPYABLE(SharedBufferSegmentReader);
22 public: 22 public:
23 SharedBufferSegmentReader(PassRefPtr<SharedBuffer>); 23 SharedBufferSegmentReader(PassRefPtr<SharedBuffer>);
24 size_t size() const override; 24 size_t size() const override;
25 size_t getSomeData(const char*& data, size_t position) const override; 25 size_t getSomeData(const char*& data, size_t position) const override;
26 PassRefPtr<SkData> getAsSkData() const override; 26 sk_sp<SkData> getAsSkData() const override;
27 private: 27 private:
28 RefPtr<SharedBuffer> m_sharedBuffer; 28 RefPtr<SharedBuffer> m_sharedBuffer;
29 }; 29 };
30 30
31 SharedBufferSegmentReader::SharedBufferSegmentReader(PassRefPtr<SharedBuffer> bu ffer) 31 SharedBufferSegmentReader::SharedBufferSegmentReader(PassRefPtr<SharedBuffer> bu ffer)
32 : m_sharedBuffer(buffer) {} 32 : m_sharedBuffer(buffer) {}
33 33
34 size_t SharedBufferSegmentReader::size() const 34 size_t SharedBufferSegmentReader::size() const
35 { 35 {
36 return m_sharedBuffer->size(); 36 return m_sharedBuffer->size();
37 } 37 }
38 38
39 size_t SharedBufferSegmentReader::getSomeData(const char*& data, size_t position ) const 39 size_t SharedBufferSegmentReader::getSomeData(const char*& data, size_t position ) const
40 { 40 {
41 return m_sharedBuffer->getSomeData(data, position); 41 return m_sharedBuffer->getSomeData(data, position);
42 } 42 }
43 43
44 PassRefPtr<SkData> SharedBufferSegmentReader::getAsSkData() const 44 sk_sp<SkData> SharedBufferSegmentReader::getAsSkData() const
45 { 45 {
46 return m_sharedBuffer->getAsSkData(); 46 return m_sharedBuffer->getAsSkData();
47 } 47 }
48 48
49 // DataSegmentReader ----------------------------------------------------------- 49 // DataSegmentReader -----------------------------------------------------------
50 50
51 // Interface for ImageDecoder to read an SkData. 51 // Interface for ImageDecoder to read an SkData.
52 class DataSegmentReader final : public SegmentReader { 52 class DataSegmentReader final : public SegmentReader {
53 WTF_MAKE_NONCOPYABLE(DataSegmentReader); 53 WTF_MAKE_NONCOPYABLE(DataSegmentReader);
54 public: 54 public:
55 DataSegmentReader(PassRefPtr<SkData>); 55 DataSegmentReader(sk_sp<SkData>);
56 size_t size() const override; 56 size_t size() const override;
57 size_t getSomeData(const char*& data, size_t position) const override; 57 size_t getSomeData(const char*& data, size_t position) const override;
58 PassRefPtr<SkData> getAsSkData() const override; 58 sk_sp<SkData> getAsSkData() const override;
59 private: 59 private:
60 RefPtr<SkData> m_data; 60 sk_sp<SkData> m_data;
61 }; 61 };
62 62
63 DataSegmentReader::DataSegmentReader(PassRefPtr<SkData> data) 63 DataSegmentReader::DataSegmentReader(sk_sp<SkData> data)
64 : m_data(data) {} 64 : m_data(std::move(data)) {}
65 65
66 size_t DataSegmentReader::size() const 66 size_t DataSegmentReader::size() const
67 { 67 {
68 return m_data->size(); 68 return m_data->size();
69 } 69 }
70 70
71 size_t DataSegmentReader::getSomeData(const char*& data, size_t position) const 71 size_t DataSegmentReader::getSomeData(const char*& data, size_t position) const
72 { 72 {
73 if (position >= m_data->size()) 73 if (position >= m_data->size())
74 return 0; 74 return 0;
75 75
76 data = reinterpret_cast<const char*>(m_data->bytes() + position); 76 data = reinterpret_cast<const char*>(m_data->bytes() + position);
77 return m_data->size() - position; 77 return m_data->size() - position;
78 } 78 }
79 79
80 PassRefPtr<SkData> DataSegmentReader::getAsSkData() const 80 sk_sp<SkData> DataSegmentReader::getAsSkData() const
81 { 81 {
82 return m_data.get(); 82 return m_data;
83 } 83 }
84 84
85 // ROBufferSegmentReader ------------------------------------------------------- 85 // ROBufferSegmentReader -------------------------------------------------------
86 86
87 class ROBufferSegmentReader final : public SegmentReader { 87 class ROBufferSegmentReader final : public SegmentReader {
88 WTF_MAKE_NONCOPYABLE(ROBufferSegmentReader); 88 WTF_MAKE_NONCOPYABLE(ROBufferSegmentReader);
89 public: 89 public:
90 ROBufferSegmentReader(PassRefPtr<SkROBuffer>); 90 ROBufferSegmentReader(PassRefPtr<SkROBuffer>);
91 91
92 size_t size() const override; 92 size_t size() const override;
93 size_t getSomeData(const char*& data, size_t position) const override; 93 size_t getSomeData(const char*& data, size_t position) const override;
94 PassRefPtr<SkData> getAsSkData() const override; 94 sk_sp<SkData> getAsSkData() const override;
95 95
96 private: 96 private:
97 RefPtr<SkROBuffer> m_roBuffer; 97 RefPtr<SkROBuffer> m_roBuffer;
98 // Protects access to mutable fields. 98 // Protects access to mutable fields.
99 mutable Mutex m_readMutex; 99 mutable Mutex m_readMutex;
100 // Position of the first char in the current block of m_iter. 100 // Position of the first char in the current block of m_iter.
101 mutable size_t m_positionOfBlock; 101 mutable size_t m_positionOfBlock;
102 mutable SkROBuffer::Iter m_iter; 102 mutable SkROBuffer::Iter m_iter;
103 }; 103 };
104 104
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } 146 }
147 147
148 return 0; 148 return 0;
149 } 149 }
150 150
151 static void unrefROBuffer(const void* ptr, void* context) 151 static void unrefROBuffer(const void* ptr, void* context)
152 { 152 {
153 static_cast<SkROBuffer*>(context)->unref(); 153 static_cast<SkROBuffer*>(context)->unref();
154 } 154 }
155 155
156 PassRefPtr<SkData> ROBufferSegmentReader::getAsSkData() const 156 sk_sp<SkData> ROBufferSegmentReader::getAsSkData() const
157 { 157 {
158 if (!m_roBuffer) 158 if (!m_roBuffer)
159 return nullptr; 159 return nullptr;
160 160
161 // Check to see if the data is already contiguous. 161 // Check to see if the data is already contiguous.
162 SkROBuffer::Iter iter(m_roBuffer.get()); 162 SkROBuffer::Iter iter(m_roBuffer.get());
163 const bool multipleBlocks = iter.next(); 163 const bool multipleBlocks = iter.next();
164 iter.reset(m_roBuffer.get()); 164 iter.reset(m_roBuffer.get());
165 165
166 if (!multipleBlocks) { 166 if (!multipleBlocks) {
167 // Contiguous data. No need to copy. 167 // Contiguous data. No need to copy.
168 m_roBuffer->ref(); 168 m_roBuffer->ref();
169 return adoptRef(SkData::NewWithProc(iter.data(), iter.size(), &unrefROBu ffer, m_roBuffer.get())); 169 return SkData::MakeWithProc(iter.data(), iter.size(), &unrefROBuffer, m_ roBuffer.get());
170 } 170 }
171 171
172 RefPtr<SkData> data = adoptRef(SkData::NewUninitialized(m_roBuffer->size())) ; 172 sk_sp<SkData> data = SkData::MakeUninitialized(m_roBuffer->size());
173 char* dst = static_cast<char*>(data->writable_data()); 173 char* dst = static_cast<char*>(data->writable_data());
174 do { 174 do {
175 size_t size = iter.size(); 175 size_t size = iter.size();
176 memcpy(dst, iter.data(), size); 176 memcpy(dst, iter.data(), size);
177 dst += size; 177 dst += size;
178 } while (iter.next()); 178 } while (iter.next());
179 return data.release(); 179 return data;
180 } 180 }
181 181
182 // SegmentReader --------------------------------------------------------------- 182 // SegmentReader ---------------------------------------------------------------
183 183
184 PassRefPtr<SegmentReader> SegmentReader::createFromSharedBuffer(PassRefPtr<Share dBuffer> buffer) 184 PassRefPtr<SegmentReader> SegmentReader::createFromSharedBuffer(PassRefPtr<Share dBuffer> buffer)
185 { 185 {
186 return adoptRef(new SharedBufferSegmentReader(buffer)); 186 return adoptRef(new SharedBufferSegmentReader(buffer));
187 } 187 }
188 188
189 PassRefPtr<SegmentReader> SegmentReader::createFromSkData(PassRefPtr<SkData> dat a) 189 PassRefPtr<SegmentReader> SegmentReader::createFromSkData(sk_sp<SkData> data)
190 { 190 {
191 return adoptRef(new DataSegmentReader(data)); 191 return adoptRef(new DataSegmentReader(std::move(data)));
192 } 192 }
193 193
194 PassRefPtr<SegmentReader> SegmentReader::createFromSkROBuffer(PassRefPtr<SkROBuf fer> buffer) 194 PassRefPtr<SegmentReader> SegmentReader::createFromSkROBuffer(PassRefPtr<SkROBuf fer> buffer)
195 { 195 {
196 return adoptRef(new ROBufferSegmentReader(buffer)); 196 return adoptRef(new ROBufferSegmentReader(buffer));
197 } 197 }
198 198
199 } // namespace blink 199 } // namespace blink
200 200
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698