| 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 3cb728df94b7a628b0e390ad7b480b5abee799f2..2273468169ec140529559f06a1b29263ba408335 100644
|
| --- a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| +++ b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| @@ -65,6 +65,17 @@ struct BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferRequest {
|
| std::unique_ptr<gfx::GpuMemoryBuffer> result;
|
| };
|
|
|
| +struct BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsRequest {
|
| + GetGpuMemoryBufferAttribsRequest(int client_id)
|
| + : event(base::WaitableEvent::ResetPolicy::MANUAL,
|
| + base::WaitableEvent::InitialState::NOT_SIGNALED),
|
| + client_id(client_id){};
|
| + ~GetGpuMemoryBufferAttribsRequest(){};
|
| + base::WaitableEvent event;
|
| + int client_id;
|
| + gfx::GpuMemoryBufferAttribVector result;
|
| +};
|
| +
|
| BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager(
|
| int gpu_client_id,
|
| uint64_t gpu_client_tracing_id)
|
| @@ -140,6 +151,59 @@ void BrowserGpuMemoryBufferManager::SetDestructionSyncToken(
|
| sync_token);
|
| }
|
|
|
| +void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferAttribsReceivedOnIO(
|
| + GetGpuMemoryBufferAttribsRequest* request,
|
| + const gfx::GpuMemoryBufferAttribVector& supported_attribs) {
|
| + request->result = supported_attribs;
|
| + request->event.Signal();
|
| +}
|
| +
|
| +void HostGetGpuMemoryBufferAttribs(
|
| + GpuProcessHost* host,
|
| + int client_id,
|
| + const BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsCallback&
|
| + callback) {
|
| + host->GetGpuMemoryBufferAttribs(callback);
|
| +}
|
| +
|
| +void BrowserGpuMemoryBufferManager::HandleGetGpuMemoryBufferAttribsOnIO(
|
| + GetGpuMemoryBufferAttribsRequest* request) {
|
| + GetGpuMemoryBufferAttribsOnIO(
|
| + base::Bind(&HostGetGpuMemoryBufferAttribs), request->client_id,
|
| + base::Bind(&BrowserGpuMemoryBufferManager::
|
| + HandleGpuMemoryBufferAttribsReceivedOnIO,
|
| + base::Unretained(this), base::Unretained(request)));
|
| +}
|
| +
|
| +void BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsOnIO(
|
| + const GetGpuMemoryBufferAttribsDelegate& delegate,
|
| + int client_id,
|
| + const BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsCallback&
|
| + callback) {
|
| + GpuProcessHost* host = GpuProcessHost::Get();
|
| + if (!host) {
|
| + callback.Run(gfx::GpuMemoryBufferAttribVector());
|
| + }
|
| + delegate.Run(host, client_id, callback);
|
| +}
|
| +
|
| +gfx::GpuMemoryBufferAttribVector
|
| +BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribs() {
|
| + GetGpuMemoryBufferAttribsRequest request(gpu_client_id_);
|
| +
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + base::Bind(
|
| + &BrowserGpuMemoryBufferManager::HandleGetGpuMemoryBufferAttribsOnIO,
|
| + base::Unretained(this), base::Unretained(&request)));
|
| +
|
| + TRACE_EVENT0("browser",
|
| + "BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribs");
|
| + base::ThreadRestrictions::ScopedAllowWait allow_wait;
|
| + request.event.Wait();
|
| + return request.result;
|
| +}
|
| +
|
| bool BrowserGpuMemoryBufferManager::OnMemoryDump(
|
| const base::trace_event::MemoryDumpArgs& args,
|
| base::trace_event::ProcessMemoryDump* pmd) {
|
|
|