Chromium Code Reviews| 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..4de5102e19c3201af864df6903e0972648954aaf 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 CreateTaskTraitsWithExplicitPriority(const TaskTraits& traits) { |
|
gab
2017/04/25 17:16:41
I prefer GetTaskTraitsWithExplicitPriority() since
fdoray
2017/04/25 17:57:48
Done.
|
| + 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, CreateTaskTraitsWithExplicitPriority(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( |
| + CreateTaskTraitsWithExplicitPriority(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); |
| + CreateTaskTraitsWithExplicitPriority(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); |
| + CreateTaskTraitsWithExplicitPriority(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( |
| + CreateTaskTraitsWithExplicitPriority(traits)); |
| } |
| #endif // defined(OS_WIN) |