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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/public/cpp/environment/logging.h"
6 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h"
7
8 namespace mojo {
9 namespace media {
10
11 MappedSharedBuffer::MappedSharedBuffer() {}
12
13 MappedSharedBuffer::~MappedSharedBuffer() {}
14
15 void MappedSharedBuffer::InitNew(uint64_t size) {
16 MOJO_DCHECK(size > 0);
17
18 buffer_.reset(new SharedBuffer(size));
19 handle_.reset();
20
21 InitInternal(buffer_->handle, size);
22 }
23
24 void MappedSharedBuffer::InitFromHandle(
25 ScopedSharedBufferHandle handle,
26 uint64_t size) {
27 MOJO_DCHECK(handle.is_valid());
28 MOJO_DCHECK(size > 0);
29
30 buffer_.reset();
31 handle_ = handle.Pass();
32
33 InitInternal(handle_, size);
34 }
35
36 void MappedSharedBuffer::InitInternal(
37 ScopedSharedBufferHandle& handle,
38 uint64_t size) {
39 MOJO_DCHECK(handle.is_valid());
40 MOJO_DCHECK(size > 0);
41
42 size_ = size;
43 buffer_ptr_.reset();
44
45 void* ptr;
46 auto result = MapBuffer(
47 handle.get(),
48 0, // offset
49 size,
50 &ptr,
51 MOJO_MAP_BUFFER_FLAG_NONE);
52 MOJO_DCHECK(result == MOJO_RESULT_OK);
53 MOJO_DCHECK(ptr);
54
55 buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr));
56
57 OnInit();
58 }
59
60 bool MappedSharedBuffer::initialized() const {
61 return buffer_ptr_ != nullptr;
62 }
63
64 uint64_t MappedSharedBuffer::size() const {
65 return size_;
66 }
67
68 ScopedSharedBufferHandle MappedSharedBuffer::GetDuplicateHandle() const {
69 MOJO_DCHECK(initialized());
70 ScopedSharedBufferHandle handle;
71 if (buffer_) {
72 DuplicateBuffer(buffer_->handle.get(), nullptr, &handle);
73 } else {
74 MOJO_DCHECK(handle_.is_valid());
75 DuplicateBuffer(handle_.get(), nullptr, &handle);
76 }
77 return handle.Pass();
78 }
79
80 void* MappedSharedBuffer::PtrFromOffset(uint64_t offset) const {
81 MOJO_DCHECK(buffer_ptr_);
82
83 if (offset == FifoAllocator::kNullOffset) {
84 return nullptr;
85 }
86
87 MOJO_DCHECK(offset < size_);
88 return buffer_ptr_.get() + offset;
89 }
90
91 uint64_t MappedSharedBuffer::OffsetFromPtr(void *ptr) const {
92 MOJO_DCHECK(buffer_ptr_);
93 if (ptr == nullptr) {
94 return FifoAllocator::kNullOffset;
95 }
96 uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get();
97 MOJO_DCHECK(offset < size_);
98 return offset;
99 }
100
101 void MappedSharedBuffer::OnInit() {}
102
103 } // namespace media
104 } // namespace mojo
OLDNEW
« 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