Chromium Code Reviews| 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; |