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

Side by Side Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 235563002: gpu: Separate GpuControlService from GpuControl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unregister Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "gpu/command_buffer/service/in_process_command_buffer.h" 5 #include "gpu/command_buffer/service/in_process_command_buffer.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
11 #include <GLES2/gl2.h> 11 #include <GLES2/gl2.h>
12 #ifndef GL_GLEXT_PROTOTYPES 12 #ifndef GL_GLEXT_PROTOTYPES
13 #define GL_GLEXT_PROTOTYPES 1 13 #define GL_GLEXT_PROTOTYPES 1
14 #endif 14 #endif
15 #include <GLES2/gl2ext.h> 15 #include <GLES2/gl2ext.h>
16 #include <GLES2/gl2extchromium.h> 16 #include <GLES2/gl2extchromium.h>
17 17
18 #include "base/bind.h" 18 #include "base/bind.h"
19 #include "base/bind_helpers.h" 19 #include "base/bind_helpers.h"
20 #include "base/lazy_instance.h" 20 #include "base/lazy_instance.h"
21 #include "base/logging.h" 21 #include "base/logging.h"
22 #include "base/memory/weak_ptr.h" 22 #include "base/memory/weak_ptr.h"
23 #include "base/message_loop/message_loop_proxy.h" 23 #include "base/message_loop/message_loop_proxy.h"
24 #include "base/sequence_checker.h" 24 #include "base/sequence_checker.h"
25 #include "base/synchronization/condition_variable.h" 25 #include "base/synchronization/condition_variable.h"
26 #include "base/threading/thread.h" 26 #include "base/threading/thread.h"
27 #include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
27 #include "gpu/command_buffer/service/command_buffer_service.h" 28 #include "gpu/command_buffer/service/command_buffer_service.h"
28 #include "gpu/command_buffer/service/context_group.h" 29 #include "gpu/command_buffer/service/context_group.h"
29 #include "gpu/command_buffer/service/gl_context_virtual.h" 30 #include "gpu/command_buffer/service/gl_context_virtual.h"
30 #include "gpu/command_buffer/service/gpu_control_service.h" 31 #include "gpu/command_buffer/service/gpu_control_service.h"
31 #include "gpu/command_buffer/service/gpu_scheduler.h" 32 #include "gpu/command_buffer/service/gpu_scheduler.h"
32 #include "gpu/command_buffer/service/image_manager.h" 33 #include "gpu/command_buffer/service/image_manager.h"
33 #include "gpu/command_buffer/service/mailbox_manager.h" 34 #include "gpu/command_buffer/service/mailbox_manager.h"
34 #include "gpu/command_buffer/service/transfer_buffer_manager.h" 35 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
35 #include "ui/gfx/size.h" 36 #include "ui/gfx/size.h"
36 #include "ui/gl/gl_context.h" 37 #include "ui/gl/gl_context.h"
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 base::Bind(&InProcessCommandBuffer::InitializeOnGpuThread, 290 base::Bind(&InProcessCommandBuffer::InitializeOnGpuThread,
290 base::Unretained(this), 291 base::Unretained(this),
291 params); 292 params);
292 293
293 base::WaitableEvent completion(true, false); 294 base::WaitableEvent completion(true, false);
294 bool result = false; 295 bool result = false;
295 QueueTask( 296 QueueTask(
296 base::Bind(&RunTaskWithResult<bool>, init_task, &result, &completion)); 297 base::Bind(&RunTaskWithResult<bool>, init_task, &result, &completion));
297 completion.Wait(); 298 completion.Wait();
298 299
299 if (result) 300 if (result) {
300 capabilities_ = capabilities; 301 capabilities_ = capabilities;
302 capabilities_.map_image =
303 capabilities_.map_image && g_gpu_memory_buffer_factory;
304 }
301 return result; 305 return result;
302 } 306 }
303 307
304 bool InProcessCommandBuffer::InitializeOnGpuThread( 308 bool InProcessCommandBuffer::InitializeOnGpuThread(
305 const InitializeOnGpuThreadParams& params) { 309 const InitializeOnGpuThreadParams& params) {
306 CheckSequencedThread(); 310 CheckSequencedThread();
307 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); 311 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr();
308 312
309 DCHECK(params.size.width() >= 0 && params.size.height() >= 0); 313 DCHECK(params.size.width() >= 0 && params.size.height() >= 0);
310 314
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 if (!decoder_->Initialize(surface_, 406 if (!decoder_->Initialize(surface_,
403 context_, 407 context_,
404 params.is_offscreen, 408 params.is_offscreen,
405 params.size, 409 params.size,
406 disallowed_features, 410 disallowed_features,
407 params.attribs)) { 411 params.attribs)) {
408 LOG(ERROR) << "Could not initialize decoder."; 412 LOG(ERROR) << "Could not initialize decoder.";
409 DestroyOnGpuThread(); 413 DestroyOnGpuThread();
410 return false; 414 return false;
411 } 415 }
416 *params.capabilities = decoder_->GetCapabilities();
412 417
413 gpu_control_.reset( 418 gpu_control_.reset(
414 new GpuControlService(decoder_->GetContextGroup()->image_manager(), 419 new GpuControlService(decoder_->GetContextGroup()->image_manager(),
415 g_gpu_memory_buffer_factory,
416 decoder_->GetContextGroup()->mailbox_manager(), 420 decoder_->GetContextGroup()->mailbox_manager(),
417 decoder_->GetQueryManager(), 421 decoder_->GetQueryManager()));
418 decoder_->GetCapabilities()));
419
420 *params.capabilities = gpu_control_->GetCapabilities();
421 422
422 if (!params.is_offscreen) { 423 if (!params.is_offscreen) {
423 decoder_->SetResizeCallback(base::Bind( 424 decoder_->SetResizeCallback(base::Bind(
424 &InProcessCommandBuffer::OnResizeView, gpu_thread_weak_ptr_)); 425 &InProcessCommandBuffer::OnResizeView, gpu_thread_weak_ptr_));
425 } 426 }
426 decoder_->SetWaitSyncPointCallback(base::Bind(&WaitSyncPoint)); 427 decoder_->SetWaitSyncPointCallback(base::Bind(&WaitSyncPoint));
427 428
428 return true; 429 return true;
429 } 430 }
430 431
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 gpu::Capabilities InProcessCommandBuffer::GetCapabilities() { 608 gpu::Capabilities InProcessCommandBuffer::GetCapabilities() {
608 return capabilities_; 609 return capabilities_;
609 } 610 }
610 611
611 gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer( 612 gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
612 size_t width, 613 size_t width,
613 size_t height, 614 size_t height,
614 unsigned internalformat, 615 unsigned internalformat,
615 int32* id) { 616 int32* id) {
616 CheckSequencedThread(); 617 CheckSequencedThread();
617 base::AutoLock lock(command_buffer_lock_); 618
618 return gpu_control_->CreateGpuMemoryBuffer(width, 619 *id = -1;
619 height, 620 linked_ptr<gfx::GpuMemoryBuffer> buffer =
620 internalformat, 621 make_linked_ptr(g_gpu_memory_buffer_factory->CreateGpuMemoryBuffer(
621 id); 622 width, height, internalformat));
623 if (!buffer.get())
624 return NULL;
625
626 static int32 next_id = 1;
627 *id = next_id++;
628
629 base::Closure task = base::Bind(&GpuControlService::RegisterGpuMemoryBuffer,
630 base::Unretained(gpu_control_.get()),
631 *id,
632 buffer->GetHandle(),
633 width,
634 height,
635 internalformat);
636
637 QueueTask(task);
638
639 gpu_memory_buffers_[*id] = buffer;
640 return buffer.get();
622 } 641 }
623 642
624 void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) { 643 void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
625 CheckSequencedThread(); 644 CheckSequencedThread();
626 base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer, 645 GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
646 if (it != gpu_memory_buffers_.end())
647 gpu_memory_buffers_.erase(it);
648 base::Closure task = base::Bind(&GpuControlService::UnregisterGpuMemoryBuffer,
627 base::Unretained(gpu_control_.get()), 649 base::Unretained(gpu_control_.get()),
628 id); 650 id);
629 651
630 QueueTask(task); 652 QueueTask(task);
631 } 653 }
632 654
633 uint32 InProcessCommandBuffer::InsertSyncPoint() { 655 uint32 InProcessCommandBuffer::InsertSyncPoint() {
634 uint32 sync_point = g_sync_point_manager.Get().GenerateSyncPoint(); 656 uint32 sync_point = g_sync_point_manager.Get().GenerateSyncPoint();
635 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread, 657 QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread,
636 base::Unretained(this), 658 base::Unretained(this),
(...skipping 28 matching lines...) Expand all
665 base::Bind(&InProcessCommandBuffer::SignalSyncPointOnGpuThread, 687 base::Bind(&InProcessCommandBuffer::SignalSyncPointOnGpuThread,
666 gpu_thread_weak_ptr_, 688 gpu_thread_weak_ptr_,
667 sync_point, 689 sync_point,
668 callback)); 690 callback));
669 } 691 }
670 } 692 }
671 693
672 void InProcessCommandBuffer::SignalQuery(unsigned query, 694 void InProcessCommandBuffer::SignalQuery(unsigned query,
673 const base::Closure& callback) { 695 const base::Closure& callback) {
674 CheckSequencedThread(); 696 CheckSequencedThread();
675 QueueTask(base::Bind(&GpuControl::SignalQuery, 697 QueueTask(base::Bind(&GpuControlService::SignalQuery,
676 base::Unretained(gpu_control_.get()), 698 base::Unretained(gpu_control_.get()),
677 query, 699 query,
678 WrapCallback(callback))); 700 WrapCallback(callback)));
679 } 701 }
680 702
681 void InProcessCommandBuffer::SetSurfaceVisible(bool visible) {} 703 void InProcessCommandBuffer::SetSurfaceVisible(bool visible) {}
682 704
683 void InProcessCommandBuffer::SendManagedMemoryStats( 705 void InProcessCommandBuffer::SendManagedMemoryStats(
684 const gpu::ManagedMemoryStats& stats) { 706 const gpu::ManagedMemoryStats& stats) {
685 } 707 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 } 782 }
761 #endif 783 #endif
762 784
763 // static 785 // static
764 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( 786 void InProcessCommandBuffer::SetGpuMemoryBufferFactory(
765 GpuMemoryBufferFactory* factory) { 787 GpuMemoryBufferFactory* factory) {
766 g_gpu_memory_buffer_factory = factory; 788 g_gpu_memory_buffer_factory = factory;
767 } 789 }
768 790
769 } // namespace gpu 791 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698