Index: components/viz/common/server_gpu_memory_buffer_manager.h |
diff --git a/components/viz/common/server_gpu_memory_buffer_manager.h b/components/viz/common/server_gpu_memory_buffer_manager.h |
index c34eda825d3ec8e20583999d874e6aa90c1ad15e..f4c02376981fd3fdb5c6a05348f9151f6d735147 100644 |
--- a/components/viz/common/server_gpu_memory_buffer_manager.h |
+++ b/components/viz/common/server_gpu_memory_buffer_manager.h |
@@ -9,7 +9,8 @@ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
-#include "base/threading/thread_checker.h" |
+#include "base/sequenced_task_runner.h" |
+#include "base/synchronization/waitable_event.h" |
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
#include "gpu/ipc/host/gpu_memory_buffer_support.h" |
@@ -23,8 +24,9 @@ namespace viz { |
// This GpuMemoryBufferManager implementation is for [de]allocating gpu memory |
// from the gpu process over the mojom.GpuService api. |
-class ServerGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager, |
- public base::ThreadChecker { |
+// Note that |CreateGpuMemoryBuffer()| can be called on any thread. All the rest |
+// of the functions must be called on the thread this object is created on. |
+class ServerGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager { |
public: |
ServerGpuMemoryBufferManager(ui::mojom::GpuService* gpu_service, |
int client_id); |
@@ -36,13 +38,14 @@ class ServerGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager, |
void DestroyAllGpuMemoryBufferForClient(int client_id); |
- gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferHandle( |
+ void AllocateGpuMemoryBuffer( |
gfx::GpuMemoryBufferId id, |
int client_id, |
const gfx::Size& size, |
gfx::BufferFormat format, |
gfx::BufferUsage usage, |
- gpu::SurfaceHandle surface_handle); |
+ gpu::SurfaceHandle surface_handle, |
+ base::OnceCallback<void(const gfx::GpuMemoryBufferHandle&)> callback); |
// Overridden from gpu::GpuMemoryBufferManager: |
std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer( |
@@ -54,6 +57,15 @@ class ServerGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager, |
const gpu::SyncToken& sync_token) override; |
private: |
+ void OnGpuMemoryBufferAllocated( |
+ int client_id, |
+ base::OnceCallback<void(const gfx::GpuMemoryBufferHandle&)> callback, |
+ const gfx::GpuMemoryBufferHandle& handle); |
+ void SignalGpuMemoryBufferAllocated( |
+ gfx::GpuMemoryBufferHandle* handle, |
+ base::WaitableEvent* wait_event, |
+ const gfx::GpuMemoryBufferHandle& allocated_buffer_handle); |
+ |
ui::mojom::GpuService* gpu_service_; |
const int client_id_; |
int next_gpu_memory_id_ = 1; |
@@ -62,8 +74,10 @@ class ServerGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager, |
std::unordered_set<gfx::GpuMemoryBufferId, |
BASE_HASH_NAMESPACE::hash<gfx::GpuMemoryBufferId>>; |
std::unordered_map<int, NativeBuffers> native_buffers_; |
+ std::unordered_set<int> pending_buffers_; |
const gpu::GpuMemoryBufferConfigurationSet native_configurations_; |
+ scoped_refptr<base::SequencedTaskRunner> task_runner_; |
base::WeakPtrFactory<ServerGpuMemoryBufferManager> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(ServerGpuMemoryBufferManager); |