Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 431a251

Browse files
Revert "Avoid spurious descheduling when posting message loop tasks. (#3812)" (#3862)
This reverts commit 2062ca1.
1 parent 9880703 commit 431a251

File tree

3 files changed

+5
-52
lines changed

3 files changed

+5
-52
lines changed

fml/message_loop_impl.cc

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -111,33 +111,19 @@ void MessageLoopImpl::RegisterTask(ftl::Closure task,
111111
// |task| synchronously within this function.
112112
return;
113113
}
114-
115-
ftl::TimePoint previous_wakeup, new_wakeup;
116-
{
117-
ftl::MutexLocker lock(&delayed_tasks_mutex_);
118-
if (delayed_tasks_.empty()) {
119-
previous_wakeup = ftl::TimePoint::Max();
120-
} else {
121-
previous_wakeup = delayed_tasks_.top().target_time;
122-
}
123-
delayed_tasks_.push({++order_, std::move(task), target_time});
124-
new_wakeup = delayed_tasks_.top().target_time;
125-
}
126-
if (new_wakeup < previous_wakeup) {
127-
WakeUp(new_wakeup);
128-
}
114+
ftl::MutexLocker lock(&delayed_tasks_mutex_);
115+
delayed_tasks_.push({++order_, std::move(task), target_time});
116+
WakeUp(delayed_tasks_.top().target_time);
129117
}
130118

131119
void MessageLoopImpl::RunExpiredTasks() {
132120
TRACE_EVENT0("fml", "MessageLoop::RunExpiredTasks");
133121
std::vector<ftl::Closure> invocations;
134122

135-
ftl::TimePoint new_wakeup;
136123
{
137124
ftl::MutexLocker lock(&delayed_tasks_mutex_);
138125

139126
if (delayed_tasks_.empty()) {
140-
FTL_DCHECK(terminated_); // No spurious wakeups except shutdown.
141127
return;
142128
}
143129

@@ -151,13 +137,9 @@ void MessageLoopImpl::RunExpiredTasks() {
151137
delayed_tasks_.pop();
152138
}
153139

154-
if (delayed_tasks_.empty()) {
155-
new_wakeup = ftl::TimePoint::Max();
156-
} else {
157-
new_wakeup = delayed_tasks_.top().target_time;
158-
}
140+
WakeUp(delayed_tasks_.empty() ? ftl::TimePoint::Max()
141+
: delayed_tasks_.top().target_time);
159142
}
160-
WakeUp(new_wakeup);
161143

162144
for (const auto& invocation : invocations) {
163145
invocation();

fml/message_loop_unittests.cc

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -140,34 +140,6 @@ TEST(MessageLoop, CheckRunsTaskOnCurrentThread) {
140140
thread.join();
141141
}
142142

143-
TEST(MessageLoop, TIME_SENSITIVE(NewTaskDueBeforePendingTask)) {
144-
intptr_t tasks_run = 0;
145-
std::thread thread([&tasks_run]() {
146-
fml::MessageLoop::EnsureInitializedForCurrentThread();
147-
auto& loop = fml::MessageLoop::GetCurrent();
148-
auto begin = ftl::TimePoint::Now();
149-
loop.GetTaskRunner()->PostDelayedTask(
150-
[&tasks_run]() {
151-
ASSERT_EQ(tasks_run, 1);
152-
tasks_run++;
153-
fml::MessageLoop::GetCurrent().Terminate();
154-
},
155-
ftl::TimeDelta::FromMilliseconds(15));
156-
loop.GetTaskRunner()->PostDelayedTask(
157-
[begin, &tasks_run]() {
158-
ASSERT_EQ(tasks_run, 0);
159-
tasks_run++;
160-
auto delta = ftl::TimePoint::Now() - begin;
161-
auto ms = delta.ToMillisecondsF();
162-
ASSERT_LE(ms, 15); // Did not wait for previous wakeup time.
163-
},
164-
ftl::TimeDelta::FromMilliseconds(5));
165-
loop.Run();
166-
});
167-
thread.join();
168-
ASSERT_EQ(tasks_run, 2);
169-
}
170-
171143
TEST(MessageLoop, TIME_SENSITIVE(SingleDelayedTaskByDelta)) {
172144
bool checked = false;
173145
std::thread thread([&checked]() {

testing/run_tests.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
set -ex
44

55
out/host_debug_unopt/ftl_unittests
6-
out/host_debug_unopt/fml_unittests
76
out/host_debug_unopt/synchronization_unittests
87
out/host_debug_unopt/wtf_unittests
98

0 commit comments

Comments
 (0)