| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <queue> | 10 #include <queue> |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 private: | 84 private: |
| 85 SyncPointOrderData* order_data_; | 85 SyncPointOrderData* order_data_; |
| 86 uint32_t order_num_; | 86 uint32_t order_num_; |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 struct GpuInProcessThreadHolder { | 89 struct GpuInProcessThreadHolder { |
| 90 GpuInProcessThreadHolder() | 90 GpuInProcessThreadHolder() |
| 91 : sync_point_manager(new SyncPointManager(false)), | 91 : sync_point_manager(new SyncPointManager(false)), |
| 92 gpu_thread(new GpuInProcessThread(sync_point_manager.get())) {} | 92 gpu_thread(new GpuInProcessThread(sync_point_manager.get())) {} |
| 93 scoped_ptr<SyncPointManager> sync_point_manager; | 93 std::unique_ptr<SyncPointManager> sync_point_manager; |
| 94 scoped_refptr<InProcessCommandBuffer::Service> gpu_thread; | 94 scoped_refptr<InProcessCommandBuffer::Service> gpu_thread; |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 base::LazyInstance<GpuInProcessThreadHolder> g_default_service = | 97 base::LazyInstance<GpuInProcessThreadHolder> g_default_service = |
| 98 LAZY_INSTANCE_INITIALIZER; | 98 LAZY_INSTANCE_INITIALIZER; |
| 99 | 99 |
| 100 class ScopedEvent { | 100 class ScopedEvent { |
| 101 public: | 101 public: |
| 102 explicit ScopedEvent(base::WaitableEvent* event) : event_(event) {} | 102 explicit ScopedEvent(base::WaitableEvent* event) : event_(event) {} |
| 103 ~ScopedEvent() { event_->Signal(); } | 103 ~ScopedEvent() { event_->Signal(); } |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 const InitializeOnGpuThreadParams& params) { | 318 const InitializeOnGpuThreadParams& params) { |
| 319 CheckSequencedThread(); | 319 CheckSequencedThread(); |
| 320 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); | 320 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); |
| 321 | 321 |
| 322 DCHECK(params.size.width() >= 0 && params.size.height() >= 0); | 322 DCHECK(params.size.width() >= 0 && params.size.height() >= 0); |
| 323 | 323 |
| 324 TransferBufferManager* manager = new TransferBufferManager(nullptr); | 324 TransferBufferManager* manager = new TransferBufferManager(nullptr); |
| 325 transfer_buffer_manager_ = manager; | 325 transfer_buffer_manager_ = manager; |
| 326 manager->Initialize(); | 326 manager->Initialize(); |
| 327 | 327 |
| 328 scoped_ptr<CommandBufferService> command_buffer( | 328 std::unique_ptr<CommandBufferService> command_buffer( |
| 329 new CommandBufferService(transfer_buffer_manager_.get())); | 329 new CommandBufferService(transfer_buffer_manager_.get())); |
| 330 command_buffer->SetPutOffsetChangeCallback(base::Bind( | 330 command_buffer->SetPutOffsetChangeCallback(base::Bind( |
| 331 &InProcessCommandBuffer::PumpCommandsOnGpuThread, gpu_thread_weak_ptr_)); | 331 &InProcessCommandBuffer::PumpCommandsOnGpuThread, gpu_thread_weak_ptr_)); |
| 332 command_buffer->SetParseErrorCallback(base::Bind( | 332 command_buffer->SetParseErrorCallback(base::Bind( |
| 333 &InProcessCommandBuffer::OnContextLostOnGpuThread, gpu_thread_weak_ptr_)); | 333 &InProcessCommandBuffer::OnContextLostOnGpuThread, gpu_thread_weak_ptr_)); |
| 334 | 334 |
| 335 if (!command_buffer->Initialize()) { | 335 if (!command_buffer->Initialize()) { |
| 336 LOG(ERROR) << "Could not initialize command buffer."; | 336 LOG(ERROR) << "Could not initialize command buffer."; |
| 337 DestroyOnGpuThread(); | 337 DestroyOnGpuThread(); |
| 338 return false; | 338 return false; |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 } | 835 } |
| 836 | 836 |
| 837 int32_t InProcessCommandBuffer::CreateGpuMemoryBufferImage( | 837 int32_t InProcessCommandBuffer::CreateGpuMemoryBufferImage( |
| 838 size_t width, | 838 size_t width, |
| 839 size_t height, | 839 size_t height, |
| 840 unsigned internalformat, | 840 unsigned internalformat, |
| 841 unsigned usage) { | 841 unsigned usage) { |
| 842 CheckSequencedThread(); | 842 CheckSequencedThread(); |
| 843 | 843 |
| 844 DCHECK(gpu_memory_buffer_manager_); | 844 DCHECK(gpu_memory_buffer_manager_); |
| 845 scoped_ptr<gfx::GpuMemoryBuffer> buffer( | 845 std::unique_ptr<gfx::GpuMemoryBuffer> buffer( |
| 846 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( | 846 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( |
| 847 gfx::Size(width, height), | 847 gfx::Size(width, height), |
| 848 gpu::DefaultBufferFormatForImageFormat(internalformat), | 848 gpu::DefaultBufferFormatForImageFormat(internalformat), |
| 849 gfx::BufferUsage::SCANOUT, 0 /* surface_id */)); | 849 gfx::BufferUsage::SCANOUT, 0 /* surface_id */)); |
| 850 if (!buffer) | 850 if (!buffer) |
| 851 return -1; | 851 return -1; |
| 852 | 852 |
| 853 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); | 853 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |
| 854 } | 854 } |
| 855 | 855 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 const base::Closure& callback) { | 1020 const base::Closure& callback) { |
| 1021 // The task_runner.get() check is to support using InProcessCommandBuffer on | 1021 // The task_runner.get() check is to support using InProcessCommandBuffer on |
| 1022 // a thread without a message loop. | 1022 // a thread without a message loop. |
| 1023 if (task_runner.get() && !task_runner->BelongsToCurrentThread()) { | 1023 if (task_runner.get() && !task_runner->BelongsToCurrentThread()) { |
| 1024 task_runner->PostTask(FROM_HERE, callback); | 1024 task_runner->PostTask(FROM_HERE, callback); |
| 1025 } else { | 1025 } else { |
| 1026 callback.Run(); | 1026 callback.Run(); |
| 1027 } | 1027 } |
| 1028 } | 1028 } |
| 1029 | 1029 |
| 1030 void RunOnTargetThread(scoped_ptr<base::Closure> callback) { | 1030 void RunOnTargetThread(std::unique_ptr<base::Closure> callback) { |
| 1031 DCHECK(callback.get()); | 1031 DCHECK(callback.get()); |
| 1032 callback->Run(); | 1032 callback->Run(); |
| 1033 } | 1033 } |
| 1034 | 1034 |
| 1035 } // anonymous namespace | 1035 } // anonymous namespace |
| 1036 | 1036 |
| 1037 base::Closure InProcessCommandBuffer::WrapCallback( | 1037 base::Closure InProcessCommandBuffer::WrapCallback( |
| 1038 const base::Closure& callback) { | 1038 const base::Closure& callback) { |
| 1039 // Make sure the callback gets deleted on the target thread by passing | 1039 // Make sure the callback gets deleted on the target thread by passing |
| 1040 // ownership. | 1040 // ownership. |
| 1041 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); | 1041 std::unique_ptr<base::Closure> scoped_callback(new base::Closure(callback)); |
| 1042 base::Closure callback_on_client_thread = | 1042 base::Closure callback_on_client_thread = |
| 1043 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); | 1043 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); |
| 1044 base::Closure wrapped_callback = | 1044 base::Closure wrapped_callback = |
| 1045 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() | 1045 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() |
| 1046 ? base::ThreadTaskRunnerHandle::Get() | 1046 ? base::ThreadTaskRunnerHandle::Get() |
| 1047 : nullptr, | 1047 : nullptr, |
| 1048 callback_on_client_thread); | 1048 callback_on_client_thread); |
| 1049 return wrapped_callback; | 1049 return wrapped_callback; |
| 1050 } | 1050 } |
| 1051 | 1051 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1114 framebuffer_completeness_cache_ = | 1114 framebuffer_completeness_cache_ = |
| 1115 new gpu::gles2::FramebufferCompletenessCache; | 1115 new gpu::gles2::FramebufferCompletenessCache; |
| 1116 return framebuffer_completeness_cache_; | 1116 return framebuffer_completeness_cache_; |
| 1117 } | 1117 } |
| 1118 | 1118 |
| 1119 SyncPointManager* GpuInProcessThread::sync_point_manager() { | 1119 SyncPointManager* GpuInProcessThread::sync_point_manager() { |
| 1120 return sync_point_manager_; | 1120 return sync_point_manager_; |
| 1121 } | 1121 } |
| 1122 | 1122 |
| 1123 } // namespace gpu | 1123 } // namespace gpu |
| OLD | NEW |