Index: components/scheduler/base/task_queue_impl.cc |
diff --git a/components/scheduler/base/task_queue_impl.cc b/components/scheduler/base/task_queue_impl.cc |
index c11aeca78ab19eb7441d1156a32ec505fe6b8911..f375c741de907808125f078679f8195dd94b55f7 100644 |
--- a/components/scheduler/base/task_queue_impl.cc |
+++ b/components/scheduler/base/task_queue_impl.cc |
@@ -4,6 +4,7 @@ |
#include "components/scheduler/base/task_queue_impl.h" |
+#include "base/debug/blame_context.h" |
#include "components/scheduler/base/task_queue_manager.h" |
#include "components/scheduler/base/task_queue_manager_delegate.h" |
#include "components/scheduler/base/time_domain.h" |
@@ -109,7 +110,8 @@ TaskQueueImpl::MainThreadOnly::MainThreadOnly( |
delayed_work_queue(new WorkQueue(task_queue, "delayed")), |
immediate_work_queue(new WorkQueue(task_queue, "immediate")), |
set_index(0), |
- is_enabled(true) {} |
+ is_enabled(true), |
+ blame_context(nullptr) {} |
TaskQueueImpl::MainThreadOnly::~MainThreadOnly() {} |
@@ -604,6 +606,8 @@ void TaskQueueImpl::RemoveTaskObserver( |
void TaskQueueImpl::NotifyWillProcessTask( |
const base::PendingTask& pending_task) { |
DCHECK(should_notify_observers_); |
+ if (main_thread_only().blame_context) |
+ main_thread_only().blame_context->Enter(); |
FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, |
main_thread_only().task_observers, |
WillProcessTask(pending_task)); |
@@ -615,6 +619,8 @@ void TaskQueueImpl::NotifyDidProcessTask( |
FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, |
main_thread_only().task_observers, |
DidProcessTask(pending_task)); |
+ if (main_thread_only().blame_context) |
+ main_thread_only().blame_context->Leave(); |
} |
void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) { |
@@ -644,6 +650,11 @@ TimeDomain* TaskQueueImpl::GetTimeDomain() const { |
return any_thread().time_domain; |
} |
+void TaskQueueImpl::SetBlameContext( |
+ base::debug::BlameContextBase* blame_context) { |
+ main_thread_only().blame_context = blame_context; |
+} |
+ |
// static |
void TaskQueueImpl::QueueAsValueInto(const std::queue<Task>& queue, |
base::trace_event::TracedValue* state) { |