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: