• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 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/system/buffer.h"
6 
7 namespace mojo {
8 
9 // static
Create(uint64_t num_bytes)10 ScopedSharedBufferHandle SharedBufferHandle::Create(uint64_t num_bytes) {
11   MojoCreateSharedBufferOptions options = {sizeof(options),
12                                            MOJO_CREATE_SHARED_BUFFER_FLAG_NONE};
13   SharedBufferHandle handle;
14   MojoCreateSharedBuffer(num_bytes, &options, handle.mutable_value());
15   return MakeScopedHandle(handle);
16 }
17 
Clone(SharedBufferHandle::AccessMode access_mode) const18 ScopedSharedBufferHandle SharedBufferHandle::Clone(
19     SharedBufferHandle::AccessMode access_mode) const {
20   ScopedSharedBufferHandle result;
21   if (!is_valid())
22     return result;
23 
24   MojoDuplicateBufferHandleOptions options = {
25       sizeof(options), MOJO_DUPLICATE_BUFFER_HANDLE_FLAG_NONE};
26   if (access_mode == AccessMode::READ_ONLY)
27     options.flags |= MOJO_DUPLICATE_BUFFER_HANDLE_FLAG_READ_ONLY;
28   SharedBufferHandle result_handle;
29   MojoDuplicateBufferHandle(value(), &options, result_handle.mutable_value());
30   result.reset(result_handle);
31   return result;
32 }
33 
Map(uint64_t size) const34 ScopedSharedBufferMapping SharedBufferHandle::Map(uint64_t size) const {
35   return MapAtOffset(size, 0);
36 }
37 
MapAtOffset(uint64_t size,uint64_t offset) const38 ScopedSharedBufferMapping SharedBufferHandle::MapAtOffset(
39     uint64_t size,
40     uint64_t offset) const {
41   void* buffer = nullptr;
42   MojoMapBuffer(value(), offset, size, nullptr, &buffer);
43   return ScopedSharedBufferMapping(buffer);
44 }
45 
GetSize() const46 uint64_t SharedBufferHandle::GetSize() const {
47   MojoSharedBufferInfo buffer_info;
48   buffer_info.struct_size = sizeof(buffer_info);
49   return MojoGetBufferInfo(value(), nullptr, &buffer_info) == MOJO_RESULT_OK
50              ? buffer_info.size
51              : 0;
52 }
53 
54 }  // namespace mojo
55