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; |