| 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(
|
|
|