From 070e73868efabc0cdeffd374436efec1ee2c9756 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 1 Jun 2021 14:05:06 -0700 Subject: [PATCH] Patch buffer views. --- .../impeller/impeller/compositor/buffer.h | 24 +++++++++++++++---- .../impeller/impeller/compositor/buffer.mm | 3 +++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/engine/src/flutter/impeller/impeller/compositor/buffer.h b/engine/src/flutter/impeller/impeller/compositor/buffer.h index 867b9718746..a0987216385 100644 --- a/engine/src/flutter/impeller/impeller/compositor/buffer.h +++ b/engine/src/flutter/impeller/impeller/compositor/buffer.h @@ -12,25 +12,39 @@ namespace impeller { +class HostBuffer; + class BufferBase { public: + ~BufferBase() = default; + virtual uint8_t* GetMapping() const = 0; virtual size_t GetLength() const = 0; }; -class BufferView : public BufferBase { +class BufferView final : public BufferBase { public: - uint8_t* GetMapping() const { + // |BufferBase| + ~BufferView() = default; + + // |BufferBase| + uint8_t* GetMapping() const override { return parent_->GetMapping() + range_in_parent_.offset; } - size_t GetLength() const { return range_in_parent_.length; } + // |BufferBase| + size_t GetLength() const override { return range_in_parent_.length; } private: + friend HostBuffer; + std::shared_ptr parent_; Range range_in_parent_; + BufferView(std::shared_ptr parent, Range range_in_parent) + : parent_(std::move(parent)), range_in_parent_(range_in_parent) {} + FML_DISALLOW_COPY_AND_ASSIGN(BufferView); }; @@ -61,10 +75,12 @@ class HostBuffer : public std::enable_shared_from_this, std::shared_ptr Emplace(size_t length); - ~HostBuffer(); + virtual ~HostBuffer(); + // |BufferBase| uint8_t* GetMapping() const override { return buffer_; } + // |BufferBase| size_t GetLength() const override { return length_; } [[nodiscard]] bool Truncate(size_t length); diff --git a/engine/src/flutter/impeller/impeller/compositor/buffer.mm b/engine/src/flutter/impeller/impeller/compositor/buffer.mm index 60025aafb19..cb9ba12e05a 100644 --- a/engine/src/flutter/impeller/impeller/compositor/buffer.mm +++ b/engine/src/flutter/impeller/impeller/compositor/buffer.mm @@ -27,9 +27,12 @@ HostBuffer::~HostBuffer() { } std::shared_ptr HostBuffer::Emplace(size_t length) { + auto old_length = length_; if (!Truncate(length_ + length)) { return nullptr; } + return std::shared_ptr( + new BufferView(shared_from_this(), Range{old_length, length})); } bool HostBuffer::Truncate(size_t length) {