| Index: cc/raster/task_graph_work_queue.cc
|
| diff --git a/cc/raster/task_graph_work_queue.cc b/cc/raster/task_graph_work_queue.cc
|
| index 98413eee1a668a196f137dd9f4ce0ffbfe59bdff..2c7a6010805ccc37e370bf00d1de68ef0690c9b2 100644
|
| --- a/cc/raster/task_graph_work_queue.cc
|
| +++ b/cc/raster/task_graph_work_queue.cc
|
| @@ -61,6 +61,28 @@ NamespaceToken TaskGraphWorkQueue::GetNamespaceToken() {
|
| return token;
|
| }
|
|
|
| +void AdjustRunnerPriority(Task* task, uint16_t old_cat, uint16_t new_cat) {
|
| + // Remove or put DCHECK.
|
| + if (old_cat == new_cat)
|
| + return;
|
| +
|
| + // Put DCHECK.
|
| + if (!task->IsRasterTask())
|
| + return;
|
| +
|
| + base::TestSimpleThread* runner = task->GetRunner();
|
| +
|
| + // Currently take care of only speeding up background threads.
|
| + if (new_cat == TASK_CATEGORY_NONCONCURRENT_FOREGROUND ||
|
| + new_cat == TASK_CATEGORY_FOREGROUND) {
|
| + if (runner->Speedup()) {
|
| + // LOG(ERROR) << "\nPRAS:: [" << std::hex << runner << "] "
|
| + // << runner->GetPrioritySetForDebugging()
|
| + // << ". Runner speeded up ^^^^^^^^^";
|
| + }
|
| + }
|
| +}
|
| +
|
| void TaskGraphWorkQueue::ScheduleTasks(NamespaceToken token, TaskGraph* graph) {
|
| TaskNamespace& task_namespace = namespaces_[token];
|
|
|
| @@ -100,11 +122,16 @@ void TaskGraphWorkQueue::ScheduleTasks(NamespaceToken token, TaskGraph* graph) {
|
| continue;
|
|
|
| // Skip if already running.
|
| - if (std::any_of(task_namespace.running_tasks.begin(),
|
| - task_namespace.running_tasks.end(),
|
| - [&node](const CategorizedTask& task) {
|
| - return task.second == node.task;
|
| - }))
|
| + if (std::any_of(
|
| + task_namespace.running_tasks.begin(),
|
| + task_namespace.running_tasks.end(),
|
| + [&node](const CategorizedTask& task) {
|
| + if ((task.second == node.task) && task.first != node.category) {
|
| + AdjustRunnerPriority(task.second.get(), (uint16_t)task.first,
|
| + (uint16_t)node.category);
|
| + }
|
| + return task.second == node.task;
|
| + }))
|
| continue;
|
|
|
| task_namespace.ready_to_run_tasks[node.category].push_back(PrioritizedTask(
|
|
|