| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/gles2/command_buffer_client_impl.h" | 5 #include "mojo/gles2/command_buffer_client_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <limits> | 10 #include <limits> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/process/process_handle.h" | 14 #include "base/process/process_handle.h" |
| 15 #include "base/threading/thread_restrictions.h" | 15 #include "base/threading/thread_restrictions.h" |
| 16 #include "components/mus/gles2/command_buffer_type_conversions.h" | 16 #include "components/mus/gles2/command_buffer_type_conversions.h" |
| 17 #include "components/mus/gles2/mojo_buffer_backing.h" | 17 #include "components/mus/gles2/mojo_buffer_backing.h" |
| 18 #include "components/mus/gles2/mojo_gpu_memory_buffer.h" | 18 #include "components/mus/gles2/mojo_gpu_memory_buffer.h" |
| 19 #include "gpu/command_buffer/client/gpu_control_client.h" |
| 19 #include "gpu/command_buffer/common/command_buffer_id.h" | 20 #include "gpu/command_buffer/common/command_buffer_id.h" |
| 20 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" | 21 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" |
| 21 #include "gpu/command_buffer/common/sync_token.h" | 22 #include "gpu/command_buffer/common/sync_token.h" |
| 22 #include "mojo/platform_handle/platform_handle_functions.h" | 23 #include "mojo/platform_handle/platform_handle_functions.h" |
| 23 | 24 |
| 24 namespace gles2 { | 25 namespace gles2 { |
| 25 | 26 |
| 26 namespace { | 27 namespace { |
| 27 | 28 |
| 28 bool CreateMapAndDupSharedBuffer(size_t size, | 29 bool CreateMapAndDupSharedBuffer(size_t size, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 54 *output = input; | 55 *output = input; |
| 55 } | 56 } |
| 56 | 57 |
| 57 void InitializeCallback(mus::mojom::CommandBufferInitializeResultPtr* output, | 58 void InitializeCallback(mus::mojom::CommandBufferInitializeResultPtr* output, |
| 58 mus::mojom::CommandBufferInitializeResultPtr input) { | 59 mus::mojom::CommandBufferInitializeResultPtr input) { |
| 59 *output = std::move(input); | 60 *output = std::move(input); |
| 60 } | 61 } |
| 61 | 62 |
| 62 } // namespace | 63 } // namespace |
| 63 | 64 |
| 64 CommandBufferDelegate::~CommandBufferDelegate() {} | |
| 65 | |
| 66 void CommandBufferDelegate::ContextLost() {} | |
| 67 | |
| 68 CommandBufferClientImpl::CommandBufferClientImpl( | 65 CommandBufferClientImpl::CommandBufferClientImpl( |
| 69 CommandBufferDelegate* delegate, | |
| 70 const std::vector<int32_t>& attribs, | 66 const std::vector<int32_t>& attribs, |
| 71 mojo::ScopedMessagePipeHandle command_buffer_handle) | 67 mojo::ScopedMessagePipeHandle command_buffer_handle) |
| 72 : delegate_(delegate), | 68 : gpu_control_client_(nullptr), |
| 69 destroyed_(false), |
| 73 attribs_(attribs), | 70 attribs_(attribs), |
| 74 client_binding_(this), | 71 client_binding_(this), |
| 75 command_buffer_id_(), | 72 command_buffer_id_(), |
| 76 shared_state_(NULL), | 73 shared_state_(NULL), |
| 77 last_put_offset_(-1), | 74 last_put_offset_(-1), |
| 78 next_transfer_buffer_id_(0), | 75 next_transfer_buffer_id_(0), |
| 79 next_image_id_(0), | 76 next_image_id_(0), |
| 80 next_fence_sync_release_(1), | 77 next_fence_sync_release_(1), |
| 81 flushed_fence_sync_release_(0) { | 78 flushed_fence_sync_release_(0) { |
| 82 command_buffer_.Bind(mojo::InterfacePtrInfo<mus::mojom::CommandBuffer>( | 79 command_buffer_.Bind(mojo::InterfacePtrInfo<mus::mojom::CommandBuffer>( |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 scoped_ptr<gpu::BufferBacking> backing( | 193 scoped_ptr<gpu::BufferBacking> backing( |
| 197 new mus::MojoBufferBacking(std::move(handle), memory, size)); | 194 new mus::MojoBufferBacking(std::move(handle), memory, size)); |
| 198 scoped_refptr<gpu::Buffer> buffer(new gpu::Buffer(std::move(backing))); | 195 scoped_refptr<gpu::Buffer> buffer(new gpu::Buffer(std::move(backing))); |
| 199 return buffer; | 196 return buffer; |
| 200 } | 197 } |
| 201 | 198 |
| 202 void CommandBufferClientImpl::DestroyTransferBuffer(int32_t id) { | 199 void CommandBufferClientImpl::DestroyTransferBuffer(int32_t id) { |
| 203 command_buffer_->DestroyTransferBuffer(id); | 200 command_buffer_->DestroyTransferBuffer(id); |
| 204 } | 201 } |
| 205 | 202 |
| 203 void CommandBufferClientImpl::SetGpuControlClient(gpu::GpuControlClient* c) { |
| 204 gpu_control_client_ = c; |
| 205 } |
| 206 |
| 206 gpu::Capabilities CommandBufferClientImpl::GetCapabilities() { | 207 gpu::Capabilities CommandBufferClientImpl::GetCapabilities() { |
| 207 return capabilities_; | 208 return capabilities_; |
| 208 } | 209 } |
| 209 | 210 |
| 210 int32_t CommandBufferClientImpl::CreateImage(ClientBuffer buffer, | 211 int32_t CommandBufferClientImpl::CreateImage(ClientBuffer buffer, |
| 211 size_t width, | 212 size_t width, |
| 212 size_t height, | 213 size_t height, |
| 213 unsigned internalformat) { | 214 unsigned internalformat) { |
| 214 int32_t new_id = ++next_image_id_; | 215 int32_t new_id = ++next_image_id_; |
| 215 | 216 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); | 279 return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |
| 279 } | 280 } |
| 280 | 281 |
| 281 void CommandBufferClientImpl::SignalQuery(uint32_t query, | 282 void CommandBufferClientImpl::SignalQuery(uint32_t query, |
| 282 const base::Closure& callback) { | 283 const base::Closure& callback) { |
| 283 // TODO(piman) | 284 // TODO(piman) |
| 284 NOTIMPLEMENTED(); | 285 NOTIMPLEMENTED(); |
| 285 } | 286 } |
| 286 | 287 |
| 287 void CommandBufferClientImpl::Destroyed(int32_t lost_reason, int32_t error) { | 288 void CommandBufferClientImpl::Destroyed(int32_t lost_reason, int32_t error) { |
| 289 if (destroyed_) |
| 290 return; |
| 288 last_state_.context_lost_reason = | 291 last_state_.context_lost_reason = |
| 289 static_cast<gpu::error::ContextLostReason>(lost_reason); | 292 static_cast<gpu::error::ContextLostReason>(lost_reason); |
| 290 last_state_.error = static_cast<gpu::error::Error>(error); | 293 last_state_.error = static_cast<gpu::error::Error>(error); |
| 291 delegate_->ContextLost(); | 294 DCHECK(gpu_control_client_); |
| 295 gpu_control_client_->OnGpuControlLostContext(); |
| 296 destroyed_ = true; |
| 292 } | 297 } |
| 293 | 298 |
| 294 void CommandBufferClientImpl::SignalAck(uint32_t id) { | 299 void CommandBufferClientImpl::SignalAck(uint32_t id) { |
| 295 } | 300 } |
| 296 | 301 |
| 297 void CommandBufferClientImpl::SwapBuffersCompleted(int32_t result) { | 302 void CommandBufferClientImpl::SwapBuffersCompleted(int32_t result) { |
| 298 } | 303 } |
| 299 | 304 |
| 300 void CommandBufferClientImpl::UpdateState( | 305 void CommandBufferClientImpl::UpdateState( |
| 301 const gpu::CommandBuffer::State& state) { | 306 const gpu::CommandBuffer::State& state) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 | 388 |
| 384 // It is also safe to wait on the same context. | 389 // It is also safe to wait on the same context. |
| 385 if (sync_token->namespace_id() == gpu::CommandBufferNamespace::MOJO && | 390 if (sync_token->namespace_id() == gpu::CommandBufferNamespace::MOJO && |
| 386 sync_token->command_buffer_id() == GetCommandBufferID()) | 391 sync_token->command_buffer_id() == GetCommandBufferID()) |
| 387 return true; | 392 return true; |
| 388 | 393 |
| 389 return false; | 394 return false; |
| 390 } | 395 } |
| 391 | 396 |
| 392 } // namespace gles2 | 397 } // namespace gles2 |
| OLD | NEW |