| OLD | NEW | 
|   1 // Copyright 2015 The Chromium Authors. All rights reserved. |   1 // Copyright 2015 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 #ifndef SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ |   5 #ifndef SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ | 
|   6 #define SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ |   6 #define SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ | 
|   7  |   7  | 
|   8 #include <memory> |   8 #include <memory> | 
|   9 #include <vector> |   9 #include <vector> | 
|  10  |  10  | 
|  11 #include "base/macros.h" |  11 #include "base/macros.h" | 
|  12 #include "base/memory/ref_counted.h" |  12 #include "base/memory/ref_counted.h" | 
|  13 #include "base/memory/weak_ptr.h" |  | 
|  14 #include "base/threading/thread.h" |  13 #include "base/threading/thread.h" | 
|  15 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |  14 #include "gpu/ipc/client/client_gpu_memory_buffer_manager.h" | 
|  16 #include "services/ui/public/interfaces/gpu_service.mojom.h" |  15 #include "services/ui/public/interfaces/gpu_service.mojom.h" | 
|  17  |  16  | 
|  18 namespace base { |  17 namespace base { | 
|  19 class WaitableEvent; |  18 class WaitableEvent; | 
|  20 } |  19 } | 
|  21  |  20  | 
|  22 namespace service_manager { |  21 namespace service_manager { | 
|  23 class Connector; |  22 class Connector; | 
|  24 } |  23 } | 
|  25  |  24  | 
|  26 namespace ui { |  25 namespace ui { | 
|  27  |  26  | 
|  28 namespace mojom { |  27 namespace mojom { | 
|  29 class GpuService; |  28 class GpuService; | 
|  30 } |  29 } | 
|  31  |  30  | 
|  32 class MojoGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager { |  31 class MojoGpuMemoryBufferManager | 
 |  32     : public gpu::ClientGpuMemoryBufferManager::Delegate { | 
|  33  public: |  33  public: | 
|  34   explicit MojoGpuMemoryBufferManager(service_manager::Connector* connector); |  34   explicit MojoGpuMemoryBufferManager(service_manager::Connector* connector); | 
|  35   ~MojoGpuMemoryBufferManager() override; |  35   ~MojoGpuMemoryBufferManager() override; | 
|  36  |  36  | 
 |  37   gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager() { | 
 |  38     return gpu_memory_buffer_manager_.get(); | 
 |  39   } | 
 |  40  | 
|  37  private: |  41  private: | 
|  38   void InitThread(); |  42   void InitThread(); | 
|  39   void TearDownThread(); |  43   void TearDownThread(); | 
|  40   void AllocateGpuMemoryBufferOnThread(const gfx::Size& size, |  44   void AllocateGpuMemoryBufferOnThread(const gfx::Size& size, | 
|  41                                        gfx::BufferFormat format, |  45                                        gfx::BufferFormat format, | 
|  42                                        gfx::BufferUsage usage, |  46                                        gfx::BufferUsage usage, | 
|  43                                        gfx::GpuMemoryBufferHandle* handle, |  47                                        gfx::GpuMemoryBufferHandle* handle, | 
|  44                                        base::WaitableEvent* wait); |  48                                        base::WaitableEvent* wait); | 
|  45   void DeletedGpuMemoryBuffer(gfx::GpuMemoryBufferId id, |  | 
|  46                               const gpu::SyncToken& sync_token); |  | 
|  47  |  49  | 
|  48   // Overridden from gpu::GpuMemoryBufferManager: |  50   // gpu::ClientGpuMemoryBufferManager::Delegate: | 
|  49   std::unique_ptr<gfx::GpuMemoryBuffer> AllocateGpuMemoryBuffer( |  51   gfx::GpuMemoryBufferHandle GetSharedMemoryHandle( | 
|  50       const gfx::Size& size, |  52       const gfx::Size& size, | 
|  51       gfx::BufferFormat format, |  53       gfx::BufferFormat format, | 
|  52       gfx::BufferUsage usage, |  54       gfx::BufferUsage usage) override; | 
|  53       gpu::SurfaceHandle surface_handle) override; |  55   void DeletedGpuMemoryBuffer(gfx::GpuMemoryBufferId id, | 
|  54   std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBufferFromHandle( |  56                               const gpu::SyncToken& token) override; | 
|  55       const gfx::GpuMemoryBufferHandle& handle, |  57  | 
|  56       const gfx::Size& size, |  | 
|  57       gfx::BufferFormat format) override; |  | 
|  58   gfx::GpuMemoryBuffer* GpuMemoryBufferFromClientBuffer( |  | 
|  59       ClientBuffer buffer) override; |  | 
|  60   void SetDestructionSyncToken(gfx::GpuMemoryBuffer* buffer, |  | 
|  61                                const gpu::SyncToken& sync_token) override; |  | 
|  62   int counter_ = 0; |  58   int counter_ = 0; | 
|  63   // TODO(sad): Explore the option of doing this from an existing thread. |  59   // TODO(sad): Explore the option of doing this from an existing thread. | 
|  64   base::Thread thread_; |  60   base::Thread thread_; | 
 |  61   scoped_refptr<gpu::ClientGpuMemoryBufferManager> gpu_memory_buffer_manager_; | 
|  65   mojom::GpuServicePtr gpu_service_; |  62   mojom::GpuServicePtr gpu_service_; | 
|  66   std::unique_ptr<service_manager::Connector> connector_; |  63   std::unique_ptr<service_manager::Connector> connector_; | 
|  67   base::WeakPtrFactory<MojoGpuMemoryBufferManager> weak_ptr_factory_; |  | 
|  68  |  64  | 
|  69   DISALLOW_COPY_AND_ASSIGN(MojoGpuMemoryBufferManager); |  65   DISALLOW_COPY_AND_ASSIGN(MojoGpuMemoryBufferManager); | 
|  70 }; |  66 }; | 
|  71  |  67  | 
|  72 }  // namespace ui |  68 }  // namespace ui | 
|  73  |  69  | 
|  74 #endif  // SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ |  70 #endif  // SERVICES_UI_PUBLIC_CPP_MOJO_GPU_MEMORY_BUFFER_MANAGER_H_ | 
| OLD | NEW |