summaryrefslogtreecommitdiff
path: root/chromium/media/fuchsia/common
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/fuchsia/common')
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_pool.cc4
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_writer.cc38
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_writer.h22
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