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