| 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 "mojo/services/gles2/command_buffer_impl.h" | 5 #include "mojo/services/gles2/command_buffer_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/shared_memory.h" | 8 #include "base/memory/shared_memory.h" |
| 9 | 9 |
| 10 #include "gpu/command_buffer/common/constants.h" | 10 #include "gpu/command_buffer/common/constants.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 111 |
| 112 command_buffer_->SetPutOffsetChangeCallback(base::Bind( | 112 command_buffer_->SetPutOffsetChangeCallback(base::Bind( |
| 113 &gpu::GpuScheduler::PutChanged, base::Unretained(scheduler_.get()))); | 113 &gpu::GpuScheduler::PutChanged, base::Unretained(scheduler_.get()))); |
| 114 command_buffer_->SetGetBufferChangeCallback(base::Bind( | 114 command_buffer_->SetGetBufferChangeCallback(base::Bind( |
| 115 &gpu::GpuScheduler::SetGetBuffer, base::Unretained(scheduler_.get()))); | 115 &gpu::GpuScheduler::SetGetBuffer, base::Unretained(scheduler_.get()))); |
| 116 command_buffer_->SetParseErrorCallback( | 116 command_buffer_->SetParseErrorCallback( |
| 117 base::Bind(&CommandBufferImpl::OnParseError, base::Unretained(this))); | 117 base::Bind(&CommandBufferImpl::OnParseError, base::Unretained(this))); |
| 118 | 118 |
| 119 // TODO(piman): other callbacks | 119 // TODO(piman): other callbacks |
| 120 | 120 |
| 121 const size_t kSize = sizeof(gpu::CommandBufferSharedState); |
| 121 scoped_ptr<base::SharedMemory> shared_state_shm( | 122 scoped_ptr<base::SharedMemory> shared_state_shm( |
| 122 new base::SharedMemory(shared_state, false)); | 123 new base::SharedMemory(shared_state, false)); |
| 123 if (!command_buffer_->SetSharedStateBuffer(shared_state_shm.Pass())) | 124 if (!shared_state_shm->Map(kSize)) |
| 124 return false; | 125 return false; |
| 125 | 126 |
| 127 command_buffer_->SetSharedStateBuffer( |
| 128 gpu::MakeBackingFromSharedMemory(shared_state_shm.Pass(), kSize)); |
| 126 return true; | 129 return true; |
| 127 } | 130 } |
| 128 | 131 |
| 129 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { | 132 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { |
| 130 command_buffer_->SetGetBuffer(buffer); | 133 command_buffer_->SetGetBuffer(buffer); |
| 131 } | 134 } |
| 132 | 135 |
| 133 void CommandBufferImpl::Flush(int32_t put_offset) { | 136 void CommandBufferImpl::Flush(int32_t put_offset) { |
| 134 command_buffer_->Flush(put_offset); | 137 command_buffer_->Flush(put_offset); |
| 135 } | 138 } |
| 136 | 139 |
| 137 void CommandBufferImpl::MakeProgress(int32_t last_get_offset) { | 140 void CommandBufferImpl::MakeProgress(int32_t last_get_offset) { |
| 138 // TODO(piman): handle out-of-order. | 141 // TODO(piman): handle out-of-order. |
| 139 AllocationScope scope; | 142 AllocationScope scope; |
| 140 sync_client_->DidMakeProgress(command_buffer_->GetState()); | 143 sync_client_->DidMakeProgress(command_buffer_->GetState()); |
| 141 } | 144 } |
| 142 | 145 |
| 143 void CommandBufferImpl::RegisterTransferBuffer(int32_t id, | 146 void CommandBufferImpl::RegisterTransferBuffer(int32_t id, |
| 144 const ShmHandle& transfer_buffer, | 147 const ShmHandle& transfer_buffer, |
| 145 uint32_t size) { | 148 uint32_t size) { |
| 146 // Take ownership of the memory and map it into this process. | 149 // Take ownership of the memory and map it into this process. |
| 147 // This validates the size. | 150 // This validates the size. |
| 148 scoped_ptr<base::SharedMemory> shared_memory( | 151 scoped_ptr<base::SharedMemory> shared_memory( |
| 149 new base::SharedMemory(transfer_buffer, false)); | 152 new base::SharedMemory(transfer_buffer, false)); |
| 150 if (!shared_memory->Map(size)) { | 153 if (!shared_memory->Map(size)) { |
| 151 DVLOG(0) << "Failed to map shared memory."; | 154 DVLOG(0) << "Failed to map shared memory."; |
| 152 return; | 155 return; |
| 153 } | 156 } |
| 154 | 157 |
| 155 command_buffer_->RegisterTransferBuffer(id, shared_memory.Pass(), size); | 158 command_buffer_->RegisterTransferBuffer( |
| 159 id, gpu::MakeBackingFromSharedMemory(shared_memory.Pass(), size)); |
| 156 } | 160 } |
| 157 | 161 |
| 158 void CommandBufferImpl::DestroyTransferBuffer(int32_t id) { | 162 void CommandBufferImpl::DestroyTransferBuffer(int32_t id) { |
| 159 command_buffer_->DestroyTransferBuffer(id); | 163 command_buffer_->DestroyTransferBuffer(id); |
| 160 } | 164 } |
| 161 | 165 |
| 162 void CommandBufferImpl::Echo(const Callback<void()>& callback) { | 166 void CommandBufferImpl::Echo(const Callback<void()>& callback) { |
| 163 callback.Run(); | 167 callback.Run(); |
| 164 } | 168 } |
| 165 | 169 |
| 166 void CommandBufferImpl::RequestAnimationFrames() { | 170 void CommandBufferImpl::RequestAnimationFrames() { |
| 167 timer_.Start(FROM_HERE, | 171 timer_.Start(FROM_HERE, |
| 168 base::TimeDelta::FromMilliseconds(16), | 172 base::TimeDelta::FromMilliseconds(16), |
| 169 this, | 173 this, |
| 170 &CommandBufferImpl::DrawAnimationFrame); | 174 &CommandBufferImpl::DrawAnimationFrame); |
| 171 } | 175 } |
| 172 | 176 |
| 173 void CommandBufferImpl::CancelAnimationFrames() { timer_.Stop(); } | 177 void CommandBufferImpl::CancelAnimationFrames() { timer_.Stop(); } |
| 174 | 178 |
| 175 void CommandBufferImpl::OnParseError() { | 179 void CommandBufferImpl::OnParseError() { |
| 176 gpu::CommandBuffer::State state = command_buffer_->GetState(); | 180 gpu::CommandBuffer::State state = command_buffer_->GetState(); |
| 177 client_->LostContext(state.context_lost_reason); | 181 client_->LostContext(state.context_lost_reason); |
| 178 } | 182 } |
| 179 | 183 |
| 180 void CommandBufferImpl::DrawAnimationFrame() { client_->DrawAnimationFrame(); } | 184 void CommandBufferImpl::DrawAnimationFrame() { client_->DrawAnimationFrame(); } |
| 181 | 185 |
| 182 } // namespace services | 186 } // namespace services |
| 183 } // namespace mojo | 187 } // namespace mojo |
| OLD | NEW |