Index: base/message_loop/message_pump_default.cc |
diff --git a/base/message_loop/message_pump_default.cc b/base/message_loop/message_pump_default.cc |
index 3449aec8605b32e7eb868573144ecb45929809d7..cf68270c56df197fb20b99242eedca1140b675db 100644 |
--- a/base/message_loop/message_pump_default.cc |
+++ b/base/message_loop/message_pump_default.cc |
@@ -4,8 +4,6 @@ |
#include "base/message_loop/message_pump_default.h" |
-#include <algorithm> |
- |
#include "base/logging.h" |
#include "base/threading/thread_restrictions.h" |
#include "build/build_config.h" |
@@ -54,38 +52,11 @@ void MessagePumpDefault::Run(Delegate* delegate) { |
if (delayed_work_time_.is_null()) { |
event_.Wait(); |
} else { |
- TimeDelta delay = delayed_work_time_ - TimeTicks::Now(); |
- if (delay > TimeDelta()) { |
-#if defined(OS_WIN) |
- // TODO(stanisc): crbug.com/623223: Consider moving the OS_WIN specific |
- // logic into TimedWait implementation in waitable_event_win.cc. |
- |
- // crbug.com/487724: on Windows, waiting for less than 1 ms results in |
- // returning from TimedWait promptly and spinning |
- // MessagePumpDefault::Run loop for up to 1 ms - until it is time to |
- // run a delayed task. |min_delay| is the minimum possible wait to |
- // to avoid the spinning. |
- constexpr TimeDelta min_delay = TimeDelta::FromMilliseconds(1); |
- do { |
- delay = std::max(delay, min_delay); |
- if (event_.TimedWait(delay)) |
- break; |
- |
- // TimedWait can time out earlier than the specified |delay| on |
- // Windows. It doesn't make sense to run the outer loop in that case |
- // because there isn't going to be any new work. It is less overhead |
- // to just go back to wait. |
- // In practice this inner wait loop might have up to 3 iterations. |
- delay = delayed_work_time_ - TimeTicks::Now(); |
- } while (delay > TimeDelta()); |
-#else |
- event_.TimedWait(delay); |
-#endif |
- } else { |
- // It looks like delayed_work_time_ indicates a time in the past, so we |
- // need to call DoDelayedWork now. |
- delayed_work_time_ = TimeTicks(); |
- } |
+ // No need to handle already expired |delayed_work_time_| in any special |
+ // way. When |delayed_work_time_| is in the past TimeWaitUntil returns |
+ // promptly and |delayed_work_time_| will re-initialized on a next |
+ // DoDelayedWork call which has to be called in order to get here again. |
+ event_.TimedWaitUntil(delayed_work_time_); |
} |
// Since event_ is auto-reset, we don't need to do anything special here |
// other than service each delegate method. |