Add InternalContentCapture Task Type
ContentCaptureTask will run in Idle task queue and has the fixed
BestEffortPriority.
- This patch added BestEffortTaskQueue which has fixed BestEffortPriority.
- ContentCapture task run in BestEffortTaskQueue.
Bug: 924681
Change-Id: Iac93a983b4b82495e1e8e8f59be3677eaf9458c4
Reviewed-on: https://chromium-review.googlesource.com/c/1435840
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#629417}
diff --git a/third_party/blink/public/platform/task_type.h b/third_party/blink/public/platform/task_type.h
index 19abed3..4c16d7c2 100644
--- a/third_party/blink/public/platform/task_type.h
+++ b/third_party/blink/public/platform/task_type.h
@@ -12,7 +12,8 @@
//
// For the task type usage guideline, see https://bit.ly/2vMAsQ4
//
-// When a new task type is created, use kCount value as a new value.
+// When a new task type is created, use kCount value as a new value,
+// the tools/metrics/histograms/enums.xml shall also be updated.
enum class TaskType : unsigned {
///////////////////////////////////////
// Speced tasks should use one of the following task types
@@ -202,6 +203,9 @@
// Tasks used at IntersectionObserver.
kInternalIntersectionObserver = 44,
+ // Task used for ContentCapture.
+ kInternalContentCapture = 61,
+
///////////////////////////////////////
// The following task types are only for thread-local queues.
///////////////////////////////////////
@@ -220,7 +224,7 @@
kWorkerThreadTaskQueueV8 = 47,
kWorkerThreadTaskQueueCompositor = 48,
- kCount = 61,
+ kCount = 62,
};
} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
index c515a10..193328f 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -392,6 +392,9 @@
TaskType type) {
// TODO(haraken): Optimize the mapping from TaskTypes to task runners.
switch (type) {
+ // kInternalContentCapture uses BestEffortTaskQueue and is handled
+ // sparately.
+ case TaskType::kInternalContentCapture:
case TaskType::kJavascriptTimer:
return ThrottleableTaskQueueTraits();
case TaskType::kInternalLoading:
@@ -506,6 +509,8 @@
return frame_task_queue_controller_->LoadingControlTaskQueue();
case TaskType::kInternalInspector:
return frame_task_queue_controller_->InspectorTaskQueue();
+ case TaskType::kInternalContentCapture:
+ return frame_task_queue_controller_->BestEffortTaskQueue();
case TaskType::kExperimentalWebSchedulingUserInteraction:
return frame_task_queue_controller_->ExperimentalWebSchedulingTaskQueue(
FrameTaskQueueController::WebSchedulingTaskQueueType::
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
index b4c1261..b6e906d 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
@@ -1809,6 +1809,14 @@
true));
}
+TEST_F(FrameSchedulerImplTest, ContentCaptureHasIdleTaskQueue) {
+ auto task_queue = GetTaskQueue(TaskType::kInternalContentCapture);
+
+ EXPECT_TRUE(task_queue->FixedPriority().has_value());
+ EXPECT_EQ(TaskQueue::QueuePriority::kBestEffortPriority,
+ task_queue->FixedPriority().value());
+}
+
} // namespace frame_scheduler_impl_unittest
} // namespace scheduler
} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.cc
index 7afcea95..553f95c 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.cc
@@ -66,6 +66,17 @@
}
scoped_refptr<MainThreadTaskQueue>
+FrameTaskQueueController::BestEffortTaskQueue() {
+ if (!best_effort_task_queue_) {
+ best_effort_task_queue_ = main_thread_scheduler_impl_->NewTaskQueue(
+ MainThreadTaskQueue::QueueCreationParams(
+ MainThreadTaskQueue::QueueType::kIdle)
+ .SetFixedPriority(TaskQueue::QueuePriority::kBestEffortPriority));
+ }
+ return best_effort_task_queue_;
+}
+
+scoped_refptr<MainThreadTaskQueue>
FrameTaskQueueController::ExperimentalWebSchedulingTaskQueue(
WebSchedulingTaskQueueType task_queue_type) {
if (!web_scheduling_task_queues_[task_queue_type])
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.h b/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.h
index 18235bf..336e778e 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_task_queue_controller.h
@@ -72,6 +72,9 @@
// Return the inspector task queue and create it if it doesn't exist.
scoped_refptr<MainThreadTaskQueue> InspectorTaskQueue();
+ // Return the best effort task queue and create it if it doesn't exist.
+ scoped_refptr<MainThreadTaskQueue> BestEffortTaskQueue();
+
enum WebSchedulingTaskQueueType : unsigned {
kWebSchedulingUserVisiblePriority,
kWebSchedulingBestEffortPriority,
@@ -139,6 +142,8 @@
// behavior as far as virtual time is concerned.
scoped_refptr<MainThreadTaskQueue> inspector_task_queue_;
+ scoped_refptr<MainThreadTaskQueue> best_effort_task_queue_;
+
scoped_refptr<MainThreadTaskQueue>
web_scheduling_task_queues_[kWebSchedulingPriorityCount];
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.cc b/third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.cc
index a4cd8be..66916aa 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.cc
@@ -129,6 +129,8 @@
return "WorkerAnimation";
case TaskType::kInternalTranslation:
return "InternalTranslation";
+ case TaskType::kInternalContentCapture:
+ return "InternalContentCapture";
case TaskType::kCount:
return "Count";
}
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
index 251719bf..d3e0a98 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
@@ -194,6 +194,7 @@
case TaskType::kExperimentalWebSchedulingBestEffort:
case TaskType::kInternalTranslation:
case TaskType::kServiceWorkerClientMessage:
+ case TaskType::kInternalContentCapture:
case TaskType::kCount:
NOTREACHED();
break;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f5702ee..f7f63e2 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -45604,6 +45604,7 @@
<int value="57" label="ApplicationLifeCycle"/>
<int value="58" label="BackgroundFetch"/>
<int value="59" label="Permission"/>
+ <int value="61" label="InternalContentCapture"/>
</enum>
<enum name="RendererSchedulerTaskUseCase">