Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Unified Diff: content/child/scheduler/worker_web_scheduler_impl.cc

Issue 1088053003: Patch 1/3 to get WebScheduler via WebThread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/child/scheduler/worker_web_scheduler_impl.cc
diff --git a/content/child/scheduler/worker_web_scheduler_impl.cc b/content/child/scheduler/worker_web_scheduler_impl.cc
new file mode 100644
index 0000000000000000000000000000000000000000..20c862838098b5f4c04607947c2a5a999df7a8cb
--- /dev/null
+++ b/content/child/scheduler/worker_web_scheduler_impl.cc
@@ -0,0 +1,103 @@
+// Copyright 2015 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 "content/child/scheduler/worker_web_scheduler_impl.h"
+
+#include "base/bind.h"
+#include "base/single_thread_task_runner.h"
+#include "content/child/scheduler/worker_scheduler.h"
+#include "third_party/WebKit/public/platform/WebTraceLocation.h"
+
+namespace content {
+
+WorkerWebSchedulerImpl::WorkerWebSchedulerImpl(
rmcilroy 2015/04/15 12:27:28 Do we need a separate one of these for Worker and
alex clarke (OOO till 29th) 2015/04/15 14:25:46 There are enough common bits to do that, and I thi
rmcilroy 2015/04/15 17:58:15 This wasn't actually what I meant. I meant that we
alex clarke (OOO till 29th) 2015/04/16 09:11:55 I suspect we'd end up with diamond inheritance pro
Sami 2015/04/16 10:44:01 My view is that the WebScheduler adapters should b
rmcilroy 2015/04/16 11:21:05 CL adds the common base scheduler (which I've name
+ WorkerScheduler* worker_scheduler)
+ : worker_scheduler_(worker_scheduler),
+ idle_task_runner_(worker_scheduler_->IdleTaskRunner()),
+ task_runner_(worker_scheduler_->DefaultTaskRunner()) {
+}
+
+WorkerWebSchedulerImpl::~WorkerWebSchedulerImpl() {
+}
+
+bool WorkerWebSchedulerImpl::shouldYieldForHighPriorityWork() {
+ return false;
+}
+
+bool WorkerWebSchedulerImpl::canExceedIdleDeadlineIfRequired() {
+ return worker_scheduler_->CanExceedIdleDeadlineIfRequired();
+}
+
+void WorkerWebSchedulerImpl::runIdleTask(
+ scoped_ptr<blink::WebThread::IdleTask> task,
+ base::TimeTicks deadline) {
+ task->run((deadline - base::TimeTicks()).InSecondsF());
+}
+
+void WorkerWebSchedulerImpl::runTask(scoped_ptr<blink::WebThread::Task> task) {
+ task->run();
+}
+
+void WorkerWebSchedulerImpl::postIdleTask(
+ const blink::WebTraceLocation& web_location,
+ blink::WebThread::IdleTask* task) {
+ DCHECK(idle_task_runner_);
+ scoped_ptr<blink::WebThread::IdleTask> scoped_task(task);
+ tracked_objects::Location location(web_location.functionName(),
Sami 2015/04/15 12:37:13 Is it worth writing a (possibly templated) helper
alex clarke (OOO till 29th) 2015/04/15 14:25:46 I was unable to get one template that can do it al
Sami 2015/04/16 10:44:01 Okay, thanks for giving it a try anyway!
+ web_location.fileName(), -1, nullptr);
+ idle_task_runner_->PostIdleTask(
+ location, base::Bind(&WorkerWebSchedulerImpl::runIdleTask,
+ base::Passed(&scoped_task)));
+}
+
+void WorkerWebSchedulerImpl::postNonNestableIdleTask(
+ const blink::WebTraceLocation& web_location,
+ blink::WebThread::IdleTask* task) {
+ DCHECK(idle_task_runner_);
+ scoped_ptr<blink::WebThread::IdleTask> scoped_task(task);
+ tracked_objects::Location location(web_location.functionName(),
+ web_location.fileName(), -1, nullptr);
+ idle_task_runner_->PostNonNestableIdleTask(
+ location, base::Bind(&WorkerWebSchedulerImpl::runIdleTask,
+ base::Passed(&scoped_task)));
+}
+
+void WorkerWebSchedulerImpl::postIdleTaskAfterWakeup(
+ const blink::WebTraceLocation& web_location,
+ blink::WebThread::IdleTask* task) {
+ DCHECK(idle_task_runner_);
+ scoped_ptr<blink::WebThread::IdleTask> scoped_task(task);
+ tracked_objects::Location location(web_location.functionName(),
+ web_location.fileName(), -1, nullptr);
+ idle_task_runner_->PostIdleTaskAfterWakeup(
+ location, base::Bind(&WorkerWebSchedulerImpl::runIdleTask,
+ base::Passed(&scoped_task)));
+}
+
+void WorkerWebSchedulerImpl::postLoadingTask(
+ const blink::WebTraceLocation& web_location,
+ blink::WebThread::Task* task) {
+ DCHECK(task_runner_);
+ scoped_ptr<blink::WebThread::Task> scoped_task(task);
+ tracked_objects::Location location(web_location.functionName(),
+ web_location.fileName(), -1, nullptr);
+ task_runner_->PostTask(location, base::Bind(&WorkerWebSchedulerImpl::runTask,
+ base::Passed(&scoped_task)));
+}
+
+void WorkerWebSchedulerImpl::postTimerTask(
+ const blink::WebTraceLocation& web_location,
+ blink::WebThread::Task* task,
+ long long delayMs) {
+ DCHECK(task_runner_);
+ scoped_ptr<blink::WebThread::Task> scoped_task(task);
+ tracked_objects::Location location(web_location.functionName(),
+ web_location.fileName(), -1, nullptr);
+ task_runner_->PostDelayedTask(
+ location,
+ base::Bind(&WorkerWebSchedulerImpl::runTask, base::Passed(&scoped_task)),
+ base::TimeDelta::FromMilliseconds(delayMs));
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698