| Index: services/ui/common/mus_gpu_memory_buffer_manager.cc
|
| diff --git a/services/ui/common/mus_gpu_memory_buffer_manager.cc b/services/ui/common/mus_gpu_memory_buffer_manager.cc
|
| index eda17128a87cb968ce167c3838b2a190645d5b17..6158144de0c2e3e67d6667a68e0ac7233dd35644 100644
|
| --- a/services/ui/common/mus_gpu_memory_buffer_manager.cc
|
| +++ b/services/ui/common/mus_gpu_memory_buffer_manager.cc
|
| @@ -19,34 +19,49 @@ MusGpuMemoryBufferManager::MusGpuMemoryBufferManager(
|
|
|
| MusGpuMemoryBufferManager::~MusGpuMemoryBufferManager() {}
|
|
|
| -std::unique_ptr<gfx::GpuMemoryBuffer>
|
| -MusGpuMemoryBufferManager::CreateGpuMemoryBuffer(
|
| +gfx::GpuMemoryBufferHandle
|
| +MusGpuMemoryBufferManager::CreateGpuMemoryBufferHandle(
|
| + gfx::GpuMemoryBufferId id,
|
| + int client_id,
|
| const gfx::Size& size,
|
| gfx::BufferFormat format,
|
| gfx::BufferUsage usage,
|
| gpu::SurfaceHandle surface_handle) {
|
| DCHECK(CalledOnValidThread());
|
| - gfx::GpuMemoryBufferId id(next_gpu_memory_id_++);
|
| - const bool is_native =
|
| - gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage);
|
| - if (is_native) {
|
| - gfx::GpuMemoryBufferHandle handle;
|
| - 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 (gpu::GetNativeGpuMemoryBufferType() != gfx::EMPTY_BUFFER) {
|
| + const bool is_native =
|
| + gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage);
|
| + if (is_native) {
|
| + gfx::GpuMemoryBufferHandle handle;
|
| + gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, client_id,
|
| + surface_handle, &handle);
|
| + 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::CreateGpuMemoryBuffer(id, size,
|
| + format);
|
| +}
|
| +
|
| +std::unique_ptr<gfx::GpuMemoryBuffer>
|
| +MusGpuMemoryBufferManager::CreateGpuMemoryBuffer(
|
| + const gfx::Size& size,
|
| + gfx::BufferFormat format,
|
| + gfx::BufferUsage usage,
|
| + gpu::SurfaceHandle surface_handle) {
|
| + gfx::GpuMemoryBufferId id(next_gpu_memory_id_++);
|
| + gfx::GpuMemoryBufferHandle handle = CreateGpuMemoryBufferHandle(
|
| + 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>
|
| @@ -69,12 +84,18 @@ void MusGpuMemoryBufferManager::SetDestructionSyncToken(
|
| void MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer(
|
| gfx::GpuMemoryBufferId id,
|
| int client_id,
|
| - bool is_native,
|
| const gpu::SyncToken& sync_token) {
|
| DCHECK(CalledOnValidThread());
|
| - if (is_native) {
|
| + if (native_buffers_[client_id].erase(id))
|
| gpu_service_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
|
| - }
|
| +}
|
| +
|
| +void MusGpuMemoryBufferManager::DestroyAllGpuMemoryBufferForClient(
|
| + int client_id) {
|
| + DCHECK(CalledOnValidThread());
|
| + for (gfx::GpuMemoryBufferId id : native_buffers_[client_id])
|
| + gpu_service_->DestroyGpuMemoryBuffer(id, client_id, gpu::SyncToken());
|
| + native_buffers_.erase(client_id);
|
| }
|
|
|
| } // namespace ui
|
|
|