Index: base/message_loop/message_loop.cc |
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc |
index 7038178079fc1619eec2366fc521c335f4fcadab..e3e8bf88f05bdf06099b7f2fc94b2b524aa1a287 100644 |
--- a/base/message_loop/message_loop.cc |
+++ b/base/message_loop/message_loop.cc |
@@ -123,6 +123,8 @@ MessageLoop::DestructionObserver::~DestructionObserver() { |
MessageLoop::NestingObserver::~NestingObserver() {} |
+MessageLoop::RecentTimeObserver::~RecentTimeObserver() {} |
+ |
//------------------------------------------------------------------------------ |
MessageLoop::MessageLoop(Type type) |
@@ -275,6 +277,16 @@ void MessageLoop::RemoveNestingObserver(NestingObserver* observer) { |
nesting_observers_.RemoveObserver(observer); |
} |
+void MessageLoop::AddRecentTimeObserver(RecentTimeObserver* observer) { |
+ DCHECK_EQ(this, current()); |
+ recent_time_observers_.AddObserver(observer); |
+} |
+ |
+void MessageLoop::RemoveRecentTimeObserver(RecentTimeObserver* observer) { |
+ DCHECK_EQ(this, current()); |
+ recent_time_observers_.RemoveObserver(observer); |
+} |
+ |
void MessageLoop::PostTask( |
const tracked_objects::Location& from_here, |
const Closure& task) { |
@@ -609,8 +621,13 @@ bool MessageLoop::DoWork() { |
} |
bool MessageLoop::DoDelayedWork(TimeTicks* next_delayed_work_time) { |
+ recent_time_ = TimeTicks::Now(); |
tdresser
2016/05/30 19:07:46
This is probably the scariest part of this patch.
panicker
2016/06/07 19:58:02
Looks like this is undoing the optimization added
tdresser
2016/06/07 20:23:16
I'm not very worried about calling now even when t
|
+ |
+ FOR_EACH_OBSERVER(RecentTimeObserver, recent_time_observers_, |
+ OnUpdateRecentTime(recent_time_)); |
panicker
2016/06/07 19:58:02
To me it seems iffy to call an override-able metho
tdresser
2016/06/07 20:23:15
It isn't completely clear to me how you'd make thi
panicker
2016/06/07 21:04:39
Yeah a global-ish getter could work, although not
|
+ |
if (!nestable_tasks_allowed_ || delayed_work_queue_.empty()) { |
- recent_time_ = *next_delayed_work_time = TimeTicks(); |
+ *next_delayed_work_time = TimeTicks(); |
return false; |
} |
@@ -623,7 +640,6 @@ bool MessageLoop::DoDelayedWork(TimeTicks* next_delayed_work_time) { |
TimeTicks next_run_time = delayed_work_queue_.top().delayed_run_time; |
if (next_run_time > recent_time_) { |
- recent_time_ = TimeTicks::Now(); // Get a better view of Now(); |
if (next_run_time > recent_time_) { |
*next_delayed_work_time = next_run_time; |
return false; |