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

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

Issue 302603004: Plumb GpuMemoryBuffer allocation to GPU process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_channel_host_factory.h" 5 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/synchronization/waitable_event.h" 9 #include "base/synchronization/waitable_event.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 target_task_runner); 462 target_task_runner);
463 filter->AddRoute(MSG_ROUTING_CONTROL, handler); 463 filter->AddRoute(MSG_ROUTING_CONTROL, handler);
464 464
465 GetIOLoopProxy()->PostTask( 465 GetIOLoopProxy()->PostTask(
466 FROM_HERE, 466 FROM_HERE,
467 base::Bind(&BrowserGpuChannelHostFactory::AddFilterOnIO, 467 base::Bind(&BrowserGpuChannelHostFactory::AddFilterOnIO,
468 gpu_host_id_, 468 gpu_host_id_,
469 filter)); 469 filter));
470 } 470 }
471 471
472 void BrowserGpuChannelHostFactory::CreateGpuMemoryBuffer(
473 const gfx::GpuMemoryBufferHandle& handle,
474 const gfx::Size& size,
475 unsigned internalformat,
476 unsigned usage,
477 const CreateGpuMemoryBufferCallback& callback) {
478 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
479 GetIOLoopProxy()->PostTask(
480 FROM_HERE,
481 base::Bind(&BrowserGpuChannelHostFactory::CreateGpuMemoryBufferOnIO,
482 base::Unretained(this),
483 handle,
484 size,
485 internalformat,
486 usage,
487 callback));
piman 2014/06/10 02:48:13 This pattern, passing a callback to another thread
alexst (slow to review) 2014/06/10 04:38:25 That is very subtle...
piman 2014/06/10 23:11:31 I know :(
488 }
489
490 void BrowserGpuChannelHostFactory::DestroyGpuMemoryBuffer(
491 const gfx::GpuMemoryBufferHandle& handle,
492 int32 sync_point) {
493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
494 GetIOLoopProxy()->PostTask(
495 FROM_HERE,
496 base::Bind(&BrowserGpuChannelHostFactory::DestroyGpuMemoryBufferOnIO,
497 base::Unretained(this),
498 handle,
499 sync_point));
500 }
501
502 void BrowserGpuChannelHostFactory::CreateGpuMemoryBufferOnIO(
503 const gfx::GpuMemoryBufferHandle& handle,
504 const gfx::Size& size,
505 unsigned internalformat,
506 unsigned usage,
507 const CreateGpuMemoryBufferCallback& callback) {
508 GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_);
509 if (!host) {
510 GpuMemoryBufferCreatedOnIO(callback, gfx::GpuMemoryBufferHandle());
511 return;
512 }
513
514 host->CreateGpuMemoryBuffer(
515 handle,
516 size,
517 internalformat,
518 usage,
519 base::Bind(&BrowserGpuChannelHostFactory::GpuMemoryBufferCreatedOnIO,
520 callback));
521 }
522
523 // static
524 void BrowserGpuChannelHostFactory::GpuMemoryBufferCreatedOnIO(
525 const CreateGpuMemoryBufferCallback& callback,
526 const gfx::GpuMemoryBufferHandle& handle) {
527 BrowserThread::PostTask(
528 BrowserThread::UI,
529 FROM_HERE,
530 base::Bind(&BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated,
531 callback,
532 handle));
533 }
534
535 // static
536 void BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated(
537 const CreateGpuMemoryBufferCallback& callback,
538 const gfx::GpuMemoryBufferHandle& handle) {
539 callback.Run(handle);
540 }
541
542 void BrowserGpuChannelHostFactory::DestroyGpuMemoryBufferOnIO(
543 const gfx::GpuMemoryBufferHandle& handle,
544 int32 sync_point) {
545 GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_);
546 if (!host) {
547 return;
548 }
549
550 host->DestroyGpuMemoryBuffer(handle, sync_point);
551 }
552
472 } // namespace content 553 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698