| 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 | 78 |
| 79 private: | 79 private: |
| 80 SyncPointOrderData* order_data_; | 80 SyncPointOrderData* order_data_; |
| 81 uint32_t order_num_; | 81 uint32_t order_num_; |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 struct GpuInProcessThreadHolder { | 84 struct GpuInProcessThreadHolder { |
| 85 GpuInProcessThreadHolder() | 85 GpuInProcessThreadHolder() |
| 86 : sync_point_manager(new SyncPointManager(false)), | 86 : sync_point_manager(new SyncPointManager(false)), |
| 87 gpu_thread(new GpuInProcessThread(sync_point_manager.get())) {} | 87 gpu_thread(new GpuInProcessThread(sync_point_manager.get())) {} |
| 88 scoped_ptr<SyncPointManager> sync_point_manager; | 88 std::unique_ptr<SyncPointManager> sync_point_manager; |
| 89 scoped_refptr<InProcessCommandBuffer::Service> gpu_thread; | 89 scoped_refptr<InProcessCommandBuffer::Service> gpu_thread; |
| 90 }; | 90 }; |
| 91 | 91 |
| 92 base::LazyInstance<GpuInProcessThreadHolder> g_default_service = | 92 base::LazyInstance<GpuInProcessThreadHolder> g_default_service = |
| 93 LAZY_INSTANCE_INITIALIZER; | 93 LAZY_INSTANCE_INITIALIZER; |
| 94 | 94 |
| 95 class ScopedEvent { | 95 class ScopedEvent { |
| 96 public: | 96 public: |
| 97 explicit ScopedEvent(base::WaitableEvent* event) : event_(event) {} | 97 explicit ScopedEvent(base::WaitableEvent* event) : event_(event) {} |
| 98 ~ScopedEvent() { event_->Signal(); } | 98 ~ScopedEvent() { event_->Signal(); } |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 const InitializeOnGpuThreadParams& params) { | 320 const InitializeOnGpuThreadParams& params) { |
| 321 CheckSequencedThread(); | 321 CheckSequencedThread(); |
| 322 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); | 322 gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); |
| 323 | 323 |
| 324 DCHECK(params.size.width() >= 0 && params.size.height() >= 0); | 324 DCHECK(params.size.width() >= 0 && params.size.height() >= 0); |
| 325 | 325 |
| 326 TransferBufferManager* manager = new TransferBufferManager(nullptr); | 326 TransferBufferManager* manager = new TransferBufferManager(nullptr); |
| 327 transfer_buffer_manager_ = manager; | 327 transfer_buffer_manager_ = manager; |
| 328 manager->Initialize(); | 328 manager->Initialize(); |
| 329 | 329 |
| 330 scoped_ptr<CommandBufferService> command_buffer( | 330 std::unique_ptr<CommandBufferService> command_buffer( |
| 331 new CommandBufferService(transfer_buffer_manager_.get())); | 331 new CommandBufferService(transfer_buffer_manager_.get())); |
| 332 command_buffer->SetPutOffsetChangeCallback(base::Bind( | 332 command_buffer->SetPutOffsetChangeCallback(base::Bind( |
| 333 &InProcessCommandBuffer::PumpCommandsOnGpuThread, gpu_thread_weak_ptr_)); | 333 &InProcessCommandBuffer::PumpCommandsOnGpuThread, gpu_thread_weak_ptr_)); |
| 334 command_buffer->SetParseErrorCallback(base::Bind( | 334 command_buffer->SetParseErrorCallback(base::Bind( |
| 335 &InProcessCommandBuffer::OnContextLostOnGpuThread, gpu_thread_weak_ptr_)); | 335 &InProcessCommandBuffer::OnContextLostOnGpuThread, gpu_thread_weak_ptr_)); |
| 336 | 336 |
| 337 if (!command_buffer->Initialize()) { | 337 if (!command_buffer->Initialize()) { |
| 338 LOG(ERROR) << "Could not initialize command buffer."; | 338 LOG(ERROR) << "Could not initialize command buffer."; |
| 339 DestroyOnGpuThread(); | 339 DestroyOnGpuThread(); |
| 340 return false; | 340 return false; |
| (...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 } | 832 } |
| 833 | 833 |
| 834 int32_t InProcessCommandBuffer::CreateGpuMemoryBufferImage( | 834 int32_t InProcessCommandBuffer::CreateGpuMemoryBufferImage( |
| 835 size_t width, | 835 size_t width, |
| 836 size_t height, | 836 size_t height, |
| 837 unsigned internalformat, | 837 unsigned internalformat, |
| 838 unsigned usage) { | 838 unsigned usage) { |
| 839 CheckSequencedThread(); | 839 CheckSequencedThread(); |
| 840 | 840 |
| 841 DCHECK(gpu_memory_buffer_manager_); | 841 DCHECK(gpu_memory_buffer_manager_); |
| 842 scoped_ptr<gfx::GpuMemoryBuffer> buffer( | 842 std::unique_ptr<gfx::GpuMemoryBuffer> buffer( |
| 843 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( | 843 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( |
| 844 gfx::Size(width, height), | 844 gfx::Size(width, height), |
| 845 gpu::DefaultBufferFormatForImageFormat(internalformat), | 845 gpu::DefaultBufferFormatForImageFormat(internalformat), |
| 846 gfx::BufferUsage::SCANOUT, 0 /* surface_id */)); | 846 gfx::BufferUsage::SCANOUT, 0 /* surface_id */)); |
| 847 if (!buffer) | 847 if (!buffer) |
| 848 return -1; | 848 return -1; |
| 849 | 849 |
| 850 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); | 850 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |
| 851 } | 851 } |
| 852 | 852 |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 const base::Closure& callback) { | 1007 const base::Closure& callback) { |
| 1008 // The task_runner.get() check is to support using InProcessCommandBuffer on | 1008 // The task_runner.get() check is to support using InProcessCommandBuffer on |
| 1009 // a thread without a message loop. | 1009 // a thread without a message loop. |
| 1010 if (task_runner.get() && !task_runner->BelongsToCurrentThread()) { | 1010 if (task_runner.get() && !task_runner->BelongsToCurrentThread()) { |
| 1011 task_runner->PostTask(FROM_HERE, callback); | 1011 task_runner->PostTask(FROM_HERE, callback); |
| 1012 } else { | 1012 } else { |
| 1013 callback.Run(); | 1013 callback.Run(); |
| 1014 } | 1014 } |
| 1015 } | 1015 } |
| 1016 | 1016 |
| 1017 void RunOnTargetThread(scoped_ptr<base::Closure> callback) { | 1017 void RunOnTargetThread(std::unique_ptr<base::Closure> callback) { |
| 1018 DCHECK(callback.get()); | 1018 DCHECK(callback.get()); |
| 1019 callback->Run(); | 1019 callback->Run(); |
| 1020 } | 1020 } |
| 1021 | 1021 |
| 1022 } // anonymous namespace | 1022 } // anonymous namespace |
| 1023 | 1023 |
| 1024 base::Closure InProcessCommandBuffer::WrapCallback( | 1024 base::Closure InProcessCommandBuffer::WrapCallback( |
| 1025 const base::Closure& callback) { | 1025 const base::Closure& callback) { |
| 1026 // Make sure the callback gets deleted on the target thread by passing | 1026 // Make sure the callback gets deleted on the target thread by passing |
| 1027 // ownership. | 1027 // ownership. |
| 1028 scoped_ptr<base::Closure> scoped_callback(new base::Closure(callback)); | 1028 std::unique_ptr<base::Closure> scoped_callback(new base::Closure(callback)); |
| 1029 base::Closure callback_on_client_thread = | 1029 base::Closure callback_on_client_thread = |
| 1030 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); | 1030 base::Bind(&RunOnTargetThread, base::Passed(&scoped_callback)); |
| 1031 base::Closure wrapped_callback = | 1031 base::Closure wrapped_callback = |
| 1032 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() | 1032 base::Bind(&PostCallback, base::ThreadTaskRunnerHandle::IsSet() |
| 1033 ? base::ThreadTaskRunnerHandle::Get() | 1033 ? base::ThreadTaskRunnerHandle::Get() |
| 1034 : nullptr, | 1034 : nullptr, |
| 1035 callback_on_client_thread); | 1035 callback_on_client_thread); |
| 1036 return wrapped_callback; | 1036 return wrapped_callback; |
| 1037 } | 1037 } |
| 1038 | 1038 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1081 framebuffer_completeness_cache_ = | 1081 framebuffer_completeness_cache_ = |
| 1082 new gpu::gles2::FramebufferCompletenessCache; | 1082 new gpu::gles2::FramebufferCompletenessCache; |
| 1083 return framebuffer_completeness_cache_; | 1083 return framebuffer_completeness_cache_; |
| 1084 } | 1084 } |
| 1085 | 1085 |
| 1086 SyncPointManager* GpuInProcessThread::sync_point_manager() { | 1086 SyncPointManager* GpuInProcessThread::sync_point_manager() { |
| 1087 return sync_point_manager_; | 1087 return sync_point_manager_; |
| 1088 } | 1088 } |
| 1089 | 1089 |
| 1090 } // namespace gpu | 1090 } // namespace gpu |
| OLD | NEW |