OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/public/cpp/environment/logging.h" | 5 #include "mojo/public/cpp/environment/logging.h" |
6 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h" | 6 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h" |
7 | 7 |
8 namespace mojo { | 8 namespace mojo { |
9 namespace media { | 9 namespace media { |
10 | 10 |
11 MappedSharedBuffer::MappedSharedBuffer() {} | 11 MappedSharedBuffer::MappedSharedBuffer() {} |
12 | 12 |
13 MappedSharedBuffer::~MappedSharedBuffer() {} | 13 MappedSharedBuffer::~MappedSharedBuffer() {} |
14 | 14 |
15 void MappedSharedBuffer::InitNew(uint64_t size) { | 15 void MappedSharedBuffer::InitNew(uint64_t size) { |
16 MOJO_DCHECK(size > 0); | 16 MOJO_DCHECK(size > 0); |
17 | 17 |
18 buffer_.reset(new SharedBuffer(size)); | 18 buffer_.reset(new SharedBuffer(size)); |
19 handle_.reset(); | 19 handle_.reset(); |
20 | 20 |
21 InitInternal(buffer_->handle, size); | 21 InitInternal(buffer_->handle); |
22 } | 22 } |
23 | 23 |
24 void MappedSharedBuffer::InitFromHandle( | 24 void MappedSharedBuffer::InitFromHandle(ScopedSharedBufferHandle handle) { |
25 ScopedSharedBufferHandle handle, | |
26 uint64_t size) { | |
27 MOJO_DCHECK(handle.is_valid()); | 25 MOJO_DCHECK(handle.is_valid()); |
28 MOJO_DCHECK(size > 0); | |
29 | 26 |
30 buffer_.reset(); | 27 buffer_.reset(); |
31 handle_ = handle.Pass(); | 28 handle_ = handle.Pass(); |
32 | 29 |
33 InitInternal(handle_, size); | 30 InitInternal(handle_); |
34 } | 31 } |
35 | 32 |
36 void MappedSharedBuffer::InitInternal( | 33 void MappedSharedBuffer::InitInternal(const ScopedSharedBufferHandle& handle) { |
37 ScopedSharedBufferHandle& handle, | |
38 uint64_t size) { | |
39 MOJO_DCHECK(handle.is_valid()); | 34 MOJO_DCHECK(handle.is_valid()); |
| 35 |
| 36 // Query the buffer for its size. |
| 37 // TODO(johngro) : It would be nice if we could do something other than |
| 38 // DCHECK if things don't go exactly our way. |
| 39 MojoBufferInformation info; |
| 40 MojoResult res = MojoGetBufferInformation(handle.get().value(), |
| 41 &info, |
| 42 sizeof(info)); |
| 43 uint64_t size = info.num_bytes; |
| 44 MOJO_DCHECK(res == MOJO_RESULT_OK); |
40 MOJO_DCHECK(size > 0); | 45 MOJO_DCHECK(size > 0); |
41 | 46 |
42 size_ = size; | 47 size_ = size; |
43 buffer_ptr_.reset(); | 48 buffer_ptr_.reset(); |
44 | 49 |
45 void* ptr; | 50 void* ptr; |
46 auto result = MapBuffer( | 51 auto result = MapBuffer( |
47 handle.get(), | 52 handle.get(), |
48 0, // offset | 53 0, // offset |
49 size, | 54 size, |
50 &ptr, | 55 &ptr, |
51 MOJO_MAP_BUFFER_FLAG_NONE); | 56 MOJO_MAP_BUFFER_FLAG_NONE); |
52 MOJO_DCHECK(result == MOJO_RESULT_OK); | 57 MOJO_DCHECK(result == MOJO_RESULT_OK); |
53 MOJO_DCHECK(ptr); | 58 MOJO_DCHECK(ptr); |
54 | 59 |
55 buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr)); | 60 buffer_ptr_.reset(reinterpret_cast<uint8_t*>(ptr)); |
56 | 61 |
57 OnInit(); | 62 OnInit(); |
58 } | 63 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 if (ptr == nullptr) { | 98 if (ptr == nullptr) { |
94 return FifoAllocator::kNullOffset; | 99 return FifoAllocator::kNullOffset; |
95 } | 100 } |
96 uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get(); | 101 uint64_t offset = reinterpret_cast<uint8_t*>(ptr) - buffer_ptr_.get(); |
97 MOJO_DCHECK(offset < size_); | 102 MOJO_DCHECK(offset < size_); |
98 return offset; | 103 return offset; |
99 } | 104 } |
100 | 105 |
101 void MappedSharedBuffer::OnInit() {} | 106 void MappedSharedBuffer::OnInit() {} |
102 | 107 |
103 } // namespace media | 108 } // namespace media |
104 } // namespace mojo | 109 } // namespace mojo |
OLD | NEW |