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 7namespace mojo { 8 9// static 10ScopedSharedBufferHandle SharedBufferHandle::Create(uint64_t num_bytes) { 11 MojoCreateSharedBufferOptions options = { 12 sizeof(options), MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE}; 13 SharedBufferHandle handle; 14 MojoCreateSharedBuffer(&options, num_bytes, handle.mutable_value()); 15 return MakeScopedHandle(handle); 16} 17 18ScopedSharedBufferHandle 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_OPTIONS_FLAG_NONE}; 26 if (access_mode == AccessMode::READ_ONLY) 27 options.flags |= MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_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 34ScopedSharedBufferMapping SharedBufferHandle::Map(uint64_t size) const { 35 return MapAtOffset(size, 0); 36} 37 38ScopedSharedBufferMapping SharedBufferHandle::MapAtOffset( 39 uint64_t size, 40 uint64_t offset) const { 41 void* buffer = nullptr; 42 MojoMapBuffer(value(), offset, size, &buffer, MOJO_MAP_BUFFER_FLAG_NONE); 43 return ScopedSharedBufferMapping(buffer); 44} 45 46} // namespace mojo 47