Index: base/pending_task.cc |
diff --git a/base/pending_task.cc b/base/pending_task.cc |
index cca9ebfbff3d43bc1c840ce9493e372864e9e0d1..1b9a5917961016af687d6154b73314056ed8e712 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; |
+ task_backtrace[0] = posted_from.program_counter(); |
+ if (parent_task) { |
+ memcpy(&task_backtrace[1], &parent_task->task_backtrace[0], |
danakj
2017/02/08 18:06:22
I can't help but notice that we store the program_
awong
2017/02/08 23:20:38
sure...
nice catch!
I actually left the backtrac
|
+ sizeof(task_backtrace[0]) * (arraysize(task_backtrace) - 1)); |
+ } else { |
+ memset(&task_backtrace[1], 0, |
+ sizeof(task_backtrace[0]) * (arraysize(task_backtrace) - 1)); |
+ } |
+} |
PendingTask::PendingTask(PendingTask&& other) = default; |