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

Side by Side Diff: third_party/WebKit/Source/platform/SharedBufferStep.h

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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef SharedBufferStep_h
6 #define SharedBufferStep_h
7
8 #include "platform/PlatformExport.h"
9 #include "platform/wtf/PassRefPtr.h"
10 #include "platform/wtf/RefPtr.h"
11 #include "platform/wtf/ThreadSafeRefCounted.h"
12 #include "platform/wtf/Vector.h"
13 #include "third_party/skia/include/core/SkData.h"
14
15 namespace blink {
16
17 class PLATFORM_EXPORT SharedBufferStep
18 : public ThreadSafeRefCounted<SharedBufferStep> {
19 public:
20 size_t size() const { return size_; }
21
22 bool IsEmpty() const { return !size(); }
23
24 size_t GetSomeData(const char*& data, size_t position = 0) const;
25
26 bool GetBytes(void* dest, size_t byte_length) const;
27
28 sk_sp<SkData> GetAsSkData() const;
29
30 PassRefPtr<SharedBufferStep> Copy() const;
31
32 private:
33 class BufferVector : public ThreadSafeRefCounted<BufferVector> {
34 public:
35 static PassRefPtr<BufferVector> Create() {
36 return AdoptRef(new BufferVector());
37 }
38
39 static PassRefPtr<BufferVector> Create(size_t size) {
40 return AdoptRef(new BufferVector(size));
41 }
42
43 static PassRefPtr<BufferVector> AdoptVector(Vector<char>&);
44
45 PassRefPtr<BufferVector> ForwardStep();
46
47 void Append(const char* data, size_t length) {
48 vector_.Append(data, length);
49 }
50
51 void clear() { vector_.clear(); }
52
53 const char* data() const { return vector_.data(); }
54
55 size_t size() const { return vector_.size(); }
56
57 size_t capacity() const { return vector_.capacity(); }
58
59 void ReserveInitialCapacity(size_t capacity) {
60 vector_.ReserveInitialCapacity(capacity);
61 }
62
63 private:
64 BufferVector(){};
65 BufferVector(size_t size) : vector_(size){};
66
67 Vector<char> vector_;
68 };
69
70 class SegmentVector : public ThreadSafeRefCounted<SegmentVector> {
71 public:
72 static PassRefPtr<SegmentVector> Create(size_t segmented_position) {
73 return AdoptRef(new SegmentVector(segmented_position));
74 }
75
76 ~SegmentVector();
77
78 PassRefPtr<SegmentVector> ForwardStep();
79
80 void clear();
81
82 void push_back(char* segment) { vector_.push_back(segment); }
83
84 char* back() const { return vector_.back(); }
85
86 size_t size() const { return vector_.size(); }
87
88 bool IsEmpty() const { return vector_.IsEmpty(); }
89
90 size_t capacity() const { return vector_.capacity(); }
91
92 char* at(size_t index) const { return vector_.at(index); }
93
94 size_t segmented_position() const { return segmented_position_; }
95
96 void set_segmented_position(size_t segmented_position) {
97 segmented_position_ = segmented_position;
98 }
99
100 size_t segmented_size() const { return segmented_size_; }
101
102 void set_segmented_size(size_t segmented_size) {
103 segmented_size_ = segmented_size;
104 }
105
106 private:
107 SegmentVector(size_t segmented_position)
108 : segmented_position_(segmented_position), segmented_size_(0) {}
109
110 Vector<char*> vector_;
111 size_t segmented_position_;
112 size_t segmented_size_;
113 RefPtr<SegmentVector> next_step_segments_;
114 };
115
116 SharedBufferStep();
117 SharedBufferStep(size_t);
118 SharedBufferStep(size_t size,
119 PassRefPtr<BufferVector> buffer,
120 PassRefPtr<SegmentVector> segments)
121 : size_(size),
122 buffer_(std::move(buffer)),
123 segments_(std::move(segments)) {}
124
125 static PassRefPtr<SharedBufferStep> Create() {
126 return AdoptRef(new SharedBufferStep);
127 }
128
129 static PassRefPtr<SharedBufferStep> Create(size_t size) {
130 return AdoptRef(new SharedBufferStep(size));
131 }
132
133 static PassRefPtr<SharedBufferStep> Create(
134 size_t size,
135 PassRefPtr<BufferVector> buffer,
136 PassRefPtr<SegmentVector> segments) {
137 return AdoptRef(new SharedBufferStep(std::move(size), std::move(buffer),
138 std::move(segments)));
139 }
140
141 static PassRefPtr<SharedBufferStep> AdoptVector(Vector<char>&);
142
143 PassRefPtr<SharedBufferStep> Append(const char* data,
144 size_t length,
145 bool forward_step_if_needed);
146
147 PassRefPtr<SharedBufferStep> MergeSegmentsIntoBuffer(
148 bool forward_step_if_needed) const;
149
150 PassRefPtr<SharedBufferStep> Clear(bool forward_step_if_needed);
151
152 PassRefPtr<BufferVector> buffer() const { return buffer_; }
153
154 PassRefPtr<SegmentVector> segments() const { return segments_; }
155
156 size_t size_;
157 mutable RefPtr<BufferVector> buffer_;
158 mutable RefPtr<SegmentVector> segments_;
159
160 friend class SharedBuffer;
161 };
162 }
163
164 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/SharedBuffer.cpp ('k') | third_party/WebKit/Source/platform/SharedBufferStep.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698