blob: 54ce39c0fd545e2d65d6ee6d5b7af152759f1382 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "platform/scheduler/child/worker_global_scope_scheduler.h"
#include "platform/scheduler/child/task_runner_impl.h"
#include "platform/scheduler/public/non_main_thread_scheduler.h"
namespace blink {
namespace scheduler {
WorkerGlobalScopeScheduler::WorkerGlobalScopeScheduler(
WorkerScheduler* worker_scheduler) {
task_queue_ = worker_scheduler->CreateTaskRunner();
}
WorkerGlobalScopeScheduler::~WorkerGlobalScopeScheduler() {
#if DCHECK_IS_ON()
DCHECK(is_disposed_);
#endif
}
void WorkerGlobalScopeScheduler::Dispose() {
task_queue_->ShutdownTaskQueue();
#if DCHECK_IS_ON()
is_disposed_ = true;
#endif
}
scoped_refptr<base::SingleThreadTaskRunner>
WorkerGlobalScopeScheduler::GetTaskRunner(TaskType type) const {
switch (type) {
case TaskType::kDeprecatedNone:
case TaskType::kDOMManipulation:
case TaskType::kUserInteraction:
case TaskType::kNetworking:
case TaskType::kNetworkingControl:
case TaskType::kHistoryTraversal:
case TaskType::kEmbed:
case TaskType::kMediaElementEvent:
case TaskType::kCanvasBlobSerialization:
case TaskType::kMicrotask:
case TaskType::kJavascriptTimer:
case TaskType::kRemoteEvent:
case TaskType::kWebSocket:
case TaskType::kPostedMessage:
case TaskType::kUnshippedPortMessage:
case TaskType::kFileReading:
case TaskType::kDatabaseAccess:
case TaskType::kPresentation:
case TaskType::kSensor:
case TaskType::kPerformanceTimeline:
case TaskType::kWebGL:
case TaskType::kIdleTask:
case TaskType::kMiscPlatformAPI:
case TaskType::kUnspecedTimer:
case TaskType::kUnspecedLoading:
case TaskType::kUnthrottled:
case TaskType::kInternalTest:
case TaskType::kInternalWebCrypto:
case TaskType::kInternalIndexedDB:
case TaskType::kInternalMedia:
case TaskType::kInternalMediaRealTime:
case TaskType::kInternalIPC:
// UnthrottledTaskRunner is generally discouraged in future.
// TODO(nhiroki): Identify which tasks can be throttled / suspendable and
// move them into other task runners. See also comments in
// Get(LocalFrame). (https://crbug.com/670534)
return TaskRunnerImpl::Create(task_queue_, type);
case TaskType::kCount:
NOTREACHED();
break;
}
NOTREACHED();
return nullptr;
}
} // namespace scheduler
} // namespace blink