Index: base/message_loop/incoming_task_queue.cc |
diff --git a/base/message_loop/incoming_task_queue.cc b/base/message_loop/incoming_task_queue.cc |
index 9e5b013684f003211256d011741c0cab800b0ec5..c1ce939b0c4708ac431d80b54a35ee8ef73b314c 100644 |
--- a/base/message_loop/incoming_task_queue.cc |
+++ b/base/message_loop/incoming_task_queue.cc |
@@ -4,6 +4,8 @@ |
#include "base/message_loop/incoming_task_queue.h" |
+#include <limits> |
+ |
#include "base/location.h" |
#include "base/message_loop/message_loop.h" |
#include "base/metrics/histogram.h" |
@@ -15,6 +17,13 @@ namespace internal { |
namespace { |
+#ifndef NDEBUG |
+// Delays larger than this are often bogus, and a warning should be emitted in |
+// debug builds to warn developers. http://crbug.com/450045 |
+const int kTaskDelayWarningThresholdInSeconds = |
+ 14 * 24 * 60 * 60; // 14 days. |
+#endif |
+ |
// Returns true if MessagePump::ScheduleWork() must be called one |
// time for every task that is added to the MessageLoop incoming queue. |
bool AlwaysNotifyPump(MessageLoop::Type type) { |
@@ -43,6 +52,11 @@ bool IncomingTaskQueue::AddToIncomingQueue( |
const Closure& task, |
TimeDelta delay, |
bool nestable) { |
+ DLOG_IF(WARNING, |
+ delay.InSeconds() > kTaskDelayWarningThresholdInSeconds) |
+ << "Requesting super-long task delay period of " << delay.InSeconds() |
+ << " seconds from here: " << from_here.ToString(); |
+ |
AutoLock locked(incoming_queue_lock_); |
PendingTask pending_task( |
from_here, task, CalculateDelayedRuntime(delay), nestable); |