| Index: services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
|
| diff --git a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
|
| index 342670b1f499efa0be663afe2770642a8451ec4b..81b5620d7bc213fb1886251dda83f112af64c5e4 100644
|
| --- a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
|
| +++ b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
|
| @@ -4,22 +4,69 @@
|
|
|
| #include "services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| -#include "services/ui/public/cpp/mojo_gpu_memory_buffer.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/memory/shared_memory.h"
|
| +#include "gpu/ipc/client/gpu_memory_buffer_impl.h"
|
| +#include "mojo/public/cpp/system/buffer.h"
|
| +#include "mojo/public/cpp/system/platform_handle.h"
|
| +#include "ui/gfx/buffer_format_util.h"
|
|
|
| namespace ui {
|
|
|
| -MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager() {}
|
| +MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager()
|
| + : weak_ptr_factory_(this) {}
|
|
|
| MojoGpuMemoryBufferManager::~MojoGpuMemoryBufferManager() {}
|
|
|
| +void MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer(
|
| + gfx::GpuMemoryBufferId id,
|
| + const gpu::SyncToken& sync_token) {
|
| +}
|
| +
|
| std::unique_ptr<gfx::GpuMemoryBuffer>
|
| MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
|
| const gfx::Size& size,
|
| gfx::BufferFormat format,
|
| gfx::BufferUsage usage,
|
| gpu::SurfaceHandle surface_handle) {
|
| - return MojoGpuMemoryBufferImpl::Create(size, format, usage);
|
| + // TODO(sad): Get the memory buffer handle from GpuService.
|
| + size_t bytes = gfx::BufferSizeForBufferFormat(size, format);
|
| +
|
| + mojo::ScopedSharedBufferHandle handle =
|
| + mojo::SharedBufferHandle::Create(bytes);
|
| + if (!handle.is_valid())
|
| + return nullptr;
|
| +
|
| + base::SharedMemoryHandle shm_handle;
|
| + size_t shared_memory_size;
|
| + bool readonly;
|
| + MojoResult result = mojo::UnwrapSharedMemoryHandle(
|
| + std::move(handle), &shm_handle, &shared_memory_size, &readonly);
|
| + if (result != MOJO_RESULT_OK)
|
| + return nullptr;
|
| + DCHECK_EQ(shared_memory_size, bytes);
|
| +
|
| + const int stride = base::checked_cast<int>(
|
| + gfx::RowSizeForBufferFormat(size.width(), format, 0));
|
| +
|
| + gfx::GpuMemoryBufferHandle gmb_handle;
|
| + gmb_handle.type = gfx::SHARED_MEMORY_BUFFER;
|
| + gmb_handle.id = gfx::GpuMemoryBufferId(++counter_);
|
| + gmb_handle.handle = shm_handle;
|
| + gmb_handle.offset = 0;
|
| + gmb_handle.stride = stride;
|
| +
|
| + std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer(
|
| + gpu::GpuMemoryBufferImpl::CreateFromHandle(
|
| + gmb_handle, size, format, usage,
|
| + base::Bind(&MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
|
| + weak_ptr_factory_.GetWeakPtr(), gmb_handle.id)));
|
| + if (!buffer)
|
| + return nullptr;
|
| +
|
| + return std::move(buffer);
|
| }
|
|
|
| std::unique_ptr<gfx::GpuMemoryBuffer>
|
| @@ -27,20 +74,21 @@ MojoGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
|
| const gfx::GpuMemoryBufferHandle& handle,
|
| const gfx::Size& size,
|
| gfx::BufferFormat format) {
|
| - const gfx::BufferUsage usage = gfx::BufferUsage::GPU_READ;
|
| - return MojoGpuMemoryBufferImpl::CreateFromHandle(handle, size, format, usage);
|
| + NOTIMPLEMENTED();
|
| + return nullptr;
|
| }
|
|
|
| gfx::GpuMemoryBuffer*
|
| MojoGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
|
| ClientBuffer buffer) {
|
| - return MojoGpuMemoryBufferImpl::FromClientBuffer(buffer);
|
| + return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer);
|
| }
|
|
|
| void MojoGpuMemoryBufferManager::SetDestructionSyncToken(
|
| gfx::GpuMemoryBuffer* buffer,
|
| const gpu::SyncToken& sync_token) {
|
| - NOTIMPLEMENTED();
|
| + static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
|
| + sync_token);
|
| }
|
|
|
| } // namespace ui
|
|
|