| OLD | NEW | 
|   1 // Copyright 2014 The Chromium Authors. All rights reserved. |   1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
|   2 // Use of this source code is governed by a BSD-style license that can be |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 #include "content/child/child_gpu_memory_buffer_manager.h" |   5 #include "content/child/child_gpu_memory_buffer_manager.h" | 
|   6  |   6  | 
|   7 #include <memory> |   7 #include <memory> | 
|   8 #include <utility> |   8 #include <utility> | 
|   9  |   9  | 
|  10 #include "content/common/child_process_messages.h" |  10 #include "content/common/child_process_messages.h" | 
|  11 #include "content/common/generic_shared_memory_id_generator.h" |  11 #include "content/common/generic_shared_memory_id_generator.h" | 
|  12 #include "gpu/ipc/client/gpu_memory_buffer_impl.h" |  12 #include "gpu/ipc/client/gpu_memory_buffer_impl.h" | 
|  13  |  13  | 
|  14 namespace content { |  14 namespace content { | 
|  15 namespace { |  | 
|  16  |  | 
|  17 void DeletedGpuMemoryBuffer(ThreadSafeSender* sender, |  | 
|  18                             gfx::GpuMemoryBufferId id, |  | 
|  19                             const gpu::SyncToken& sync_token) { |  | 
|  20   TRACE_EVENT0("renderer", |  | 
|  21                "ChildGpuMemoryBufferManager::DeletedGpuMemoryBuffer"); |  | 
|  22   sender->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(id, sync_token)); |  | 
|  23 } |  | 
|  24  |  | 
|  25 }  // namespace |  | 
|  26  |  15  | 
|  27 ChildGpuMemoryBufferManager::ChildGpuMemoryBufferManager( |  16 ChildGpuMemoryBufferManager::ChildGpuMemoryBufferManager( | 
|  28     ThreadSafeSender* sender) |  17     ThreadSafeSender* sender) | 
|  29     : sender_(sender) { |  18     : sender_(sender), | 
 |  19       gpu_memory_buffer_manager_( | 
 |  20           make_scoped_refptr(new gpu::ClientGpuMemoryBufferManager(this))) {} | 
 |  21  | 
 |  22 ChildGpuMemoryBufferManager::~ChildGpuMemoryBufferManager() { | 
 |  23   gpu_memory_buffer_manager_->reset_delegate(); | 
|  30 } |  24 } | 
|  31  |  25  | 
|  32 ChildGpuMemoryBufferManager::~ChildGpuMemoryBufferManager() { |  26 gfx::GpuMemoryBufferHandle ChildGpuMemoryBufferManager::GetSharedMemoryHandle( | 
|  33 } |  | 
|  34  |  | 
|  35 std::unique_ptr<gfx::GpuMemoryBuffer> |  | 
|  36 ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer( |  | 
|  37     const gfx::Size& size, |  27     const gfx::Size& size, | 
|  38     gfx::BufferFormat format, |  28     gfx::BufferFormat format, | 
|  39     gfx::BufferUsage usage, |  29     gfx::BufferUsage usage) { | 
|  40     gpu::SurfaceHandle surface_handle) { |  | 
|  41   DCHECK_EQ(gpu::kNullSurfaceHandle, surface_handle); |  | 
|  42   TRACE_EVENT2("renderer", |  | 
|  43                "ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer", |  | 
|  44                "width", |  | 
|  45                size.width(), |  | 
|  46                "height", |  | 
|  47                size.height()); |  | 
|  48  |  | 
|  49   gfx::GpuMemoryBufferHandle handle; |  30   gfx::GpuMemoryBufferHandle handle; | 
|  50   IPC::Message* message = new ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer( |  31   IPC::Message* message = new ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer( | 
|  51       content::GetNextGenericSharedMemoryId(), size.width(), size.height(), |  32       content::GetNextGenericSharedMemoryId(), size.width(), size.height(), | 
|  52       format, usage, &handle); |  33       format, usage, &handle); | 
|  53   bool success = sender_->Send(message); |  34   bool success = sender_->Send(message); | 
|  54   if (!success || handle.is_null()) |  35   return success ? handle : gfx::GpuMemoryBufferHandle(); | 
|  55     return nullptr; |  | 
|  56  |  | 
|  57   std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer( |  | 
|  58       gpu::GpuMemoryBufferImpl::CreateFromHandle( |  | 
|  59           handle, size, format, usage, |  | 
|  60           base::Bind(&DeletedGpuMemoryBuffer, base::RetainedRef(sender_), |  | 
|  61                      handle.id))); |  | 
|  62   if (!buffer) { |  | 
|  63     sender_->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer( |  | 
|  64         handle.id, gpu::SyncToken())); |  | 
|  65     return nullptr; |  | 
|  66   } |  | 
|  67  |  | 
|  68   return std::move(buffer); |  | 
|  69 } |  36 } | 
|  70  |  37  | 
|  71 std::unique_ptr<gfx::GpuMemoryBuffer> |  38 void ChildGpuMemoryBufferManager::DeletedGpuMemoryBuffer( | 
|  72 ChildGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle( |  39     gfx::GpuMemoryBufferId id, | 
|  73     const gfx::GpuMemoryBufferHandle& handle, |  40     const gpu::SyncToken& token) { | 
|  74     const gfx::Size& size, |  41   TRACE_EVENT0("renderer", | 
|  75     gfx::BufferFormat format) { |  42                "ChildGpuMemoryBufferManager::DeletedGpuMemoryBuffer"); | 
|  76   NOTIMPLEMENTED(); |  43   sender_->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(id, token)); | 
|  77   return nullptr; |  | 
|  78 } |  | 
|  79  |  | 
|  80 gfx::GpuMemoryBuffer* |  | 
|  81 ChildGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( |  | 
|  82     ClientBuffer buffer) { |  | 
|  83   return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer); |  | 
|  84 } |  | 
|  85  |  | 
|  86 void ChildGpuMemoryBufferManager::SetDestructionSyncToken( |  | 
|  87     gfx::GpuMemoryBuffer* buffer, |  | 
|  88     const gpu::SyncToken& sync_token) { |  | 
|  89   static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( |  | 
|  90       sync_token); |  | 
|  91 } |  44 } | 
|  92  |  45  | 
|  93 }  // namespace content |  46 }  // namespace content | 
| OLD | NEW |