// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "media_perception/shared_memory_provider.h"

namespace mri {

SharedMemoryProvider::SharedMemoryProvider(
    bool read_only, mojo::edk::ScopedPlatformHandle* scoped_handle,
    uint32_t memory_size_in_bytes) {
  base::SharedMemoryHandle memory_handle(
      base::FileDescriptor(scoped_handle->release().handle, true));
  mapped_size_ = memory_size_in_bytes;
  shared_memory_.reset(new base::SharedMemory(memory_handle, read_only));
}

SharedMemoryProvider::~SharedMemoryProvider() {
  if (shared_memory_ && shared_memory_->memory()) {
    LOG(INFO) << __func__ << ": Unmapping memory for in-process access @"
              << shared_memory_->memory() << '.';
    CHECK(shared_memory_->Unmap());
  }
}

std::unique_ptr<SharedMemoryProvider>
SharedMemoryProvider::CreateFromRawFileDescriptor(
    bool read_only, mojo::ScopedHandle fd_handle,
    uint32_t memory_size_in_bytes) {
  mojo::edk::ScopedPlatformHandle scoped_platform_handle;
  MojoResult mojo_result = mojo::edk::PassWrappedPlatformHandle(
      fd_handle.release().value(), &scoped_platform_handle);
  if (mojo_result != MOJO_RESULT_OK) {
    LOG(ERROR) << "Failed to unwrap handle: " << mojo_result;
    return nullptr;
  }
  return std::unique_ptr<SharedMemoryProvider>(new SharedMemoryProvider(
      read_only, &scoped_platform_handle, memory_size_in_bytes));
}

uint32_t SharedMemoryProvider::GetMemorySizeInBytes() {
  return static_cast<uint32_t>(mapped_size_);
}

base::SharedMemory* SharedMemoryProvider::GetSharedMemoryForInProcessAccess() {
  if (!shared_memory_->memory()) {
    CHECK(shared_memory_->Map(mapped_size_));
    LOG(INFO) << __func__ << ": Mapped memory for in-process access @"
              << shared_memory_->memory() << '.';
  }
  return shared_memory_.get();
}

}  // namespace mri
