| 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));
|
|
|