Index: base/task_scheduler/task_tracker.cc |
diff --git a/base/task_scheduler/task_tracker.cc b/base/task_scheduler/task_tracker.cc |
index 29951a60f4b51020142ffb8fe32f2860b1af1a3d..f38ec06130e6bebfd77d469478a34dea93b34951 100644 |
--- a/base/task_scheduler/task_tracker.cc |
+++ b/base/task_scheduler/task_tracker.cc |
@@ -7,6 +7,8 @@ |
#include "base/callback.h" |
#include "base/debug/task_annotator.h" |
#include "base/metrics/histogram_macros.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/threading/sequenced_task_runner_handle.h" |
#include "base/threading/thread_restrictions.h" |
namespace base { |
@@ -86,8 +88,23 @@ void TaskTracker::RunTask(const Task* task) { |
task->traits.shutdown_behavior() != |
TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN); |
- debug::TaskAnnotator task_annotator; |
- task_annotator.RunTask(kQueueFunctionName, *task); |
+ { |
+ // Set up TaskRunnerHandle as expected for the scope of the task. |
+ std::unique_ptr<SequencedTaskRunnerHandle> sequenced_task_runner_handle; |
+ std::unique_ptr<ThreadTaskRunnerHandle> single_thread_task_runner_handle; |
+ DCHECK(!task->sequenced_task_runner_ref || |
+ !task->single_thread_task_runner_ref); |
+ if (task->sequenced_task_runner_ref) { |
+ sequenced_task_runner_handle.reset( |
+ new SequencedTaskRunnerHandle(task->sequenced_task_runner_ref)); |
+ } else if (task->single_thread_task_runner_ref) { |
+ single_thread_task_runner_handle.reset( |
+ new ThreadTaskRunnerHandle(task->single_thread_task_runner_ref)); |
+ } |
+ |
+ debug::TaskAnnotator task_annotator; |
+ task_annotator.RunTask(kQueueFunctionName, *task); |
+ } |
AfterRunTask(shutdown_behavior); |
} |