Index: gpu/command_buffer/service/in_process_command_buffer.cc |
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc |
index 6997cecdbf2de82fd668b4f7155050e5790e0727..615071e9ef5cea9a00a8408206c98fbf3738e6c9 100644 |
--- a/gpu/command_buffer/service/in_process_command_buffer.cc |
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc |
@@ -175,7 +175,7 @@ gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { |
InProcessCommandBuffer::InProcessCommandBuffer( |
const scoped_refptr<Service>& service) |
: context_lost_(false), |
- idle_work_pending_(false), |
+ delayed_work_pending_(false), |
image_factory_(nullptr), |
last_put_offset_(-1), |
gpu_memory_buffer_manager_(nullptr), |
@@ -494,29 +494,33 @@ void InProcessCommandBuffer::FlushOnGpuThread(int32 put_offset) { |
// If we've processed all pending commands but still have pending queries, |
// pump idle work until the query is passed. |
if (put_offset == state_after_last_flush_.get_offset && |
- gpu_scheduler_->HasMoreWork()) { |
- ScheduleIdleWorkOnGpuThread(); |
+ (gpu_scheduler_->HasMoreIdleWork() || |
+ gpu_scheduler_->HasPendingQueries())) { |
+ ScheduleDelayedWorkOnGpuThread(); |
} |
} |
-void InProcessCommandBuffer::PerformIdleWork() { |
+void InProcessCommandBuffer::PerformDelayedWork() { |
CheckSequencedThread(); |
- idle_work_pending_ = false; |
+ delayed_work_pending_ = false; |
base::AutoLock lock(command_buffer_lock_); |
- if (MakeCurrent() && gpu_scheduler_->HasMoreWork()) { |
+ if (MakeCurrent()) { |
gpu_scheduler_->PerformIdleWork(); |
- ScheduleIdleWorkOnGpuThread(); |
+ gpu_scheduler_->ProcessPendingQueries(); |
+ if (gpu_scheduler_->HasMoreIdleWork() || |
+ gpu_scheduler_->HasPendingQueries()) { |
+ ScheduleDelayedWorkOnGpuThread(); |
+ } |
} |
} |
-void InProcessCommandBuffer::ScheduleIdleWorkOnGpuThread() { |
+void InProcessCommandBuffer::ScheduleDelayedWorkOnGpuThread() { |
CheckSequencedThread(); |
- if (idle_work_pending_) |
+ if (delayed_work_pending_) |
return; |
- idle_work_pending_ = true; |
- service_->ScheduleIdleWork( |
- base::Bind(&InProcessCommandBuffer::PerformIdleWork, |
- gpu_thread_weak_ptr_)); |
+ delayed_work_pending_ = true; |
+ service_->ScheduleDelayedWork(base::Bind( |
+ &InProcessCommandBuffer::PerformDelayedWork, gpu_thread_weak_ptr_)); |
} |
void InProcessCommandBuffer::Flush(int32 put_offset) { |
@@ -929,7 +933,7 @@ void GpuInProcessThread::ScheduleTask(const base::Closure& task) { |
task_runner()->PostTask(FROM_HERE, task); |
} |
-void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) { |
+void GpuInProcessThread::ScheduleDelayedWork(const base::Closure& callback) { |
// Match delay with GpuCommandBufferStub. |
task_runner()->PostDelayedTask(FROM_HERE, callback, |
base::TimeDelta::FromMilliseconds(2)); |