OLD | NEW |
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 <utility> | 8 #include <utility> |
9 | 9 |
10 #include <GLES2/gl2.h> | 10 #include <GLES2/gl2.h> |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "gpu/command_buffer/service/gl_context_virtual.h" | 27 #include "gpu/command_buffer/service/gl_context_virtual.h" |
28 #include "gpu/command_buffer/service/gpu_control_service.h" | 28 #include "gpu/command_buffer/service/gpu_control_service.h" |
29 #include "gpu/command_buffer/service/gpu_scheduler.h" | 29 #include "gpu/command_buffer/service/gpu_scheduler.h" |
30 #include "gpu/command_buffer/service/image_manager.h" | 30 #include "gpu/command_buffer/service/image_manager.h" |
31 #include "gpu/command_buffer/service/transfer_buffer_manager.h" | 31 #include "gpu/command_buffer/service/transfer_buffer_manager.h" |
32 #include "ui/gfx/size.h" | 32 #include "ui/gfx/size.h" |
33 #include "ui/gl/gl_context.h" | 33 #include "ui/gl/gl_context.h" |
34 #include "ui/gl/gl_image.h" | 34 #include "ui/gl/gl_image.h" |
35 #include "ui/gl/gl_share_group.h" | 35 #include "ui/gl/gl_share_group.h" |
36 | 36 |
| 37 #if defined(OS_ANDROID) |
| 38 #include "gpu/command_buffer/service/stream_texture_manager_in_process_android.h
" |
| 39 #include "ui/gl/android/surface_texture_bridge.h" |
| 40 #endif |
| 41 |
37 namespace gpu { | 42 namespace gpu { |
38 | 43 |
39 namespace { | 44 namespace { |
40 | 45 |
41 static base::LazyInstance<std::set<InProcessCommandBuffer*> > | 46 static base::LazyInstance<std::set<InProcessCommandBuffer*> > |
42 g_all_shared_contexts = LAZY_INSTANCE_INITIALIZER; | 47 g_all_shared_contexts = LAZY_INSTANCE_INITIALIZER; |
43 | 48 |
44 static bool g_use_virtualized_gl_context = false; | 49 static bool g_use_virtualized_gl_context = false; |
45 static bool g_uses_explicit_scheduling = false; | 50 static bool g_uses_explicit_scheduling = false; |
46 static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL; | 51 static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL; |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 context_group = *it; | 377 context_group = *it; |
373 DCHECK(context_group->share_resources_); | 378 DCHECK(context_group->share_resources_); |
374 context_lost_ = context_group->IsContextLost(); | 379 context_lost_ = context_group->IsContextLost(); |
375 break; | 380 break; |
376 } | 381 } |
377 } | 382 } |
378 if (!context_group) | 383 if (!context_group) |
379 share_group = new gfx::GLShareGroup; | 384 share_group = new gfx::GLShareGroup; |
380 } | 385 } |
381 | 386 |
| 387 StreamTextureManager* stream_texture_manager = NULL; |
| 388 #if defined(OS_ANDROID) |
| 389 stream_texture_manager = stream_texture_manager_ = |
| 390 context_group ? context_group->stream_texture_manager_.get() |
| 391 : new StreamTextureManagerInProcess; |
| 392 #endif |
| 393 |
382 bool bind_generates_resource = false; | 394 bool bind_generates_resource = false; |
383 decoder_.reset(gles2::GLES2Decoder::Create( | 395 decoder_.reset(gles2::GLES2Decoder::Create( |
384 context_group ? context_group->decoder_->GetContextGroup() | 396 context_group ? context_group->decoder_->GetContextGroup() |
385 : new gles2::ContextGroup( | 397 : new gles2::ContextGroup(NULL, |
386 NULL, NULL, NULL, NULL, bind_generates_resource))); | 398 NULL, |
| 399 NULL, |
| 400 stream_texture_manager, |
| 401 bind_generates_resource))); |
387 | 402 |
388 gpu_scheduler_.reset( | 403 gpu_scheduler_.reset( |
389 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); | 404 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); |
390 command_buffer->SetGetBufferChangeCallback(base::Bind( | 405 command_buffer->SetGetBufferChangeCallback(base::Bind( |
391 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); | 406 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); |
392 command_buffer_ = command_buffer.Pass(); | 407 command_buffer_ = command_buffer.Pass(); |
393 | 408 |
394 gpu_control_.reset( | 409 gpu_control_.reset( |
395 new GpuControlService(decoder_->GetContextGroup()->image_manager(), | 410 new GpuControlService(decoder_->GetContextGroup()->image_manager(), |
396 g_gpu_memory_buffer_factory)); | 411 g_gpu_memory_buffer_factory)); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 // ownership. | 720 // ownership. |
706 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); | 721 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); |
707 base::Closure callback_on_client_thread = | 722 base::Closure callback_on_client_thread = |
708 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); | 723 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); |
709 base::Closure wrapped_callback = | 724 base::Closure wrapped_callback = |
710 base::Bind(&PostCallback, base::MessageLoopProxy::current(), | 725 base::Bind(&PostCallback, base::MessageLoopProxy::current(), |
711 callback_on_client_thread); | 726 callback_on_client_thread); |
712 return wrapped_callback; | 727 return wrapped_callback; |
713 } | 728 } |
714 | 729 |
| 730 #if defined(OS_ANDROID) |
| 731 scoped_refptr<gfx::SurfaceTextureBridge> |
| 732 InProcessCommandBuffer::GetSurfaceTexture(uint32 stream_id) { |
| 733 DCHECK(stream_texture_manager_); |
| 734 return stream_texture_manager_->GetSurfaceTexture(stream_id); |
| 735 } |
| 736 #endif |
| 737 |
715 // static | 738 // static |
716 void InProcessCommandBuffer::EnableVirtualizedContext() { | 739 void InProcessCommandBuffer::EnableVirtualizedContext() { |
717 g_use_virtualized_gl_context = true; | 740 g_use_virtualized_gl_context = true; |
718 } | 741 } |
719 | 742 |
720 // static | 743 // static |
721 void InProcessCommandBuffer::SetScheduleCallback( | 744 void InProcessCommandBuffer::SetScheduleCallback( |
722 const base::Closure& callback) { | 745 const base::Closure& callback) { |
723 DCHECK(!g_uses_explicit_scheduling); | 746 DCHECK(!g_uses_explicit_scheduling); |
724 DCHECK(!SchedulerClientBase::HasClients()); | 747 DCHECK(!SchedulerClientBase::HasClients()); |
725 g_uses_explicit_scheduling = true; | 748 g_uses_explicit_scheduling = true; |
726 g_gpu_queue.Get().SetScheduleCallback(callback); | 749 g_gpu_queue.Get().SetScheduleCallback(callback); |
727 } | 750 } |
728 | 751 |
729 // static | 752 // static |
730 void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() { | 753 void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() { |
731 g_gpu_queue.Get().RunTasks(); | 754 g_gpu_queue.Get().RunTasks(); |
732 } | 755 } |
733 | 756 |
734 // static | 757 // static |
735 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( | 758 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( |
736 GpuMemoryBufferFactory* factory) { | 759 GpuMemoryBufferFactory* factory) { |
737 g_gpu_memory_buffer_factory = factory; | 760 g_gpu_memory_buffer_factory = factory; |
738 } | 761 } |
739 | 762 |
740 } // namespace gpu | 763 } // namespace gpu |
OLD | NEW |