| 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/context_group.h" | 27 #include "gpu/command_buffer/service/context_group.h" |
| 28 #include "gpu/command_buffer/service/gl_context_virtual.h" | 28 #include "gpu/command_buffer/service/gl_context_virtual.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 | 51 |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 context_group = *it; | 376 context_group = *it; |
| 372 DCHECK(context_group->share_resources_); | 377 DCHECK(context_group->share_resources_); |
| 373 context_lost_ = context_group->IsContextLost(); | 378 context_lost_ = context_group->IsContextLost(); |
| 374 break; | 379 break; |
| 375 } | 380 } |
| 376 } | 381 } |
| 377 if (!context_group) | 382 if (!context_group) |
| 378 share_group = new gfx::GLShareGroup; | 383 share_group = new gfx::GLShareGroup; |
| 379 } | 384 } |
| 380 | 385 |
| 386 StreamTextureManager* stream_texture_manager = NULL; |
| 387 #if defined(OS_ANDROID) |
| 388 stream_texture_manager = stream_texture_manager_ = |
| 389 context_group ? context_group->stream_texture_manager_.get() |
| 390 : new StreamTextureManagerInProcess; |
| 391 #endif |
| 392 |
| 381 bool bind_generates_resource = false; | 393 bool bind_generates_resource = false; |
| 382 decoder_.reset(gles2::GLES2Decoder::Create( | 394 decoder_.reset(gles2::GLES2Decoder::Create( |
| 383 context_group ? context_group->decoder_->GetContextGroup() | 395 context_group ? context_group->decoder_->GetContextGroup() |
| 384 : new gles2::ContextGroup( | 396 : new gles2::ContextGroup(NULL, |
| 385 NULL, NULL, NULL, NULL, bind_generates_resource))); | 397 NULL, |
| 398 NULL, |
| 399 stream_texture_manager, |
| 400 bind_generates_resource))); |
| 386 | 401 |
| 387 gpu_scheduler_.reset( | 402 gpu_scheduler_.reset( |
| 388 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); | 403 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); |
| 389 command_buffer->SetGetBufferChangeCallback(base::Bind( | 404 command_buffer->SetGetBufferChangeCallback(base::Bind( |
| 390 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); | 405 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); |
| 391 command_buffer_ = command_buffer.Pass(); | 406 command_buffer_ = command_buffer.Pass(); |
| 392 | 407 |
| 393 decoder_->set_engine(gpu_scheduler_.get()); | 408 decoder_->set_engine(gpu_scheduler_.get()); |
| 394 | 409 |
| 395 if (!surface_) { | 410 if (!surface_) { |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 // ownership. | 742 // ownership. |
| 728 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); | 743 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); |
| 729 base::Closure callback_on_client_thread = | 744 base::Closure callback_on_client_thread = |
| 730 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); | 745 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); |
| 731 base::Closure wrapped_callback = | 746 base::Closure wrapped_callback = |
| 732 base::Bind(&PostCallback, base::MessageLoopProxy::current(), | 747 base::Bind(&PostCallback, base::MessageLoopProxy::current(), |
| 733 callback_on_client_thread); | 748 callback_on_client_thread); |
| 734 return wrapped_callback; | 749 return wrapped_callback; |
| 735 } | 750 } |
| 736 | 751 |
| 752 #if defined(OS_ANDROID) |
| 753 scoped_refptr<gfx::SurfaceTextureBridge> |
| 754 InProcessCommandBuffer::GetSurfaceTexture(uint32 stream_id) { |
| 755 DCHECK(stream_texture_manager_); |
| 756 return stream_texture_manager_->GetSurfaceTexture(stream_id); |
| 757 } |
| 758 #endif |
| 759 |
| 737 // static | 760 // static |
| 738 void InProcessCommandBuffer::EnableVirtualizedContext() { | 761 void InProcessCommandBuffer::EnableVirtualizedContext() { |
| 739 g_use_virtualized_gl_context = true; | 762 g_use_virtualized_gl_context = true; |
| 740 } | 763 } |
| 741 | 764 |
| 742 // static | 765 // static |
| 743 void InProcessCommandBuffer::SetScheduleCallback( | 766 void InProcessCommandBuffer::SetScheduleCallback( |
| 744 const base::Closure& callback) { | 767 const base::Closure& callback) { |
| 745 DCHECK(!g_uses_explicit_scheduling); | 768 DCHECK(!g_uses_explicit_scheduling); |
| 746 DCHECK(!SchedulerClientBase::HasClients()); | 769 DCHECK(!SchedulerClientBase::HasClients()); |
| 747 g_uses_explicit_scheduling = true; | 770 g_uses_explicit_scheduling = true; |
| 748 g_gpu_queue.Get().SetScheduleCallback(callback); | 771 g_gpu_queue.Get().SetScheduleCallback(callback); |
| 749 } | 772 } |
| 750 | 773 |
| 751 // static | 774 // static |
| 752 void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() { | 775 void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() { |
| 753 g_gpu_queue.Get().RunTasks(); | 776 g_gpu_queue.Get().RunTasks(); |
| 754 } | 777 } |
| 755 | 778 |
| 756 } // namespace gpu | 779 } // namespace gpu |
| OLD | NEW |