Chromium Code Reviews| Index: components/mus/gles2/command_buffer_driver.cc |
| diff --git a/components/mus/gles2/command_buffer_driver.cc b/components/mus/gles2/command_buffer_driver.cc |
| index 649216a4fb71e8df6e476de135a9516d0c2d13f0..2157ef790e31542e818f117517b0a1b1392b82e2 100644 |
| --- a/components/mus/gles2/command_buffer_driver.cc |
| +++ b/components/mus/gles2/command_buffer_driver.cc |
| @@ -4,6 +4,7 @@ |
| #include "components/mus/gles2/command_buffer_driver.h" |
| +#include "base/atomic_sequence_num.h" |
| #include "base/bind.h" |
| #include "base/macros.h" |
| #include "base/memory/shared_memory.h" |
| @@ -35,10 +36,19 @@ |
| namespace mus { |
| +namespace { |
| + |
| +base::StaticAtomicSequenceNumber g_next_command_buffer_id; |
|
David Yen
2015/11/23 22:06:03
Could this be an atomic sequence in gpu_state inst
piman
2015/11/23 22:22:52
CommadnBufferDriver/CommandBufferImpl are for out-
David Yen
2015/11/23 22:40:32
If the IDs are always going to be generated servic
|
| + |
| +} |
| + |
| CommandBufferDriver::Client::~Client() {} |
| CommandBufferDriver::CommandBufferDriver(scoped_refptr<GpuState> gpu_state) |
| - : client_(nullptr), gpu_state_(gpu_state), weak_factory_(this) {} |
| + : command_buffer_id_(g_next_command_buffer_id.GetNext()), |
| + client_(nullptr), |
| + gpu_state_(gpu_state), |
| + weak_factory_(this) {} |
| CommandBufferDriver::~CommandBufferDriver() { |
| DestroyDecoder(); |
| @@ -56,7 +66,10 @@ void CommandBufferDriver::Initialize( |
| mojom::GpuCapabilitiesPtr capabilities = |
| success ? mojom::GpuCapabilities::From(decoder_->GetCapabilities()) |
| : nullptr; |
| - sync_client_->DidInitialize(success, capabilities.Pass()); |
| + sync_client_->DidInitialize(success, |
| + gpu::CommandBufferNamespace::MOJO, |
| + command_buffer_id_, |
| + capabilities.Pass()); |
| } |
| bool CommandBufferDriver::MakeCurrent() { |
| @@ -113,6 +126,10 @@ bool CommandBufferDriver::DoInitialize( |
| decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group.get())); |
| scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), decoder_.get(), |
| decoder_.get())); |
| + sync_point_order_data_ = gpu::SyncPointOrderData::Create(); |
| + sync_point_client_ = gpu_state_->sync_point_manager()->CreateSyncPointClient( |
| + sync_point_order_data_, gpu::CommandBufferNamespace::MOJO, |
| + command_buffer_id_); |
| decoder_->set_engine(scheduler_.get()); |
| decoder_->SetWaitSyncPointCallback(base::Bind( |
| &CommandBufferDriver::OnWaitSyncPoint, base::Unretained(this))); |
| @@ -299,12 +316,8 @@ bool CommandBufferDriver::OnWaitSyncPoint(uint32_t sync_point) { |
| } |
| void CommandBufferDriver::OnFenceSyncRelease(uint64_t release) { |
| - // TODO(dyen): Implement once CommandBufferID has been figured out and |
| - // we have a SyncPointClient. It would probably look like what is commented |
| - // out below: |
| - // if (!sync_point_client_->client_state()->IsFenceSyncReleased(release)) |
| - // sync_point_client_->ReleaseFenceSync(release); |
| - NOTIMPLEMENTED(); |
| + if (!sync_point_client_->client_state()->IsFenceSyncReleased(release)) |
| + sync_point_client_->ReleaseFenceSync(release); |
| } |
| bool CommandBufferDriver::OnWaitFenceSync( |
| @@ -324,16 +337,13 @@ bool CommandBufferDriver::OnWaitFenceSync( |
| if (release_state->IsFenceSyncReleased(release)) |
| return true; |
| - // TODO(dyen): Implement once CommandBufferID has been figured out and |
| - // we have a SyncPointClient. It would probably look like what is commented |
| - // out below: |
| - // scheduler_->SetScheduled(false); |
| - // sync_point_client_->Wait( |
| - // release_state.get(), |
| - // release, |
| - // base::Bind(&CommandBufferDriver::OnSyncPointRetired, |
| - // weak_factory_.GetWeakPtr())); |
| - NOTIMPLEMENTED(); |
| + |
| + scheduler_->SetScheduled(false); |
| + sync_point_client_->Wait( |
| + release_state.get(), |
| + release, |
| + base::Bind(&CommandBufferDriver::OnSyncPointRetired, |
| + weak_factory_.GetWeakPtr())); |
| return scheduler_->scheduled(); |
| } |