| Index: base/task_scheduler/post_task.cc
|
| diff --git a/base/task_scheduler/post_task.cc b/base/task_scheduler/post_task.cc
|
| index 6f9adae27f4cc3312928d773a522058761e7ea32..6da11bd8dc15061bc6f0d23536b6df945c379adf 100644
|
| --- a/base/task_scheduler/post_task.cc
|
| +++ b/base/task_scheduler/post_task.cc
|
| @@ -7,6 +7,7 @@
|
| #include <utility>
|
|
|
| #include "base/logging.h"
|
| +#include "base/task_scheduler/scoped_set_task_priority_for_current_thread.h"
|
| #include "base/task_scheduler/task_scheduler.h"
|
| #include "base/threading/post_task_and_reply_impl.h"
|
|
|
| @@ -29,6 +30,15 @@ class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl {
|
| const TaskTraits traits_;
|
| };
|
|
|
| +// Returns TaskTraits based on |traits|. If TaskPriority hasn't been set
|
| +// explicitly in |traits|, the returned TaskTraits have the current
|
| +// TaskPriority.
|
| +TaskTraits GetTaskTraitsWithExplicitPriority(const TaskTraits& traits) {
|
| + return traits.priority_set_explicitly()
|
| + ? traits
|
| + : TaskTraits(traits).WithPriority(
|
| + internal::GetTaskPriorityForCurrentThread());
|
| +}
|
|
|
| } // namespace
|
|
|
| @@ -62,7 +72,8 @@ void PostDelayedTaskWithTraits(const tracked_objects::Location& from_here,
|
| DCHECK(TaskScheduler::GetInstance())
|
| << "Ref. Prerequisite section of post_task.h";
|
| TaskScheduler::GetInstance()->PostDelayedTaskWithTraits(
|
| - from_here, traits, std::move(task), std::move(delay));
|
| + from_here, GetTaskTraitsWithExplicitPriority(traits), std::move(task),
|
| + std::move(delay));
|
| }
|
|
|
| void PostTaskWithTraitsAndReply(const tracked_objects::Location& from_here,
|
| @@ -76,7 +87,8 @@ void PostTaskWithTraitsAndReply(const tracked_objects::Location& from_here,
|
| scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(const TaskTraits& traits) {
|
| DCHECK(TaskScheduler::GetInstance())
|
| << "Ref. Prerequisite section of post_task.h";
|
| - return TaskScheduler::GetInstance()->CreateTaskRunnerWithTraits(traits);
|
| + return TaskScheduler::GetInstance()->CreateTaskRunnerWithTraits(
|
| + GetTaskTraitsWithExplicitPriority(traits));
|
| }
|
|
|
| scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits(
|
| @@ -84,7 +96,7 @@ scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits(
|
| DCHECK(TaskScheduler::GetInstance())
|
| << "Ref. Prerequisite section of post_task.h";
|
| return TaskScheduler::GetInstance()->CreateSequencedTaskRunnerWithTraits(
|
| - traits);
|
| + GetTaskTraitsWithExplicitPriority(traits));
|
| }
|
|
|
| scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits(
|
| @@ -92,7 +104,7 @@ scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits(
|
| DCHECK(TaskScheduler::GetInstance())
|
| << "Ref. Prerequisite section of post_task.h";
|
| return TaskScheduler::GetInstance()->CreateSingleThreadTaskRunnerWithTraits(
|
| - traits);
|
| + GetTaskTraitsWithExplicitPriority(traits));
|
| }
|
|
|
| #if defined(OS_WIN)
|
| @@ -100,7 +112,8 @@ scoped_refptr<SingleThreadTaskRunner> CreateCOMSTATaskRunnerWithTraits(
|
| const TaskTraits& traits) {
|
| DCHECK(TaskScheduler::GetInstance())
|
| << "Ref. Prerequisite section of post_task.h";
|
| - return TaskScheduler::GetInstance()->CreateCOMSTATaskRunnerWithTraits(traits);
|
| + return TaskScheduler::GetInstance()->CreateCOMSTATaskRunnerWithTraits(
|
| + GetTaskTraitsWithExplicitPriority(traits));
|
| }
|
| #endif // defined(OS_WIN)
|
|
|
|
|