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

Unified Diff: base/message_loop/message_loop.cc

Issue 1886453003: Make PendingTask move-only and pass it by value on retaining params (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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: base/message_loop/message_loop.cc
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index 01e7512b19f09ce6d611c6b2db18161e55437dbf..0c5ab24922ebc823a3c786c6784af115141292bd 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -17,6 +17,7 @@
#include "base/metrics/histogram.h"
#include "base/metrics/statistics_recorder.h"
#include "base/run_loop.h"
+#include "base/stl_util.h"
#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
#include "base/thread_task_runner_handle.h"
#include "base/threading/thread_local.h"
@@ -450,7 +451,8 @@ bool MessageLoop::ProcessNextDelayedNonNestableTask() {
if (deferred_non_nestable_work_queue_.empty())
return false;
- PendingTask pending_task = deferred_non_nestable_work_queue_.front();
+ PendingTask pending_task =
+ std::move(deferred_non_nestable_work_queue_.front());
deferred_non_nestable_work_queue_.pop();
RunTask(pending_task);
@@ -483,7 +485,7 @@ void MessageLoop::RunTask(const PendingTask& pending_task) {
nestable_tasks_allowed_ = true;
}
-bool MessageLoop::DeferOrRunPendingTask(const PendingTask& pending_task) {
+bool MessageLoop::DeferOrRunPendingTask(PendingTask pending_task) {
if (pending_task.nestable || run_loop_->run_depth_ == 1) {
RunTask(pending_task);
// Show that we ran a task (Note: a new one might arrive as a
@@ -493,25 +495,25 @@ bool MessageLoop::DeferOrRunPendingTask(const PendingTask& pending_task) {
// We couldn't run the task now because we're in a nested message loop
// and the task isn't nestable.
- deferred_non_nestable_work_queue_.push(pending_task);
+ deferred_non_nestable_work_queue_.push(std::move(pending_task));
return false;
}
-void MessageLoop::AddToDelayedWorkQueue(const PendingTask& pending_task) {
+void MessageLoop::AddToDelayedWorkQueue(PendingTask pending_task) {
// Move to the delayed work queue.
- delayed_work_queue_.push(pending_task);
+ delayed_work_queue_.push(std::move(pending_task));
}
bool MessageLoop::DeletePendingTasks() {
bool did_work = !work_queue_.empty();
while (!work_queue_.empty()) {
- PendingTask pending_task = work_queue_.front();
+ PendingTask pending_task = std::move(work_queue_.front());
work_queue_.pop();
if (!pending_task.delayed_run_time.is_null()) {
// We want to delete delayed tasks in the same order in which they would
// normally be deleted in case of any funny dependencies between delayed
// tasks.
- AddToDelayedWorkQueue(pending_task);
+ AddToDelayedWorkQueue(std::move(pending_task));
}
}
did_work |= !deferred_non_nestable_work_queue_.empty();
@@ -589,15 +591,17 @@ bool MessageLoop::DoWork() {
// Execute oldest task.
do {
- PendingTask pending_task = work_queue_.front();
+ PendingTask pending_task = std::move(work_queue_.front());
work_queue_.pop();
if (!pending_task.delayed_run_time.is_null()) {
- AddToDelayedWorkQueue(pending_task);
+ int sequence_num = pending_task.sequence_num;
+ TimeTicks delayed_run_time = pending_task.delayed_run_time;
+ AddToDelayedWorkQueue(std::move(pending_task));
// If we changed the topmost task, then it is time to reschedule.
- if (delayed_work_queue_.top().task.Equals(pending_task.task))
- pump_->ScheduleDelayedWork(pending_task.delayed_run_time);
+ if (delayed_work_queue_.top().sequence_num != sequence_num)
+ pump_->ScheduleDelayedWork(delayed_run_time);
} else {
- if (DeferOrRunPendingTask(pending_task))
+ if (DeferOrRunPendingTask(std::move(pending_task)))
return true;
}
} while (!work_queue_.empty());
@@ -629,13 +633,12 @@ bool MessageLoop::DoDelayedWork(TimeTicks* next_delayed_work_time) {
}
}
- PendingTask pending_task = delayed_work_queue_.top();
- delayed_work_queue_.pop();
+ PendingTask pending_task = PopOutFromPriorityQueue(&delayed_work_queue_);
if (!delayed_work_queue_.empty())
*next_delayed_work_time = delayed_work_queue_.top().delayed_run_time;
- return DeferOrRunPendingTask(pending_task);
+ return DeferOrRunPendingTask(std::move(pending_task));
}
bool MessageLoop::DoIdleWork() {

Powered by Google App Engine
This is Rietveld 408576698