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

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: fix .gitignore Created 5 years, 1 month 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..db2de1de164c039abb96366d5b9f61b75159674d
--- /dev/null
+++ b/mojo/services/media/common/cpp/mapped_shared_buffer.cc
@@ -0,0 +1,101 @@
+// 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 <cassert>
johngro 2015/12/05 00:45:55 same comment as in the previous file, MOJO_DCHECK
dalesat 2015/12/07 18:30:20 Done.
+
+#include "mojo/services/media/common/cpp/mapped_shared_buffer.h"
+
+namespace mojo {
+namespace media {
+
+MappedSharedBuffer::MappedSharedBuffer() {}
+
+MappedSharedBuffer::~MappedSharedBuffer() {}
+
+void MappedSharedBuffer::InitNew(uint64_t size) {
+ assert(size > 0);
+
+ buffer_.reset(new SharedBuffer(size));
+ handle_.reset();
+
+ InitInternal(buffer_->handle, size);
+}
+
+void MappedSharedBuffer::InitFromHandle(
+ ScopedSharedBufferHandle handle,
+ uint64_t size) {
+ assert(handle.is_valid());
+ assert(size > 0);
+
+ buffer_.reset();
+ handle_ = handle.Pass();
+
+ InitInternal(handle_, size);
+}
+
+void MappedSharedBuffer::InitInternal(
+ ScopedSharedBufferHandle& handle,
+ uint64_t size) {
+ assert(handle.is_valid());
+ assert(size > 0);
+
+ size_ = size;
+ buffer_ptr_.reset();
+
+ void* ptr;
+ auto result = MapBuffer(
+ handle.get(),
+ 0, // offset
+ size,
+ &ptr,
+ MOJO_MAP_BUFFER_FLAG_NONE);
+ assert(result == MOJO_RESULT_OK);
+ assert(ptr);
+
+ buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr));
+
+ OnInit();
+}
+
+bool MappedSharedBuffer::initialized() {
+ return buffer_ptr_ != nullptr;
+}
+
+uint64_t MappedSharedBuffer::size() {
+ return size_;
+}
+
+ScopedSharedBufferHandle MappedSharedBuffer::GetDuplicateHandle() {
+ assert(initialized());
+ ScopedSharedBufferHandle handle;
+ // TODO: We should create a read-only duplicate of the handle.
johngro 2015/12/05 00:45:55 TODO(dalesat)
dalesat 2015/12/07 18:30:20 Removed. Also added a check so this works when Ini
+ DuplicateBuffer(buffer_->handle.get(), nullptr, &handle);
+ return handle.Pass();
+}
+
+void* MappedSharedBuffer::PtrFromOffset(uint64_t offset) {
+ assert(buffer_ptr_);
+
+ if (offset == FifoAllocator::kNullOffset) {
+ return nullptr;
+ }
+
+ assert(offset < size_);
+ return buffer_ptr_.get() + offset;
+}
+
+uint64_t MappedSharedBuffer::OffsetFromPtr(void *ptr) {
+ assert(buffer_ptr_);
+ if (ptr == nullptr) {
+ return FifoAllocator::kNullOffset;
+ }
+ uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get();
+ assert(offset < size_);
+ return offset;
+}
+
+void MappedSharedBuffer::OnInit() {}
+
+} // namespace media
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698