Index: base/pending_task.cc |
diff --git a/base/pending_task.cc b/base/pending_task.cc |
index cca9ebfbff3d43bc1c840ce9493e372864e9e0d1..b2f95b4c451bad6cf461e2db50e812579b3c265e 100644 |
--- a/base/pending_task.cc |
+++ b/base/pending_task.cc |
@@ -4,18 +4,14 @@ |
#include "base/pending_task.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/tracked_objects.h" |
namespace base { |
PendingTask::PendingTask(const tracked_objects::Location& posted_from, |
OnceClosure task) |
- : base::TrackingInfo(posted_from, TimeTicks()), |
- task(std::move(task)), |
- posted_from(posted_from), |
- sequence_num(0), |
- nestable(true), |
- is_high_res(false) {} |
+ : PendingTask(posted_from, std::move(task), TimeTicks(), true) {} |
PendingTask::PendingTask(const tracked_objects::Location& posted_from, |
OnceClosure task, |
@@ -26,7 +22,19 @@ PendingTask::PendingTask(const tracked_objects::Location& posted_from, |
posted_from(posted_from), |
sequence_num(0), |
nestable(nestable), |
- is_high_res(false) {} |
+ is_high_res(false) { |
+ const PendingTask* parent_task = |
+ MessageLoop::current() ? MessageLoop::current()->current_pending_task_ |
+ : nullptr; |
+ if (parent_task) { |
+ task_backtrace[0] = parent_task->posted_from.program_counter(); |
+ std::copy(parent_task->task_backtrace.begin(), |
+ parent_task->task_backtrace.end() - 1, |
+ task_backtrace.begin() + 1); |
+ } else { |
+ task_backtrace.fill(nullptr); |
+ } |
+} |
PendingTask::PendingTask(PendingTask&& other) = default; |