Index: content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
diff --git a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
index 9db43c78485cbadc0969a25a56f7826903bf88fa..b13eb4a7c4ee4ec3806bf24cf11152a058597d76 100644 |
--- a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
+++ b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
@@ -41,6 +41,29 @@ void GpuMemoryBufferDeleted( |
BrowserGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr; |
+void X(scoped_refptr<viz::ServerGpuMemoryBufferManager> manager, |
+ std::unique_ptr<gfx::GpuMemoryBuffer>* memory, |
+ base::WaitableEvent* wait_event, |
+ const gfx::Size& size, |
+ gfx::BufferFormat format, |
+ gfx::BufferUsage usage, |
+ gpu::SurfaceHandle surface_handle, |
+ GpuProcessHost* host) { |
+ if (!host || !host->gpu_service()) { |
+ wait_event->Signal(); |
+ return; |
+ } |
+ manager->set_gpu_service(host->gpu_service()); |
+ *memory = manager->CreateGpuMemoryBuffer(size, format, usage, surface_handle); |
+ wait_event->Signal(); |
+} |
+ |
+void RunCallback( |
+ const base::Callback<void(const gfx::GpuMemoryBufferHandle&)>& callback, |
+ const gfx::GpuMemoryBufferHandle& handle) { |
+ callback.Run(handle); |
+} |
+ |
} // namespace |
struct BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferRequest { |
@@ -71,7 +94,11 @@ BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( |
uint64_t gpu_client_tracing_id) |
: native_configurations_(gpu::GetNativeGpuMemoryBufferConfigurations()), |
gpu_client_id_(gpu_client_id), |
- gpu_client_tracing_id_(gpu_client_tracing_id) { |
+ gpu_client_tracing_id_(gpu_client_tracing_id), |
+ gmb_manager_(base::MakeRefCounted<viz::ServerGpuMemoryBufferManager>( |
+ nullptr, |
+ gpu_client_id_, |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))) { |
DCHECK(!g_gpu_memory_buffer_manager); |
g_gpu_memory_buffer_manager = this; |
} |
@@ -103,6 +130,7 @@ void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess( |
const AllocationCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+#if 0 |
// Use service side allocation for native configurations. |
if (IsNativeGpuMemoryBufferConfiguration(format, usage)) { |
CreateGpuMemoryBufferOnIO(id, size, format, usage, gpu::kNullSurfaceHandle, |
@@ -134,13 +162,23 @@ void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess( |
id, size, format); |
buffers.find(id)->second.shared_memory_guid = handle.handle.GetGUID(); |
callback.Run(handle); |
+#else |
+ GpuProcessHost* host = GpuProcessHost::Get(); |
+ gmb_manager_->set_gpu_service(host->gpu_service()); |
+ gmb_manager_->AllocateGpuMemoryBufferHandle( |
+ id, child_client_id, size, format, usage, gpu::kNullSurfaceHandle, |
+ base::BindOnce(&RunCallback, callback)); |
+#endif |
} |
void BrowserGpuMemoryBufferManager::SetDestructionSyncToken( |
gfx::GpuMemoryBuffer* buffer, |
const gpu::SyncToken& sync_token) { |
+ gmb_manager_->SetDestructionSyncToken(buffer, sync_token); |
+#if 0 |
static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( |
sync_token); |
+#endif |
} |
bool BrowserGpuMemoryBufferManager::OnMemoryDump( |
@@ -198,14 +236,18 @@ void BrowserGpuMemoryBufferManager::ChildProcessDeletedGpuMemoryBuffer( |
int child_client_id, |
const gpu::SyncToken& sync_token) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
+#if 0 |
DestroyGpuMemoryBufferOnIO(id, child_client_id, sync_token); |
+#else |
+ gmb_manager_->DestroyGpuMemoryBuffer(id, child_client_id, sync_token); |
+#endif |
} |
void BrowserGpuMemoryBufferManager::ProcessRemoved( |
int client_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+#if 0 |
ClientMap::iterator client_it = clients_.find(client_id); |
if (client_it == clients_.end()) |
return; |
@@ -223,6 +265,9 @@ void BrowserGpuMemoryBufferManager::ProcessRemoved( |
} |
clients_.erase(client_it); |
+#else |
+ gmb_manager_->DestroyAllGpuMemoryBufferForClient(client_id); |
+#endif |
} |
bool BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBufferConfiguration( |
@@ -240,6 +285,7 @@ BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface( |
gpu::SurfaceHandle surface_handle) { |
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+#if 0 |
CreateGpuMemoryBufferRequest request(size, format, usage, gpu_client_id_, |
surface_handle); |
BrowserThread::PostTask( |
@@ -256,6 +302,17 @@ BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface( |
base::ThreadRestrictions::ScopedAllowWait allow_wait; |
request.event.Wait(); |
return std::move(request.result); |
+#else |
+ std::unique_ptr<gfx::GpuMemoryBuffer> memory; |
+ base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
+ base::WaitableEvent::InitialState::NOT_SIGNALED); |
+ base::ThreadRestrictions::ScopedAllowWait allow_wait; |
+ GpuProcessHost::CallOnIO(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED, true, |
+ base::Bind(&X, gmb_manager_, &memory, &event, size, |
+ format, usage, surface_handle)); |
+ event.Wait(); |
+ return memory; |
+#endif |
} |
void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferOnIO( |