diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-21 06:32:33 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-21 06:32:33 +0000 |
commit | 11f76c7e6b989b9683a88f5fe080f66b7d08f4ea (patch) | |
tree | a1816051e8f08748ea330cb0fde05ab8a0e6b3ef /base/message_loop.cc | |
parent | 0bb07852c6769a990a585a740613014520503dfe (diff) | |
download | chromium_src-11f76c7e6b989b9683a88f5fe080f66b7d08f4ea.zip chromium_src-11f76c7e6b989b9683a88f5fe080f66b7d08f4ea.tar.gz chromium_src-11f76c7e6b989b9683a88f5fe080f66b7d08f4ea.tar.bz2 |
Revert 63332 - Test of performance value of reducing calls to Now().
I'll revert asap, once the perf bots have kicked off.
TBR=mbelshe
Review URL: http://codereview.chromium.org/3936003
TBR=jar@chromium.org
Review URL: http://codereview.chromium.org/4051001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_loop.cc')
-rw-r--r-- | base/message_loop.cc | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/base/message_loop.cc b/base/message_loop.cc index 50bd44c..8f6c997b 100644 --- a/base/message_loop.cc +++ b/base/message_loop.cc @@ -494,11 +494,6 @@ bool MessageLoop::DeletePendingTasks() { delete task; } did_work |= !delayed_work_queue_.empty(); - while (!ripe_work_queue_.empty()) { - Task* task = ripe_work_queue_.front().task; - delayed_work_queue_.pop(); - delete task; - } while (!delayed_work_queue_.empty()) { Task* task = delayed_work_queue_.top().task; delayed_work_queue_.pop(); @@ -525,8 +520,7 @@ bool MessageLoop::DoWork() { if (!pending_task.delayed_run_time.is_null()) { AddToDelayedWorkQueue(pending_task); // If we changed the topmost task, then it is time to re-schedule. - if (ripe_work_queue_.empty() && - delayed_work_queue_.top().task == pending_task.task) + if (delayed_work_queue_.top().task == pending_task.task) pump_->ScheduleDelayedWork(pending_task.delayed_run_time); } else { if (DeferOrRunPendingTask(pending_task)) @@ -540,46 +534,21 @@ bool MessageLoop::DoWork() { } bool MessageLoop::DoDelayedWork(Time* next_delayed_work_time) { - if (!nestable_tasks_allowed_ || - (delayed_work_queue_.empty() && ripe_work_queue_.empty())) { + if (!nestable_tasks_allowed_ || delayed_work_queue_.empty()) { *next_delayed_work_time = Time(); return false; } - // When we "fall behind," there will be a lot of tasks in the delayed work - // queue that are ready to run. To increase efficiency when we fall behind, - // we will only call Time::Now() once, and then move all ready-to-run tasks - // (i.e., tasks that are "ripe") into ripe_work_queue_. As a result, the - // more we fall behind (and have a lot of ready-to-run delayed tasks), the - // more efficient we'll be at handling the tasks. - - if (ripe_work_queue_.empty()) { - base::Time now(Time::Now()); - - if (delayed_work_queue_.top().delayed_run_time > now) { - *next_delayed_work_time = delayed_work_queue_.top().delayed_run_time; - return false; - } - - do { - ripe_work_queue_.push(delayed_work_queue_.top()); - delayed_work_queue_.pop(); - } while (!delayed_work_queue_.empty() && - (delayed_work_queue_.top().delayed_run_time <= now)); - /* DHISTOGRAM_COUNTS("Chrome.RipeSize", - static_cast<int>(ripe_work_queue_.size())); - */ + if (delayed_work_queue_.top().delayed_run_time > Time::Now()) { + *next_delayed_work_time = delayed_work_queue_.top().delayed_run_time; + return false; } - PendingTask pending_task = ripe_work_queue_.front(); - ripe_work_queue_.pop(); + PendingTask pending_task = delayed_work_queue_.top(); + delayed_work_queue_.pop(); - if (!ripe_work_queue_.empty()) - *next_delayed_work_time = ripe_work_queue_.front().delayed_run_time; - else if (!delayed_work_queue_.empty()) + if (!delayed_work_queue_.empty()) *next_delayed_work_time = delayed_work_queue_.top().delayed_run_time; - else - *next_delayed_work_time = Time(); return DeferOrRunPendingTask(pending_task); } |