Index: mojo/gles2/command_buffer_client_impl.cc |
diff --git a/mojo/gles2/command_buffer_client_impl.cc b/mojo/gles2/command_buffer_client_impl.cc |
deleted file mode 100644 |
index 8ad03d9e62c982b037df08926ca715ba9be4917e..0000000000000000000000000000000000000000 |
--- a/mojo/gles2/command_buffer_client_impl.cc |
+++ /dev/null |
@@ -1,294 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "mojo/gles2/command_buffer_client_impl.h" |
- |
-#include <limits> |
- |
-#include "base/logging.h" |
-#include "base/process/process_handle.h" |
-#include "mojo/services/gles2/command_buffer_type_conversions.h" |
-#include "mojo/services/gles2/mojo_buffer_backing.h" |
- |
-namespace mojo { |
-namespace gles2 { |
- |
-namespace { |
- |
-bool CreateMapAndDupSharedBuffer(size_t size, |
- void** memory, |
- mojo::ScopedSharedBufferHandle* handle, |
- mojo::ScopedSharedBufferHandle* duped) { |
- MojoResult result = mojo::CreateSharedBuffer(NULL, size, handle); |
- if (result != MOJO_RESULT_OK) |
- return false; |
- DCHECK(handle->is_valid()); |
- |
- result = mojo::DuplicateBuffer(handle->get(), NULL, duped); |
- if (result != MOJO_RESULT_OK) |
- return false; |
- DCHECK(duped->is_valid()); |
- |
- result = mojo::MapBuffer( |
- handle->get(), 0, size, memory, MOJO_MAP_BUFFER_FLAG_NONE); |
- if (result != MOJO_RESULT_OK) |
- return false; |
- DCHECK(*memory); |
- |
- return true; |
-} |
- |
-} // namespace |
- |
-CommandBufferDelegate::~CommandBufferDelegate() {} |
- |
-void CommandBufferDelegate::ContextLost() {} |
- |
-class CommandBufferClientImpl::SyncClientImpl |
- : public InterfaceImpl<CommandBufferSyncClient> { |
- public: |
- SyncClientImpl() : initialized_successfully_(false) {} |
- |
- bool WaitForInitialization() { |
- if (!WaitForIncomingMethodCall()) |
- return false; |
- return initialized_successfully_; |
- } |
- |
- CommandBufferStatePtr WaitForProgress() { |
- if (!WaitForIncomingMethodCall()) |
- return CommandBufferStatePtr(); |
- return command_buffer_state_.Pass(); |
- } |
- |
- private: |
- // CommandBufferSyncClient methods: |
- void DidInitialize(bool success) override { |
- initialized_successfully_ = success; |
- } |
- void DidMakeProgress(CommandBufferStatePtr state) override { |
- command_buffer_state_ = state.Pass(); |
- } |
- |
- bool initialized_successfully_; |
- CommandBufferStatePtr command_buffer_state_; |
-}; |
- |
-CommandBufferClientImpl::CommandBufferClientImpl( |
- CommandBufferDelegate* delegate, |
- const MojoAsyncWaiter* async_waiter, |
- ScopedMessagePipeHandle command_buffer_handle) |
- : delegate_(delegate), |
- shared_state_(NULL), |
- last_put_offset_(-1), |
- next_transfer_buffer_id_(0), |
- async_waiter_(async_waiter) { |
- command_buffer_.Bind(command_buffer_handle.Pass(), async_waiter); |
- command_buffer_.set_error_handler(this); |
- command_buffer_.set_client(this); |
-} |
- |
-CommandBufferClientImpl::~CommandBufferClientImpl() {} |
- |
-bool CommandBufferClientImpl::Initialize() { |
- const size_t kSharedStateSize = sizeof(gpu::CommandBufferSharedState); |
- void* memory = NULL; |
- mojo::ScopedSharedBufferHandle duped; |
- bool result = CreateMapAndDupSharedBuffer( |
- kSharedStateSize, &memory, &shared_state_handle_, &duped); |
- if (!result) |
- return false; |
- |
- shared_state_ = static_cast<gpu::CommandBufferSharedState*>(memory); |
- |
- shared_state()->Initialize(); |
- |
- CommandBufferSyncClientPtr sync_client; |
- sync_client_impl_.reset( |
- WeakBindToProxy(new SyncClientImpl(), &sync_client, async_waiter_)); |
- |
- command_buffer_->Initialize(sync_client.Pass(), duped.Pass()); |
- |
- // Wait for DidInitialize to come on the sync client pipe. |
- if (!sync_client_impl_->WaitForInitialization()) { |
- VLOG(1) << "Channel encountered error while creating command buffer"; |
- return false; |
- } |
- return true; |
-} |
- |
-gpu::CommandBuffer::State CommandBufferClientImpl::GetLastState() { |
- return last_state_; |
-} |
- |
-int32 CommandBufferClientImpl::GetLastToken() { |
- TryUpdateState(); |
- return last_state_.token; |
-} |
- |
-void CommandBufferClientImpl::Flush(int32 put_offset) { |
- if (last_put_offset_ == put_offset) |
- return; |
- |
- last_put_offset_ = put_offset; |
- command_buffer_->Flush(put_offset); |
-} |
- |
-void CommandBufferClientImpl::WaitForTokenInRange(int32 start, int32 end) { |
- TryUpdateState(); |
- while (!InRange(start, end, last_state_.token) && |
- last_state_.error == gpu::error::kNoError) { |
- MakeProgressAndUpdateState(); |
- TryUpdateState(); |
- } |
-} |
- |
-void CommandBufferClientImpl::WaitForGetOffsetInRange(int32 start, int32 end) { |
- TryUpdateState(); |
- while (!InRange(start, end, last_state_.get_offset) && |
- last_state_.error == gpu::error::kNoError) { |
- MakeProgressAndUpdateState(); |
- TryUpdateState(); |
- } |
-} |
- |
-void CommandBufferClientImpl::SetGetBuffer(int32 shm_id) { |
- command_buffer_->SetGetBuffer(shm_id); |
- last_put_offset_ = -1; |
-} |
- |
-scoped_refptr<gpu::Buffer> CommandBufferClientImpl::CreateTransferBuffer( |
- size_t size, |
- int32* id) { |
- if (size >= std::numeric_limits<uint32_t>::max()) |
- return NULL; |
- |
- void* memory = NULL; |
- mojo::ScopedSharedBufferHandle handle; |
- mojo::ScopedSharedBufferHandle duped; |
- if (!CreateMapAndDupSharedBuffer(size, &memory, &handle, &duped)) |
- return NULL; |
- |
- *id = ++next_transfer_buffer_id_; |
- |
- command_buffer_->RegisterTransferBuffer( |
- *id, duped.Pass(), static_cast<uint32_t>(size)); |
- |
- scoped_ptr<gpu::BufferBacking> backing( |
- new MojoBufferBacking(handle.Pass(), memory, size)); |
- scoped_refptr<gpu::Buffer> buffer(new gpu::Buffer(backing.Pass())); |
- return buffer; |
-} |
- |
-void CommandBufferClientImpl::DestroyTransferBuffer(int32 id) { |
- command_buffer_->DestroyTransferBuffer(id); |
-} |
- |
-gpu::Capabilities CommandBufferClientImpl::GetCapabilities() { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
- return gpu::Capabilities(); |
-} |
- |
-int32_t CommandBufferClientImpl::CreateImage(ClientBuffer buffer, |
- size_t width, |
- size_t height, |
- unsigned internalformat) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
- return -1; |
-} |
- |
-void CommandBufferClientImpl::DestroyImage(int32 id) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
-} |
- |
-int32_t CommandBufferClientImpl::CreateGpuMemoryBufferImage( |
- size_t width, |
- size_t height, |
- unsigned internalformat, |
- unsigned usage) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
- return -1; |
-} |
- |
-uint32 CommandBufferClientImpl::InsertSyncPoint() { |
- // TODO(jamesr): Optimize this. |
- WaitForGetOffsetInRange(last_put_offset_, last_put_offset_); |
- return 0; |
-} |
- |
-uint32 CommandBufferClientImpl::InsertFutureSyncPoint() { |
- // TODO(jamesr): Optimize this. |
- WaitForGetOffsetInRange(last_put_offset_, last_put_offset_); |
- return 0; |
-} |
- |
-void CommandBufferClientImpl::RetireSyncPoint(uint32 sync_point) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
-} |
- |
-void CommandBufferClientImpl::SignalSyncPoint(uint32 sync_point, |
- const base::Closure& callback) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
-} |
- |
-void CommandBufferClientImpl::SignalQuery(uint32 query, |
- const base::Closure& callback) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
-} |
- |
-void CommandBufferClientImpl::SetSurfaceVisible(bool visible) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
-} |
- |
-uint32 CommandBufferClientImpl::CreateStreamTexture(uint32 texture_id) { |
- // TODO(piman) |
- NOTIMPLEMENTED(); |
- return 0; |
-} |
- |
-void CommandBufferClientImpl::DidDestroy() { |
- LostContext(gpu::error::kUnknown); |
-} |
- |
-void CommandBufferClientImpl::LostContext(int32_t lost_reason) { |
- last_state_.error = gpu::error::kLostContext; |
- last_state_.context_lost_reason = |
- static_cast<gpu::error::ContextLostReason>(lost_reason); |
- delegate_->ContextLost(); |
-} |
- |
-void CommandBufferClientImpl::OnConnectionError() { |
- LostContext(gpu::error::kUnknown); |
-} |
- |
-void CommandBufferClientImpl::TryUpdateState() { |
- if (last_state_.error == gpu::error::kNoError) |
- shared_state()->Read(&last_state_); |
-} |
- |
-void CommandBufferClientImpl::MakeProgressAndUpdateState() { |
- command_buffer_->MakeProgress(last_state_.get_offset); |
- |
- CommandBufferStatePtr state = sync_client_impl_->WaitForProgress(); |
- if (!state) { |
- VLOG(1) << "Channel encountered error while waiting for command buffer"; |
- // TODO(piman): is it ok for this to re-enter? |
- DidDestroy(); |
- return; |
- } |
- |
- if (state->generation - last_state_.generation < 0x80000000U) |
- last_state_ = state.To<State>(); |
-} |
- |
-} // namespace gles2 |
-} // namespace mojo |