1*635a8641SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker
5*635a8641SAndroid Build Coastguard Worker #include "mojo/public/cpp/system/buffer.h"
6*635a8641SAndroid Build Coastguard Worker
7*635a8641SAndroid Build Coastguard Worker namespace mojo {
8*635a8641SAndroid Build Coastguard Worker
9*635a8641SAndroid Build Coastguard Worker // static
Create(uint64_t num_bytes)10*635a8641SAndroid Build Coastguard Worker ScopedSharedBufferHandle SharedBufferHandle::Create(uint64_t num_bytes) {
11*635a8641SAndroid Build Coastguard Worker MojoCreateSharedBufferOptions options = {sizeof(options),
12*635a8641SAndroid Build Coastguard Worker MOJO_CREATE_SHARED_BUFFER_FLAG_NONE};
13*635a8641SAndroid Build Coastguard Worker SharedBufferHandle handle;
14*635a8641SAndroid Build Coastguard Worker MojoCreateSharedBuffer(num_bytes, &options, handle.mutable_value());
15*635a8641SAndroid Build Coastguard Worker return MakeScopedHandle(handle);
16*635a8641SAndroid Build Coastguard Worker }
17*635a8641SAndroid Build Coastguard Worker
Clone(SharedBufferHandle::AccessMode access_mode) const18*635a8641SAndroid Build Coastguard Worker ScopedSharedBufferHandle SharedBufferHandle::Clone(
19*635a8641SAndroid Build Coastguard Worker SharedBufferHandle::AccessMode access_mode) const {
20*635a8641SAndroid Build Coastguard Worker ScopedSharedBufferHandle result;
21*635a8641SAndroid Build Coastguard Worker if (!is_valid())
22*635a8641SAndroid Build Coastguard Worker return result;
23*635a8641SAndroid Build Coastguard Worker
24*635a8641SAndroid Build Coastguard Worker MojoDuplicateBufferHandleOptions options = {
25*635a8641SAndroid Build Coastguard Worker sizeof(options), MOJO_DUPLICATE_BUFFER_HANDLE_FLAG_NONE};
26*635a8641SAndroid Build Coastguard Worker if (access_mode == AccessMode::READ_ONLY)
27*635a8641SAndroid Build Coastguard Worker options.flags |= MOJO_DUPLICATE_BUFFER_HANDLE_FLAG_READ_ONLY;
28*635a8641SAndroid Build Coastguard Worker SharedBufferHandle result_handle;
29*635a8641SAndroid Build Coastguard Worker MojoDuplicateBufferHandle(value(), &options, result_handle.mutable_value());
30*635a8641SAndroid Build Coastguard Worker result.reset(result_handle);
31*635a8641SAndroid Build Coastguard Worker return result;
32*635a8641SAndroid Build Coastguard Worker }
33*635a8641SAndroid Build Coastguard Worker
Map(uint64_t size) const34*635a8641SAndroid Build Coastguard Worker ScopedSharedBufferMapping SharedBufferHandle::Map(uint64_t size) const {
35*635a8641SAndroid Build Coastguard Worker return MapAtOffset(size, 0);
36*635a8641SAndroid Build Coastguard Worker }
37*635a8641SAndroid Build Coastguard Worker
MapAtOffset(uint64_t size,uint64_t offset) const38*635a8641SAndroid Build Coastguard Worker ScopedSharedBufferMapping SharedBufferHandle::MapAtOffset(
39*635a8641SAndroid Build Coastguard Worker uint64_t size,
40*635a8641SAndroid Build Coastguard Worker uint64_t offset) const {
41*635a8641SAndroid Build Coastguard Worker void* buffer = nullptr;
42*635a8641SAndroid Build Coastguard Worker MojoMapBuffer(value(), offset, size, nullptr, &buffer);
43*635a8641SAndroid Build Coastguard Worker return ScopedSharedBufferMapping(buffer);
44*635a8641SAndroid Build Coastguard Worker }
45*635a8641SAndroid Build Coastguard Worker
GetSize() const46*635a8641SAndroid Build Coastguard Worker uint64_t SharedBufferHandle::GetSize() const {
47*635a8641SAndroid Build Coastguard Worker MojoSharedBufferInfo buffer_info;
48*635a8641SAndroid Build Coastguard Worker buffer_info.struct_size = sizeof(buffer_info);
49*635a8641SAndroid Build Coastguard Worker return MojoGetBufferInfo(value(), nullptr, &buffer_info) == MOJO_RESULT_OK
50*635a8641SAndroid Build Coastguard Worker ? buffer_info.size
51*635a8641SAndroid Build Coastguard Worker : 0;
52*635a8641SAndroid Build Coastguard Worker }
53*635a8641SAndroid Build Coastguard Worker
54*635a8641SAndroid Build Coastguard Worker } // namespace mojo
55