Commit 843f015a authored by Scott Haseley's avatar Scott Haseley Committed by Commit Bot

[scheduler] Fix DCHECK failing due to QueueType::kWebScheduling not included as per-frame.

QueueType::kWebScheduling was recently added for the scheduling API and these
task queues are per-frame. These task queues aren't used outside of unit tests
yet, so this DCHECK won't affect chrome builds, but it is failing locally
causing flakiness in scheduling API wpt tests.

This CL adds a separate IsPerFrameTaskQueue() method with a switch so adding
future QueueTypes cause a compile error if the test isn't updated.

Bug: 984057
Change-Id: If2ac727f63d26ae3998e8dddccbf39c9b680151e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1724896Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Commit-Queue: Scott Haseley <shaseley@chromium.org>
Cr-Commit-Position: refs/heads/master@{#682302}
parent e6de83a3
...@@ -226,15 +226,7 @@ void FrameInterferenceRecorder::RecordHistogram( ...@@ -226,15 +226,7 @@ void FrameInterferenceRecorder::RecordHistogram(
// with frames. // with frames.
DCHECK(GetFrameSchedulerForQueue(queue)); DCHECK(GetFrameSchedulerForQueue(queue));
const MainThreadTaskQueue::QueueType queue_type = queue->queue_type(); const MainThreadTaskQueue::QueueType queue_type = queue->queue_type();
// TODO(altimin): Remove kDefault once there is no per-frame kDefault queue. DCHECK(MainThreadTaskQueue::IsPerFrameTaskQueue(queue_type));
DCHECK(queue_type == MainThreadTaskQueue::QueueType::kDefault ||
queue_type == MainThreadTaskQueue::QueueType::kFrameLoading ||
queue_type == MainThreadTaskQueue::QueueType::kFrameLoadingControl ||
queue_type == MainThreadTaskQueue::QueueType::kFrameThrottleable ||
queue_type == MainThreadTaskQueue::QueueType::kFrameDeferrable ||
queue_type == MainThreadTaskQueue::QueueType::kFramePausable ||
queue_type == MainThreadTaskQueue::QueueType::kFrameUnpausable ||
queue_type == MainThreadTaskQueue::QueueType::kIdle);
const std::string histogram_name = const std::string histogram_name =
std::string("RendererScheduler.TimeRunningOtherFramesWhileTaskReady.") + std::string("RendererScheduler.TimeRunningOtherFramesWhileTaskReady.") +
......
...@@ -70,6 +70,40 @@ const char* MainThreadTaskQueue::NameForQueueType( ...@@ -70,6 +70,40 @@ const char* MainThreadTaskQueue::NameForQueueType(
return nullptr; return nullptr;
} }
// static
bool MainThreadTaskQueue::IsPerFrameTaskQueue(
MainThreadTaskQueue::QueueType queue_type) {
switch (queue_type) {
// TODO(altimin): Remove kDefault once there is no per-frame kDefault queue.
case MainThreadTaskQueue::QueueType::kDefault:
case MainThreadTaskQueue::QueueType::kFrameLoading:
case MainThreadTaskQueue::QueueType::kFrameLoadingControl:
case MainThreadTaskQueue::QueueType::kFrameThrottleable:
case MainThreadTaskQueue::QueueType::kFrameDeferrable:
case MainThreadTaskQueue::QueueType::kFramePausable:
case MainThreadTaskQueue::QueueType::kFrameUnpausable:
case MainThreadTaskQueue::QueueType::kIdle:
case MainThreadTaskQueue::QueueType::kWebScheduling:
return true;
case MainThreadTaskQueue::QueueType::kControl:
case MainThreadTaskQueue::QueueType::kUnthrottled:
case MainThreadTaskQueue::QueueType::kCompositor:
case MainThreadTaskQueue::QueueType::kTest:
case MainThreadTaskQueue::QueueType::kV8:
case MainThreadTaskQueue::QueueType::kIPC:
case MainThreadTaskQueue::QueueType::kInput:
case MainThreadTaskQueue::QueueType::kDetached:
case MainThreadTaskQueue::QueueType::kCleanup:
case MainThreadTaskQueue::QueueType::kOther:
return false;
case MainThreadTaskQueue::QueueType::kCount:
NOTREACHED();
return false;
}
NOTREACHED();
return false;
}
MainThreadTaskQueue::QueueClass MainThreadTaskQueue::QueueClassForQueueType( MainThreadTaskQueue::QueueClass MainThreadTaskQueue::QueueClassForQueueType(
QueueType type) { QueueType type) {
switch (type) { switch (type) {
......
...@@ -86,6 +86,11 @@ class PLATFORM_EXPORT MainThreadTaskQueue ...@@ -86,6 +86,11 @@ class PLATFORM_EXPORT MainThreadTaskQueue
// lifetime. // lifetime.
static const char* NameForQueueType(QueueType queue_type); static const char* NameForQueueType(QueueType queue_type);
// Returns true if task queues of the given queue type can be created on a
// per-frame basis, and false if they are only created on a shared basis for
// the entire main thread.
static bool IsPerFrameTaskQueue(QueueType);
// High-level category used by MainThreadScheduler to make scheduling // High-level category used by MainThreadScheduler to make scheduling
// decisions. // decisions.
enum class QueueClass { enum class QueueClass {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment