OLD | NEW |
---|---|
(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 <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.
| |
6 | |
7 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h" | |
8 | |
9 namespace mojo { | |
10 namespace media { | |
11 | |
12 MappedSharedBuffer::MappedSharedBuffer() {} | |
13 | |
14 MappedSharedBuffer::~MappedSharedBuffer() {} | |
15 | |
16 void MappedSharedBuffer::InitNew(uint64_t size) { | |
17 assert(size > 0); | |
18 | |
19 buffer_.reset(new SharedBuffer(size)); | |
20 handle_.reset(); | |
21 | |
22 InitInternal(buffer_->handle, size); | |
23 } | |
24 | |
25 void MappedSharedBuffer::InitFromHandle( | |
26 ScopedSharedBufferHandle handle, | |
27 uint64_t size) { | |
28 assert(handle.is_valid()); | |
29 assert(size > 0); | |
30 | |
31 buffer_.reset(); | |
32 handle_ = handle.Pass(); | |
33 | |
34 InitInternal(handle_, size); | |
35 } | |
36 | |
37 void MappedSharedBuffer::InitInternal( | |
38 ScopedSharedBufferHandle& handle, | |
39 uint64_t size) { | |
40 assert(handle.is_valid()); | |
41 assert(size > 0); | |
42 | |
43 size_ = size; | |
44 buffer_ptr_.reset(); | |
45 | |
46 void* ptr; | |
47 auto result = MapBuffer( | |
48 handle.get(), | |
49 0, // offset | |
50 size, | |
51 &ptr, | |
52 MOJO_MAP_BUFFER_FLAG_NONE); | |
53 assert(result == MOJO_RESULT_OK); | |
54 assert(ptr); | |
55 | |
56 buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr)); | |
57 | |
58 OnInit(); | |
59 } | |
60 | |
61 bool MappedSharedBuffer::initialized() { | |
62 return buffer_ptr_ != nullptr; | |
63 } | |
64 | |
65 uint64_t MappedSharedBuffer::size() { | |
66 return size_; | |
67 } | |
68 | |
69 ScopedSharedBufferHandle MappedSharedBuffer::GetDuplicateHandle() { | |
70 assert(initialized()); | |
71 ScopedSharedBufferHandle handle; | |
72 // 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
| |
73 DuplicateBuffer(buffer_->handle.get(), nullptr, &handle); | |
74 return handle.Pass(); | |
75 } | |
76 | |
77 void* MappedSharedBuffer::PtrFromOffset(uint64_t offset) { | |
78 assert(buffer_ptr_); | |
79 | |
80 if (offset == FifoAllocator::kNullOffset) { | |
81 return nullptr; | |
82 } | |
83 | |
84 assert(offset < size_); | |
85 return buffer_ptr_.get() + offset; | |
86 } | |
87 | |
88 uint64_t MappedSharedBuffer::OffsetFromPtr(void *ptr) { | |
89 assert(buffer_ptr_); | |
90 if (ptr == nullptr) { | |
91 return FifoAllocator::kNullOffset; | |
92 } | |
93 uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get(); | |
94 assert(offset < size_); | |
95 return offset; | |
96 } | |
97 | |
98 void MappedSharedBuffer::OnInit() {} | |
99 | |
100 } // namespace media | |
101 } // namespace mojo | |
OLD | NEW |