Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1326)

Unified Diff: content/browser/gpu/browser_gpu_memory_buffer_manager.cc

Issue 2934203002: exp/wip: Use ServerGpuMemoryBufferManager in browser.
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | services/ui/gpu/gpu_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | services/ui/gpu/gpu_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698