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

Unified Diff: mojo/services/media/common/cpp/mapped_shared_buffer.cc

Issue 1460693004: Add helper classes to for managing shared buffers. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: sync Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: mojo/services/media/common/cpp/mapped_shared_buffer.cc
diff --git a/mojo/services/media/common/cpp/mapped_shared_buffer.cc b/mojo/services/media/common/cpp/mapped_shared_buffer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5d0cb4b6f4ea1dac946a7f74c477c58b522f902c
--- /dev/null
+++ b/mojo/services/media/common/cpp/mapped_shared_buffer.cc
@@ -0,0 +1,104 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/public/cpp/environment/logging.h"
+#include "mojo/services/media/common/cpp/mapped_shared_buffer.h"
+
+namespace mojo {
+namespace media {
+
+MappedSharedBuffer::MappedSharedBuffer() {}
+
+MappedSharedBuffer::~MappedSharedBuffer() {}
+
+void MappedSharedBuffer::InitNew(uint64_t size) {
+ MOJO_DCHECK(size > 0);
+
+ buffer_.reset(new SharedBuffer(size));
+ handle_.reset();
+
+ InitInternal(buffer_->handle, size);
+}
+
+void MappedSharedBuffer::InitFromHandle(
+ ScopedSharedBufferHandle handle,
+ uint64_t size) {
+ MOJO_DCHECK(handle.is_valid());
+ MOJO_DCHECK(size > 0);
+
+ buffer_.reset();
+ handle_ = handle.Pass();
+
+ InitInternal(handle_, size);
+}
+
+void MappedSharedBuffer::InitInternal(
+ ScopedSharedBufferHandle& handle,
+ uint64_t size) {
+ MOJO_DCHECK(handle.is_valid());
+ MOJO_DCHECK(size > 0);
+
+ size_ = size;
+ buffer_ptr_.reset();
+
+ void* ptr;
+ auto result = MapBuffer(
+ handle.get(),
+ 0, // offset
+ size,
+ &ptr,
+ MOJO_MAP_BUFFER_FLAG_NONE);
+ MOJO_DCHECK(result == MOJO_RESULT_OK);
+ MOJO_DCHECK(ptr);
+
+ buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr));
+
+ OnInit();
+}
+
+bool MappedSharedBuffer::initialized() const {
+ return buffer_ptr_ != nullptr;
+}
+
+uint64_t MappedSharedBuffer::size() const {
+ return size_;
+}
+
+ScopedSharedBufferHandle MappedSharedBuffer::GetDuplicateHandle() const {
+ MOJO_DCHECK(initialized());
+ ScopedSharedBufferHandle handle;
+ if (buffer_) {
+ DuplicateBuffer(buffer_->handle.get(), nullptr, &handle);
+ } else {
+ MOJO_DCHECK(handle_.is_valid());
+ DuplicateBuffer(handle_.get(), nullptr, &handle);
+ }
+ return handle.Pass();
+}
+
+void* MappedSharedBuffer::PtrFromOffset(uint64_t offset) const {
+ MOJO_DCHECK(buffer_ptr_);
+
+ if (offset == FifoAllocator::kNullOffset) {
+ return nullptr;
+ }
+
+ MOJO_DCHECK(offset < size_);
+ return buffer_ptr_.get() + offset;
+}
+
+uint64_t MappedSharedBuffer::OffsetFromPtr(void *ptr) const {
+ MOJO_DCHECK(buffer_ptr_);
+ if (ptr == nullptr) {
+ return FifoAllocator::kNullOffset;
+ }
+ uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get();
+ MOJO_DCHECK(offset < size_);
+ return offset;
+}
+
+void MappedSharedBuffer::OnInit() {}
+
+} // namespace media
+} // namespace mojo
« no previous file with comments | « mojo/services/media/common/cpp/mapped_shared_buffer.h ('k') | mojo/services/media/common/cpp/shared_media_buffer_allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698