diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/media/fuchsia/common | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/fuchsia/common')
-rw-r--r-- | chromium/media/fuchsia/common/sysmem_buffer_pool.cc | 4 | ||||
-rw-r--r-- | chromium/media/fuchsia/common/sysmem_buffer_writer.cc | 38 | ||||
-rw-r--r-- | chromium/media/fuchsia/common/sysmem_buffer_writer.h | 22 |
3 files changed, 51 insertions, 13 deletions
diff --git a/chromium/media/fuchsia/common/sysmem_buffer_pool.cc b/chromium/media/fuchsia/common/sysmem_buffer_pool.cc index 94c1a1f43d9..2b4b0b5487a 100644 --- a/chromium/media/fuchsia/common/sysmem_buffer_pool.cc +++ b/chromium/media/fuchsia/common/sysmem_buffer_pool.cc @@ -8,8 +8,8 @@ #include <algorithm> #include "base/bind.h" -#include "base/fuchsia/default_context.h" #include "base/fuchsia/fuchsia_logging.h" +#include "base/fuchsia/process_context.h" #include "media/fuchsia/common/sysmem_buffer_reader.h" #include "media/fuchsia/common/sysmem_buffer_writer.h" @@ -126,7 +126,7 @@ void SysmemBufferPool::OnError() { } BufferAllocator::BufferAllocator() { - allocator_ = base::fuchsia::ComponentContextForCurrentProcess() + allocator_ = base::ComponentContextForProcess() ->svc() ->Connect<fuchsia::sysmem::Allocator>(); diff --git a/chromium/media/fuchsia/common/sysmem_buffer_writer.cc b/chromium/media/fuchsia/common/sysmem_buffer_writer.cc index addfafb6e94..0942b9f5337 100644 --- a/chromium/media/fuchsia/common/sysmem_buffer_writer.cc +++ b/chromium/media/fuchsia/common/sysmem_buffer_writer.cc @@ -70,16 +70,30 @@ class SysmemBufferWriter::Buffer { size_t bytes_to_fill = std::min(size_, data.size()); memcpy(base_address_ + offset_, data.data(), bytes_to_fill); - // Flush CPU cache if StreamProcessor reads from RAM. - if (coherency_domain_ == fuchsia::sysmem::CoherencyDomain::RAM) { - zx_status_t status = zx_cache_flush(base_address_ + offset_, - bytes_to_fill, ZX_CACHE_FLUSH_DATA); - ZX_DCHECK(status == ZX_OK, status) << "zx_cache_flush"; - } + FlushBuffer(0, bytes_to_fill); return bytes_to_fill; } + base::span<uint8_t> ReserveAndMapBuffer() { + DCHECK(!is_used_); + is_used_ = true; + return base::make_span(base_address_ + offset_, size_); + } + + void FlushBuffer(size_t flush_offset, size_t flush_size) { + DCHECK(is_used_); + DCHECK_LE(flush_size, size_ - flush_offset); + + if (coherency_domain_ != fuchsia::sysmem::CoherencyDomain::RAM) + return; + + uint8_t* address = base_address_ + offset_ + flush_offset; + zx_status_t status = + zx_cache_flush(address, flush_size, ZX_CACHE_FLUSH_DATA); + ZX_DCHECK(status == ZX_OK, status) << "zx_cache_flush"; + } + void Release() { is_used_ = false; } private: @@ -187,4 +201,16 @@ SysmemBufferWriter::GetRecommendedConstraints( return buffer_constraints; } +base::span<uint8_t> SysmemBufferWriter::ReserveAndMapBuffer(size_t index) { + DCHECK_LT(index, buffers_.size()); + return buffers_[index].ReserveAndMapBuffer(); +} + +void SysmemBufferWriter::FlushBuffer(size_t index, + size_t flush_offset, + size_t flush_size) { + DCHECK_LT(index, buffers_.size()); + return buffers_[index].FlushBuffer(flush_offset, flush_size); +} + } // namespace media diff --git a/chromium/media/fuchsia/common/sysmem_buffer_writer.h b/chromium/media/fuchsia/common/sysmem_buffer_writer.h index 9aed936f2b2..aaee25c1449 100644 --- a/chromium/media/fuchsia/common/sysmem_buffer_writer.h +++ b/chromium/media/fuchsia/common/sysmem_buffer_writer.h @@ -11,6 +11,7 @@ #include <memory> #include "base/containers/span.h" +#include "base/memory/shared_memory_mapping.h" #include "base/optional.h" namespace media { @@ -30,11 +31,24 @@ class SysmemBufferWriter { explicit SysmemBufferWriter(std::vector<Buffer> buffers); ~SysmemBufferWriter(); - // Write the content of |data| into buffer at |index|. Return num of bytes - // written into the buffer. Write a used buffer will fail. It will mark the - // buffer as "used". + SysmemBufferWriter(const SysmemBufferWriter&) = delete; + SysmemBufferWriter& operator=(const SysmemBufferWriter&) = delete; + + // Write the content of |data| into the buffer at |index|. Return num of bytes + // written into the buffer. Can be called only for an unused buffer. Marks + // the buffer as used. size_t Write(size_t index, base::span<const uint8_t> data); + // Returns a span for the memory-mapping of the buffer with the specified + // |index|. Can be called only for an unused buffer. Marks the buffer as used. + // Callers must call FlushCache() after they are finished updating the buffer. + base::span<uint8_t> ReserveAndMapBuffer(size_t index); + + // Flushes CPU cache for specified range in the buffer with the specified + // |index| in case the buffer collection uses RAM coherency. No-op for + // collections with RAM coherency. + void FlushBuffer(size_t index, size_t flush_offset, size_t flush_size); + // Acquire unused buffer for write. If |min_size| is provided, the returned // buffer will have available size larger than |min_size|. This will NOT // mark the buffer as "used". @@ -50,8 +64,6 @@ class SysmemBufferWriter { private: std::vector<Buffer> buffers_; - - DISALLOW_COPY_AND_ASSIGN(SysmemBufferWriter); }; } // namespace media |