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..6abe2134d1bdd315d8f6480ad9699c61cc0330fb 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" |
| @@ -14,6 +15,15 @@ namespace base { |
| namespace { |
| +TaskTraits SetExplicitPriorityInTaskTraits(const TaskTraits& traits) { |
|
gab
2017/04/25 14:19:16
This doesn't "set" a priority, it returns a new on
fdoray
2017/04/25 15:21:18
Done.
|
| + TaskTraits traits_with_explicit_priority(traits); |
| + if (traits.priority() == TaskPriority::INHERITED) { |
| + traits_with_explicit_priority.WithPriority( |
| + internal::GetTaskPriorityForCurrentThread()); |
| + } |
| + return traits_with_explicit_priority; |
|
gab
2017/04/25 14:19:16
How about this whole function as:
return traits.p
fdoray
2017/04/25 15:21:18
Done. A copy is required to call WithPriority() (c
|
| +} |
| + |
| class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl { |
| public: |
| explicit PostTaskAndReplyTaskRunner(const TaskTraits& traits) |
| @@ -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, SetExplicitPriorityInTaskTraits(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( |
| + SetExplicitPriorityInTaskTraits(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); |
| + SetExplicitPriorityInTaskTraits(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); |
| + SetExplicitPriorityInTaskTraits(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( |
| + SetExplicitPriorityInTaskTraits(traits)); |
| } |
| #endif // defined(OS_WIN) |