Add QueuePriority::kVeryHighPriority
We want to be able to prioritize loading tasks in blink but we need to
ensure loading control tasks have a higher priority than loading tasks
but below highest (which is used for input). This requires us to add
yet another priority.
Bug: 863341
Change-Id: I1e2b76220d37b632b8706863288df3b323f2a6f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1625111
Commit-Queue: Alex Clarke <alexclarke@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Cr-Commit-Position: refs/heads/master@{#662271}
diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc
index e30b78f..bce5c1d 100644
--- a/base/task/sequence_manager/sequence_manager_impl.cc
+++ b/base/task/sequence_manager/sequence_manager_impl.cc
@@ -437,6 +437,8 @@
return "RunControlPriorityTask";
case TaskQueue::QueuePriority::kHighestPriority:
return "RunHighestPriorityTask";
+ case TaskQueue::QueuePriority::kVeryHighPriority:
+ return "RunVeryHighPriorityTask";
case TaskQueue::QueuePriority::kHighPriority:
return "RunHighPriorityTask";
case TaskQueue::QueuePriority::kNormalPriority:
diff --git a/base/task/sequence_manager/sequence_manager_impl_unittest.cc b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
index f0f221b9..bd9f3f9 100644
--- a/base/task/sequence_manager/sequence_manager_impl_unittest.cc
+++ b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
@@ -4422,11 +4422,12 @@
EXPECT_EQ(order,
"000000000000000000000000000000000000000000000000000000000000"
- "111121111213112141121113121111211412311121111211312411121111"
- "231112114121131211112111123412222223222224223222222223242222"
- "223222222423222222223433333343333334333333433333343333334333"
- "333433333343333344444444444444444444444444444444444444444444"
- "555555555555555555555555555555555555555555555555555555555555");
+ "111131211314121315113214131121311151324113112131114132511311"
+ "213411132115131241311121311145132111311214311253323432333233"
+ "453233323432333253432333233432353233432333233453233323422252"
+ "242222224252222422222245222224222254444445444444544444454444"
+ "445444444544444454445555555555555555555555555555555555555555"
+ "666666666666666666666666666666666666666666666666666666666666");
}
class CancelableTaskWithDestructionObserver {
diff --git a/base/task/sequence_manager/task_queue.h b/base/task/sequence_manager/task_queue.h
index 19838e0..673503b 100644
--- a/base/task/sequence_manager/task_queue.h
+++ b/base/task/sequence_manager/task_queue.h
@@ -83,17 +83,19 @@
// and can starve the best effort queue.
kHighestPriority = 1,
- kHighPriority = 2,
+ kVeryHighPriority = 2,
+
+ kHighPriority = 3,
// Queues with normal priority are the default.
- kNormalPriority = 3,
- kLowPriority = 4,
+ kNormalPriority = 4,
+ kLowPriority = 5,
// Queues with best effort priority will only be run if all other queues are
// empty. They can be starved by the other queues.
- kBestEffortPriority = 5,
+ kBestEffortPriority = 6,
// Must be the last entry.
- kQueuePriorityCount = 6,
+ kQueuePriorityCount = 7,
kFirstQueuePriority = kControlPriority,
};
diff --git a/base/task/sequence_manager/task_queue_selector.h b/base/task/sequence_manager/task_queue_selector.h
index 334237f..e7cf55e 100644
--- a/base/task/sequence_manager/task_queue_selector.h
+++ b/base/task/sequence_manager/task_queue_selector.h
@@ -91,10 +91,14 @@
// starved by delayed tasks.
void SetImmediateStarvationCountForTest(size_t immediate_starvation_count);
- // Maximum score to accumulate before high priority tasks are run even in
+ // Maximum score to accumulate before very high priority tasks are run even in
// the presence of highest priority tasks.
static const size_t kMaxHighPriorityStarvationScore = 3;
+ // Maximum score to accumulate before high priority tasks are run even in the
+ // presence of very high priority tasks.
+ static const size_t kMaxVeryHighPriorityStarvationScore = 5;
+
// Maximum score to accumulate before normal priority tasks are run even in
// the presence of higher priority tasks i.e. highest and high priority tasks.
static const size_t kMaxNormalPriorityStarvationScore = 10;
@@ -267,6 +271,9 @@
// kHighestPriority
0,
+ // kVeryHighPriority
+ kMaxVeryHighPriorityStarvationScore,
+
// kHighPriority
kMaxHighPriorityStarvationScore,
diff --git a/third_party/blink/renderer/platform/scheduler/test/fuzzer/proto/sequence_manager_test_description.proto b/third_party/blink/renderer/platform/scheduler/test/fuzzer/proto/sequence_manager_test_description.proto
index c6c87b3..dfcbdf7 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fuzzer/proto/sequence_manager_test_description.proto
+++ b/third_party/blink/renderer/platform/scheduler/test/fuzzer/proto/sequence_manager_test_description.proto
@@ -16,8 +16,9 @@
LOW = 2;
NORMAL = 3;
HIGH = 4;
- HIGHEST = 5;
- CONTROL = 6;
+ VERY_HIGH = 5;
+ HIGHEST = 6;
+ CONTROL = 7;
}
message Action {
diff --git a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
index 938197f4..596f306 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
@@ -13,7 +13,7 @@
TaskQueue::QueuePriority ToTaskQueuePriority(
SequenceManagerTestDescription::QueuePriority priority) {
- static_assert(TaskQueue::kQueuePriorityCount == 6,
+ static_assert(TaskQueue::kQueuePriorityCount == 7,
"Number of task queue priorities has changed in "
"TaskQueue::QueuePriority.");
@@ -27,6 +27,8 @@
return TaskQueue::kNormalPriority;
case SequenceManagerTestDescription::HIGH:
return TaskQueue::kHighPriority;
+ case SequenceManagerTestDescription::VERY_HIGH:
+ return TaskQueue::kVeryHighPriority;
case SequenceManagerTestDescription::HIGHEST:
return TaskQueue::kHighestPriority;
case SequenceManagerTestDescription::CONTROL: