summaryrefslogtreecommitdiffstats
path: root/base/message_loop.cc
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-21 06:32:33 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-21 06:32:33 +0000
commit11f76c7e6b989b9683a88f5fe080f66b7d08f4ea (patch)
treea1816051e8f08748ea330cb0fde05ab8a0e6b3ef /base/message_loop.cc
parent0bb07852c6769a990a585a740613014520503dfe (diff)
downloadchromium_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.cc47
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);
}