aboutsummaryrefslogtreecommitdiff
path: root/src/protozero/scattered_heap_buffer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/protozero/scattered_heap_buffer.cc')
-rw-r--r--src/protozero/scattered_heap_buffer.cc42
1 files changed, 6 insertions, 36 deletions
diff --git a/src/protozero/scattered_heap_buffer.cc b/src/protozero/scattered_heap_buffer.cc
index 389c36e32..eb6883edc 100644
--- a/src/protozero/scattered_heap_buffer.cc
+++ b/src/protozero/scattered_heap_buffer.cc
@@ -20,31 +20,20 @@
namespace protozero {
-ScatteredHeapBuffer::Slice::Slice()
- : buffer_(nullptr), size_(0u), unused_bytes_(0u) {}
-
ScatteredHeapBuffer::Slice::Slice(size_t size)
: buffer_(std::unique_ptr<uint8_t[]>(new uint8_t[size])),
size_(size),
unused_bytes_(size) {
PERFETTO_DCHECK(size);
- Clear();
+#if PERFETTO_DCHECK_IS_ON()
+ memset(start(), 0xff, size_);
+#endif // PERFETTO_DCHECK_IS_ON()
}
ScatteredHeapBuffer::Slice::Slice(Slice&& slice) noexcept = default;
ScatteredHeapBuffer::Slice::~Slice() = default;
-ScatteredHeapBuffer::Slice& ScatteredHeapBuffer::Slice::operator=(Slice&&) =
- default;
-
-void ScatteredHeapBuffer::Slice::Clear() {
- unused_bytes_ = size_;
-#if PERFETTO_DCHECK_IS_ON()
- memset(start(), 0xff, size_);
-#endif // PERFETTO_DCHECK_IS_ON()
-}
-
ScatteredHeapBuffer::ScatteredHeapBuffer(size_t initial_slice_size_bytes,
size_t maximum_slice_size_bytes)
: next_slice_size_(initial_slice_size_bytes),
@@ -59,12 +48,7 @@ protozero::ContiguousMemoryRange ScatteredHeapBuffer::GetNewBuffer() {
PERFETTO_CHECK(writer_);
AdjustUsedSizeOfCurrentSlice();
- if (cached_slice_.start()) {
- slices_.push_back(std::move(cached_slice_));
- PERFETTO_DCHECK(!cached_slice_.start());
- } else {
- slices_.emplace_back(next_slice_size_);
- }
+ slices_.emplace_back(next_slice_size_);
next_slice_size_ = std::min(maximum_slice_size_, next_slice_size_ * 2);
return slices_.back().GetTotalRange();
}
@@ -72,21 +56,15 @@ protozero::ContiguousMemoryRange ScatteredHeapBuffer::GetNewBuffer() {
std::vector<uint8_t> ScatteredHeapBuffer::StitchSlices() {
AdjustUsedSizeOfCurrentSlice();
std::vector<uint8_t> buffer;
+ size_t i = 0;
for (const auto& slice : slices_) {
auto used_range = slice.GetUsedRange();
buffer.insert(buffer.end(), used_range.begin, used_range.end);
+ i++;
}
return buffer;
}
-std::vector<protozero::ContiguousMemoryRange> ScatteredHeapBuffer::GetRanges() {
- AdjustUsedSizeOfCurrentSlice();
- std::vector<protozero::ContiguousMemoryRange> ranges;
- for (const auto& slice : slices_)
- ranges.push_back(slice.GetUsedRange());
- return ranges;
-}
-
void ScatteredHeapBuffer::AdjustUsedSizeOfCurrentSlice() {
if (!slices_.empty())
slices_.back().set_unused_bytes(writer_->bytes_available());
@@ -100,12 +78,4 @@ size_t ScatteredHeapBuffer::GetTotalSize() {
return total_size;
}
-void ScatteredHeapBuffer::Reset() {
- if (slices_.empty())
- return;
- cached_slice_ = std::move(slices_.front());
- cached_slice_.Clear();
- slices_.clear();
-}
-
} // namespace protozero