| Index: services/ui/ws/mus_gpu_memory_buffer_manager.cc
|
| diff --git a/services/ui/ws/mus_gpu_memory_buffer_manager.cc b/services/ui/ws/mus_gpu_memory_buffer_manager.cc
|
| index 1dae509d8a1379ff0be5d2435644ba85e4be364d..ae7f079f12c89ffb00b2e6b9b98e9d933fc1f8be 100644
|
| --- a/services/ui/ws/mus_gpu_memory_buffer_manager.cc
|
| +++ b/services/ui/ws/mus_gpu_memory_buffer_manager.cc
|
| @@ -22,33 +22,48 @@ MusGpuMemoryBufferManager::MusGpuMemoryBufferManager(
|
|
|
| MusGpuMemoryBufferManager::~MusGpuMemoryBufferManager() {}
|
|
|
| -std::unique_ptr<gfx::GpuMemoryBuffer>
|
| -MusGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
|
| +gfx::GpuMemoryBufferHandle
|
| +MusGpuMemoryBufferManager::AllocateGpuMemoryBufferHandle(
|
| + gfx::GpuMemoryBufferId id,
|
| + int client_id,
|
| const gfx::Size& size,
|
| gfx::BufferFormat format,
|
| gfx::BufferUsage usage,
|
| gpu::SurfaceHandle surface_handle) {
|
| - gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId();
|
| + if (gpu::GetNativeGpuMemoryBufferType() == gfx::EMPTY_BUFFER)
|
| + return gfx::GpuMemoryBufferHandle();
|
| const bool is_native =
|
| gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage);
|
| if (is_native) {
|
| gfx::GpuMemoryBufferHandle handle;
|
| - gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, client_id_,
|
| + gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, client_id,
|
| surface_handle, &handle);
|
| - if (handle.is_null())
|
| - return nullptr;
|
| - return gpu::GpuMemoryBufferImpl::CreateFromHandle(
|
| - handle, size, format, usage,
|
| - base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer,
|
| - weak_factory_.GetWeakPtr(), id, client_id_, is_native));
|
| + if (!handle.is_null())
|
| + native_buffers_[client_id].insert(handle.id);
|
| + return handle;
|
| }
|
|
|
| DCHECK(gpu::GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage))
|
| << static_cast<int>(usage);
|
| - return gpu::GpuMemoryBufferImplSharedMemory::Create(
|
| - id, size, format,
|
| + return gpu::GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(id, size,
|
| + format);
|
| +}
|
| +
|
| +std::unique_ptr<gfx::GpuMemoryBuffer>
|
| +MusGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
|
| + const gfx::Size& size,
|
| + gfx::BufferFormat format,
|
| + gfx::BufferUsage usage,
|
| + gpu::SurfaceHandle surface_handle) {
|
| + gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId();
|
| + gfx::GpuMemoryBufferHandle handle = AllocateGpuMemoryBufferHandle(
|
| + id, client_id_, size, format, usage, surface_handle);
|
| + if (handle.is_null())
|
| + return nullptr;
|
| + return gpu::GpuMemoryBufferImpl::CreateFromHandle(
|
| + handle, size, format, usage,
|
| base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer,
|
| - weak_factory_.GetWeakPtr(), id, client_id_, is_native));
|
| + weak_factory_.GetWeakPtr(), id, client_id_));
|
| }
|
|
|
| std::unique_ptr<gfx::GpuMemoryBuffer>
|
| @@ -70,11 +85,13 @@ void MusGpuMemoryBufferManager::SetDestructionSyncToken(
|
| void MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer(
|
| gfx::GpuMemoryBufferId id,
|
| int client_id,
|
| - bool is_native,
|
| const gpu::SyncToken& sync_token) {
|
| - if (is_native) {
|
| - gpu_service_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
|
| - }
|
| + if (!native_buffers_.count(client_id) ||
|
| + !native_buffers_[client_id].erase(id))
|
| + return;
|
| + if (native_buffers_[client_id].empty())
|
| + native_buffers_.erase(client_id);
|
| + gpu_service_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
|
| }
|
|
|
| } // namespace ws
|
|
|