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

Unified Diff: base/message_loop/message_loop.cc

Issue 1898233002: Report expected task queueing time via UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Super rough alternative approach. Created 4 years, 7 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 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;

Powered by Google App Engine
This is Rietveld 408576698