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