Index: gpu/ipc/service/gpu_command_buffer_stub.cc |
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.cc b/gpu/ipc/service/gpu_command_buffer_stub.cc |
index 8cc19d9ffc4662b2129560f6891552d033551846..89f531f7b00a390dc412452edb06d1f2b5650dd1 100644 |
--- a/gpu/ipc/service/gpu_command_buffer_stub.cc |
+++ b/gpu/ipc/service/gpu_command_buffer_stub.cc |
@@ -610,6 +610,12 @@ bool GpuCommandBufferStub::Initialize( |
&GpuCommandBufferStub::OnFenceSyncRelease, base::Unretained(this))); |
decoder_->SetWaitFenceSyncCallback(base::Bind( |
&GpuCommandBufferStub::OnWaitFenceSync, base::Unretained(this))); |
+ decoder_->SetDescheduleUntilFinishedCallback( |
+ base::Bind(&GpuCommandBufferStub::OnDescheduleUntilFinished, |
+ base::Unretained(this))); |
+ decoder_->SetRescheduleAfterFinishedCallback( |
+ base::Bind(&GpuCommandBufferStub::OnRescheduleAfterFinished, |
+ base::Unretained(this))); |
command_buffer_->SetPutOffsetChangeCallback( |
base::Bind(&GpuCommandBufferStub::PutChanged, base::Unretained(this))); |
@@ -898,6 +904,21 @@ void GpuCommandBufferStub::OnFenceSyncRelease(uint64_t release) { |
sync_point_client_->ReleaseFenceSync(release); |
} |
+void GpuCommandBufferStub::OnDescheduleUntilFinished() { |
+ DCHECK(executor_->scheduled()); |
+ DCHECK(executor_->HasMoreIdleWork()); |
+ |
+ executor_->SetScheduled(false); |
+ channel_->OnStreamRescheduled(stream_id_, false); |
+} |
+ |
+void GpuCommandBufferStub::OnRescheduleAfterFinished() { |
+ DCHECK(!executor_->scheduled()); |
+ |
+ executor_->SetScheduled(true); |
+ channel_->OnStreamRescheduled(stream_id_, true); |
+} |
+ |
bool GpuCommandBufferStub::OnWaitFenceSync( |
CommandBufferNamespace namespace_id, |
CommandBufferId command_buffer_id, |