Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(597)

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 444173003: aw: Improve idle task scheduling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix typo Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 4a3def924a8879812d6d571d17eb413decec70fc..a659ca350e27ce1492bdcf0bc1babece7e3e3bd2 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -206,6 +206,7 @@ InProcessCommandBuffer::GetDefaultService() {
InProcessCommandBuffer::InProcessCommandBuffer(
const scoped_refptr<Service>& service)
: context_lost_(false),
+ idle_work_pending_(false),
last_put_offset_(-1),
flush_event_(false, false),
service_(service.get() ? service : GetDefaultService()),
@@ -504,24 +505,31 @@ 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()) {
- service_->ScheduleIdleWork(
- base::Bind(&InProcessCommandBuffer::ScheduleMoreIdleWork,
- gpu_thread_weak_ptr_));
+ gpu_scheduler_->HasMoreWork() && !idle_work_pending_) {
+ ScheduleIdleWorkOnGpuThread();
}
}
-void InProcessCommandBuffer::ScheduleMoreIdleWork() {
+void InProcessCommandBuffer::PerformIdleWork() {
CheckSequencedThread();
+ idle_work_pending_ = false;
base::AutoLock lock(command_buffer_lock_);
if (gpu_scheduler_->HasMoreWork()) {
gpu_scheduler_->PerformIdleWork();
- service_->ScheduleIdleWork(
- base::Bind(&InProcessCommandBuffer::ScheduleMoreIdleWork,
- gpu_thread_weak_ptr_));
+ ScheduleIdleWorkOnGpuThread();
}
}
+void InProcessCommandBuffer::ScheduleIdleWorkOnGpuThread() {
+ CheckSequencedThread();
+ if (idle_work_pending_)
+ return;
+ idle_work_pending_ = true;
+ service_->ScheduleIdleWork(
+ base::Bind(&InProcessCommandBuffer::PerformIdleWork,
+ gpu_thread_weak_ptr_));
+}
+
void InProcessCommandBuffer::Flush(int32 put_offset) {
CheckSequencedThread();
if (last_state_.error != gpu::error::kNoError)

Powered by Google App Engine
This is Rietveld 408576698