Chromium Code Reviews| Index: base/pending_task.cc |
| diff --git a/base/pending_task.cc b/base/pending_task.cc |
| index cca9ebfbff3d43bc1c840ce9493e372864e9e0d1..a7b9ff33ee560b2e189d6f6693b3d0625e934e4f 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.begin() + (task_backtrace.size() - 1), |
|
danakj
2017/02/09 16:39:51
this is end() - 1 right?
awong
2017/02/09 19:49:02
Yes...initially I thought it was illegal to subtra
|
| + task_backtrace.begin() + 1); |
| + } else { |
| + std::fill(task_backtrace.begin(), task_backtrace.end(), nullptr); |
| + } |
| +} |
| PendingTask::PendingTask(PendingTask&& other) = default; |