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
3 // found in the LICENSE file.
5 #ifndef CONTENT_BROWSER_GPU_BROWSER_GPU_MEMORY_BUFFER_MANAGER_H_
6 #define CONTENT_BROWSER_GPU_BROWSER_GPU_MEMORY_BUFFER_MANAGER_H_
8 #include "base/callback.h"
9 #include "base/memory/weak_ptr.h"
10 #include "base/trace_event/memory_dump_provider.h"
11 #include "content/common/content_export.h"
12 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
15 class GpuMemoryBufferFactoryHost
;
16 class GpuMemoryBufferImpl
;
18 class CONTENT_EXPORT BrowserGpuMemoryBufferManager
19 : public gpu::GpuMemoryBufferManager
,
20 public base::trace_event::MemoryDumpProvider
{
22 typedef base::Callback
<void(const gfx::GpuMemoryBufferHandle
& handle
)>
25 BrowserGpuMemoryBufferManager(
26 GpuMemoryBufferFactoryHost
* gpu_memory_buffer_factory_host
,
28 ~BrowserGpuMemoryBufferManager() override
;
30 static BrowserGpuMemoryBufferManager
* current();
32 // Overridden from gpu::GpuMemoryBufferManager:
33 scoped_ptr
<gfx::GpuMemoryBuffer
> AllocateGpuMemoryBuffer(
34 const gfx::Size
& size
,
35 gfx::GpuMemoryBuffer::Format format
,
36 gfx::GpuMemoryBuffer::Usage usage
) override
;
37 gfx::GpuMemoryBuffer
* GpuMemoryBufferFromClientBuffer(
38 ClientBuffer buffer
) override
;
39 void SetDestructionSyncPoint(gfx::GpuMemoryBuffer
* buffer
,
40 uint32 sync_point
) override
;
42 // Overridden from base::trace_event::MemoryDumpProvider:
43 bool OnMemoryDump(base::trace_event::ProcessMemoryDump
* pmd
) override
;
45 // Virtual for testing.
46 virtual scoped_ptr
<gfx::GpuMemoryBuffer
> AllocateGpuMemoryBufferForScanout(
47 const gfx::Size
& size
,
48 gfx::GpuMemoryBuffer::Format format
,
51 void AllocateGpuMemoryBufferForChildProcess(
52 const gfx::Size
& size
,
53 gfx::GpuMemoryBuffer::Format format
,
54 gfx::GpuMemoryBuffer::Usage usage
,
55 base::ProcessHandle child_process_handle
,
57 const AllocationCallback
& callback
);
58 void ChildProcessDeletedGpuMemoryBuffer(
59 gfx::GpuMemoryBufferId id
,
60 base::ProcessHandle child_process_handle
,
63 void ProcessRemoved(base::ProcessHandle process_handle
, int client_id
);
68 : format(gfx::GpuMemoryBuffer::RGBA_8888
), type(gfx::EMPTY_BUFFER
) {}
69 BufferInfo(const gfx::Size
& size
,
70 gfx::GpuMemoryBuffer::Format format
,
71 gfx::GpuMemoryBufferType type
)
72 : size(size
), format(format
), type(type
) {}
75 gfx::GpuMemoryBuffer::Format format
;
76 gfx::GpuMemoryBufferType type
;
78 struct AllocateGpuMemoryBufferRequest
;
80 scoped_ptr
<gfx::GpuMemoryBuffer
> AllocateGpuMemoryBufferCommon(
81 const gfx::Size
& size
,
82 gfx::GpuMemoryBuffer::Format format
,
83 gfx::GpuMemoryBuffer::Usage usage
,
85 void AllocateGpuMemoryBufferOnIO(AllocateGpuMemoryBufferRequest
* request
);
86 void GpuMemoryBufferAllocatedOnIO(AllocateGpuMemoryBufferRequest
* request
,
87 const gfx::GpuMemoryBufferHandle
& handle
);
88 void GpuMemoryBufferDeleted(gfx::GpuMemoryBufferId id
,
91 void GpuMemoryBufferAllocatedForChildProcess(
93 const AllocationCallback
& callback
,
94 const gfx::GpuMemoryBufferHandle
& handle
);
96 GpuMemoryBufferFactoryHost
* gpu_memory_buffer_factory_host_
;
99 typedef base::hash_map
<gfx::GpuMemoryBufferId
, BufferInfo
> BufferMap
;
100 typedef base::hash_map
<int, BufferMap
> ClientMap
;
103 base::WeakPtrFactory
<BrowserGpuMemoryBufferManager
> weak_ptr_factory_
;
105 DISALLOW_COPY_AND_ASSIGN(BrowserGpuMemoryBufferManager
);
108 } // namespace content
110 #endif // CONTENT_BROWSER_GPU_BROWSER_GPU_MEMORY_BUFFER_MANAGER_H_