| Index: content/common/gpu/gpu_command_buffer_stub.cc
|
| diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc
|
| index 9db0f8e8edff0d29dc8df65de7395b73a4a9a901..3388f33f05dabc0f69b0f01b9264b0aa744c51ec 100644
|
| --- a/content/common/gpu/gpu_command_buffer_stub.cc
|
| +++ b/content/common/gpu/gpu_command_buffer_stub.cc
|
| @@ -203,7 +203,7 @@ GpuCommandBufferStub::GpuCommandBufferStub(
|
| last_flush_count_(0),
|
| last_memory_allocation_valid_(false),
|
| watchdog_(watchdog),
|
| - sync_point_wait_count_(0),
|
| + waiting_for_sync_point_(false),
|
| previous_processed_num_(0),
|
| active_url_(active_url),
|
| total_gpu_memory_(0) {
|
| @@ -333,7 +333,7 @@ bool GpuCommandBufferStub::Send(IPC::Message* message) {
|
| }
|
|
|
| bool GpuCommandBufferStub::IsScheduled() {
|
| - return (!scheduler_.get() || scheduler_->IsScheduled());
|
| + return (!scheduler_.get() || scheduler_->scheduled());
|
| }
|
|
|
| void GpuCommandBufferStub::PollWork() {
|
| @@ -425,8 +425,7 @@ void GpuCommandBufferStub::ScheduleDelayedWork(base::TimeDelta delay) {
|
| // for more work at the rate idle work is performed. This also ensures
|
| // that idle work is done as efficiently as possible without any
|
| // unnecessary delays.
|
| - if (scheduler_.get() &&
|
| - scheduler_->IsScheduled() &&
|
| + if (scheduler_.get() && scheduler_->scheduled() &&
|
| scheduler_->HasMoreIdleWork()) {
|
| delay = base::TimeDelta();
|
| }
|
| @@ -650,9 +649,8 @@ void GpuCommandBufferStub::OnInitialize(
|
| base::Unretained(scheduler_.get())));
|
| command_buffer_->SetParseErrorCallback(
|
| base::Bind(&GpuCommandBufferStub::OnParseError, base::Unretained(this)));
|
| - scheduler_->SetSchedulingChangedCallback(
|
| - base::Bind(&GpuChannel::StubSchedulingChanged,
|
| - base::Unretained(channel_)));
|
| + scheduler_->SetSchedulingChangedCallback(base::Bind(
|
| + &GpuCommandBufferStub::OnSchedulingChanged, base::Unretained(this)));
|
|
|
| if (watchdog_) {
|
| scheduler_->SetCommandProcessedCallback(
|
| @@ -748,6 +746,12 @@ void GpuCommandBufferStub::OnParseError() {
|
| CheckContextLost();
|
| }
|
|
|
| +void GpuCommandBufferStub::OnSchedulingChanged(bool scheduled) {
|
| + TRACE_EVENT1("gpu", "GpuCommandBufferStub::OnSchedulingChanged", "scheduled",
|
| + scheduled);
|
| + channel_->OnStubSchedulingChanged(this, scheduled);
|
| +}
|
| +
|
| void GpuCommandBufferStub::OnWaitForTokenInRange(int32 start,
|
| int32 end,
|
| IPC::Message* reply_message) {
|
| @@ -930,6 +934,8 @@ void GpuCommandBufferStub::OnRetireSyncPoint(uint32 sync_point) {
|
| }
|
|
|
| bool GpuCommandBufferStub::OnWaitSyncPoint(uint32 sync_point) {
|
| + DCHECK(!waiting_for_sync_point_);
|
| + DCHECK(scheduler_->scheduled());
|
| if (!sync_point)
|
| return true;
|
| GpuChannelManager* manager = channel_->gpu_channel_manager();
|
| @@ -938,27 +944,26 @@ bool GpuCommandBufferStub::OnWaitSyncPoint(uint32 sync_point) {
|
| return true;
|
| }
|
|
|
| - if (sync_point_wait_count_ == 0) {
|
| - TRACE_EVENT_ASYNC_BEGIN1("gpu", "WaitSyncPoint", this,
|
| - "GpuCommandBufferStub", this);
|
| - }
|
| + TRACE_EVENT_ASYNC_BEGIN1("gpu", "WaitSyncPoint", this, "GpuCommandBufferStub",
|
| + this);
|
| +
|
| scheduler_->SetScheduled(false);
|
| - ++sync_point_wait_count_;
|
| + waiting_for_sync_point_ = true;
|
| manager->sync_point_manager()->AddSyncPointCallback(
|
| sync_point,
|
| base::Bind(&RunOnThread, task_runner_,
|
| base::Bind(&GpuCommandBufferStub::OnWaitSyncPointCompleted,
|
| this->AsWeakPtr(), sync_point)));
|
| - return scheduler_->IsScheduled();
|
| + return !waiting_for_sync_point_;
|
| }
|
|
|
| void GpuCommandBufferStub::OnWaitSyncPointCompleted(uint32 sync_point) {
|
| + DCHECK(waiting_for_sync_point_);
|
| + DCHECK(!scheduler_->scheduled());
|
| + TRACE_EVENT_ASYNC_END1("gpu", "WaitSyncPoint", this, "GpuCommandBufferStub",
|
| + this);
|
| PullTextureUpdates(sync_point);
|
| - --sync_point_wait_count_;
|
| - if (sync_point_wait_count_ == 0) {
|
| - TRACE_EVENT_ASYNC_END1("gpu", "WaitSyncPoint", this,
|
| - "GpuCommandBufferStub", this);
|
| - }
|
| + waiting_for_sync_point_ = false;
|
| scheduler_->SetScheduled(true);
|
| }
|
|
|
|
|