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

Side by Side Diff: content/browser/gpu/browser_gpu_memory_buffer_manager.cc

Issue 1975023002: Add GpuMemoryBuffer CreateFromClientId interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" 5 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 : CreateGpuMemoryBufferRequest(size, 161 : CreateGpuMemoryBufferRequest(size,
162 format, 162 format,
163 gfx::BufferUsage::GPU_READ, 163 gfx::BufferUsage::GPU_READ,
164 client_id, 164 client_id,
165 gpu::kNullSurfaceHandle), 165 gpu::kNullSurfaceHandle),
166 handle(handle) {} 166 handle(handle) {}
167 ~CreateGpuMemoryBufferFromHandleRequest() {} 167 ~CreateGpuMemoryBufferFromHandleRequest() {}
168 gfx::GpuMemoryBufferHandle handle; 168 gfx::GpuMemoryBufferHandle handle;
169 }; 169 };
170 170
171 struct BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromChildIdRequest
172 : public CreateGpuMemoryBufferRequest {
173 CreateGpuMemoryBufferFromChildIdRequest(
174 int client_id,
175 const gfx::GpuMemoryBufferId& gpu_memory_buffer_id)
176 : CreateGpuMemoryBufferRequest(gfx::Size(),
177 gfx::BufferFormat::RGBA_8888,
178 gfx::BufferUsage::GPU_READ,
179 client_id,
180 gpu::kNullSurfaceHandle),
181 gpu_memory_buffer_id(gpu_memory_buffer_id) {}
182 ~CreateGpuMemoryBufferFromChildIdRequest() {}
183 gfx::GpuMemoryBufferId gpu_memory_buffer_id;
184 };
185
171 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( 186 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager(
172 int gpu_client_id, 187 int gpu_client_id,
173 uint64_t gpu_client_tracing_id) 188 uint64_t gpu_client_tracing_id)
174 : native_configurations_(GetNativeGpuMemoryBufferConfigurations()), 189 : native_configurations_(GetNativeGpuMemoryBufferConfigurations()),
175 gpu_client_id_(gpu_client_id), 190 gpu_client_id_(gpu_client_id),
176 gpu_client_tracing_id_(gpu_client_tracing_id), 191 gpu_client_tracing_id_(gpu_client_tracing_id),
177 gpu_host_id_(0) { 192 gpu_host_id_(0) {
178 DCHECK(!g_gpu_memory_buffer_manager); 193 DCHECK(!g_gpu_memory_buffer_manager);
179 g_gpu_memory_buffer_manager = this; 194 g_gpu_memory_buffer_manager = this;
180 } 195 }
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 DLOG(ERROR) << "Child process attempted to allocate a GpuMemoryBuffer with " 320 DLOG(ERROR) << "Child process attempted to allocate a GpuMemoryBuffer with "
306 "an existing ID."; 321 "an existing ID.";
307 callback.Run(gfx::GpuMemoryBufferHandle()); 322 callback.Run(gfx::GpuMemoryBufferHandle());
308 return; 323 return;
309 } 324 }
310 325
311 callback.Run(gpu::GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 326 callback.Run(gpu::GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
312 id, size, format, child_process_handle)); 327 id, size, format, child_process_handle));
313 } 328 }
314 329
330 std::unique_ptr<gfx::GpuMemoryBuffer>
331 BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromChildId(
332 int child_client_id,
333 const gfx::GpuMemoryBufferId& gpu_memory_buffer_id) {
334 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
335
336 CreateGpuMemoryBufferFromChildIdRequest request(child_client_id,
337 gpu_memory_buffer_id);
338 BrowserThread::PostTask(
339 BrowserThread::IO, FROM_HERE,
340 base::Bind(&BrowserGpuMemoryBufferManager::
341 HandleCreateGpuMemoryBufferFromChildIdOnIO,
342 base::Unretained(this), // Safe as we wait for result below.
343 base::Unretained(&request)));
344
345 // We're blocking the UI thread, which is generally undesirable.
346 TRACE_EVENT0(
347 "browser",
348 "BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromChildId");
349 base::ThreadRestrictions::ScopedAllowWait allow_wait;
350 request.event.Wait();
351 return std::move(request.result);
352 }
353
315 gfx::GpuMemoryBuffer* 354 gfx::GpuMemoryBuffer*
316 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( 355 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
317 ClientBuffer buffer) { 356 ClientBuffer buffer) {
318 return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer); 357 return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer);
319 } 358 }
320 359
321 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken( 360 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken(
322 gfx::GpuMemoryBuffer* buffer, 361 gfx::GpuMemoryBuffer* buffer,
323 const gpu::SyncToken& sync_token) { 362 const gpu::SyncToken& sync_token) {
324 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( 363 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 request->result = gpu::GpuMemoryBufferImplSharedMemory::CreateFromHandle( 566 request->result = gpu::GpuMemoryBufferImplSharedMemory::CreateFromHandle(
528 handle, request->size, request->format, request->usage, 567 handle, request->size, request->format, request->usage,
529 base::Bind( 568 base::Bind(
530 &GpuMemoryBufferDeleted, 569 &GpuMemoryBufferDeleted,
531 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), 570 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
532 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, 571 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO,
533 base::Unretained(this), new_id, request->client_id))); 572 base::Unretained(this), new_id, request->client_id)));
534 request->event.Signal(); 573 request->event.Signal();
535 } 574 }
536 575
576 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromChildIdOnIO(
577 CreateGpuMemoryBufferFromChildIdRequest* request) {
578 DCHECK_CURRENTLY_ON(BrowserThread::IO);
579 // TODO(ccameron): Implement this.
ccameron 2016/05/12 23:41:38 I've left this blank in this patch -- the plan is
reveman 2016/05/13 12:28:37 We should do Scheme 1 as we need to store somethin
ccameron 2016/05/16 18:41:16 I've added the implementation for IOSurfaces here.
580 }
581
537 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO( 582 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO(
538 CreateGpuMemoryBufferRequest* request, 583 CreateGpuMemoryBufferRequest* request,
539 const gfx::GpuMemoryBufferHandle& handle) { 584 const gfx::GpuMemoryBufferHandle& handle) {
540 DCHECK_CURRENTLY_ON(BrowserThread::IO); 585 DCHECK_CURRENTLY_ON(BrowserThread::IO);
541 586
542 // Early out if factory failed to create the buffer. 587 // Early out if factory failed to create the buffer.
543 if (handle.is_null()) { 588 if (handle.is_null()) {
544 request->event.Signal(); 589 request->event.Signal();
545 return; 590 return;
546 } 591 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 return gpu_client_tracing_id_; 762 return gpu_client_tracing_id_;
718 } 763 }
719 764
720 // In normal cases, |client_id| is a child process id, so we can perform 765 // In normal cases, |client_id| is a child process id, so we can perform
721 // the standard conversion. 766 // the standard conversion.
722 return ChildProcessHostImpl::ChildProcessUniqueIdToTracingProcessId( 767 return ChildProcessHostImpl::ChildProcessUniqueIdToTracingProcessId(
723 client_id); 768 client_id);
724 } 769 }
725 770
726 } // namespace content 771 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698