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

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

Issue 1033643004: Add a WorkerScheduler and a WebThreadImplForWorker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: InitOnThread needed to call Init() Created 5 years, 9 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/webthread_impl_for_worker.cc
diff --git a/content/child/scheduler/webthread_impl_for_worker.cc b/content/child/scheduler/webthread_impl_for_worker.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7e206745ab9c56f72865c098a56e3971fcf55646
--- /dev/null
+++ b/content/child/scheduler/webthread_impl_for_worker.cc
@@ -0,0 +1,78 @@
+// 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/webthread_impl_for_worker.h"
+
+#include "base/bind.h"
+#include "cc/base/completion_event.h"
+#include "content/child/scheduler/scheduler_message_loop_delegate.h"
+#include "content/child/scheduler/worker_scheduler_impl.h"
+#include "third_party/WebKit/public/platform/WebTraceLocation.h"
+
+namespace content {
+
+WebThreadImplForWorker::WebThreadImplForWorker(const char* name)
+ : thread_(new base::Thread(name)) {
+ thread_->Start();
+
+ cc::CompletionEvent completion;
kinuko 2015/04/02 13:03:08 Drive-by question: I'm a bit surprised to see cc c
alex clarke (OOO till 29th) 2015/04/02 15:19:28 No particular reason. Changed.
+ thread_->message_loop()->PostTask(
+ FROM_HERE, base::Bind(&WebThreadImplForWorker::InitOnThread,
+ base::Unretained(this), &completion));
+ completion.Wait();
+}
+
+WebThreadImplForWorker::~WebThreadImplForWorker() {
+ cc::CompletionEvent completion;
+ thread_->message_loop()->PostTask(
+ FROM_HERE, base::Bind(&WebThreadImplForWorker::ShutDownOnThread,
+ base::Unretained(this), &completion));
+ completion.Wait();
+
+ thread_->Stop();
+}
+
+void WebThreadImplForWorker::InitOnThread(cc::CompletionEvent* completion) {
+ worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop());
+ worker_scheduler_->Init();
+ task_runner_ = worker_scheduler_->DefaultTaskRunner();
+ idle_task_runner_ = worker_scheduler_->IdleTaskRunner();
+ completion->Signal();
+}
+
+void WebThreadImplForWorker::ShutDownOnThread(cc::CompletionEvent* completion) {
+ task_runner_ = NULL;
Sami 2015/04/02 10:19:46 nullptr (here and below)
alex clarke (OOO till 29th) 2015/04/02 15:19:28 Done.
+ idle_task_runner_ = NULL;
+ worker_scheduler_.reset(nullptr);
+ completion->Signal();
+}
+
+blink::PlatformThreadId WebThreadImplForWorker::threadId() const {
+ return thread_->thread_id();
+}
+
+base::MessageLoop* WebThreadImplForWorker::MessageLoop() const {
+ // As per WebThreadImpl::MessageLoop()
+ return nullptr;
+}
+
+base::SingleThreadTaskRunner* WebThreadImplForWorker::TaskRunner() const {
+ return task_runner_.get();
+}
+
+SingleThreadIdleTaskRunner* WebThreadImplForWorker::IdleTaskRunner() const {
+ return idle_task_runner_.get();
+}
+
+void WebThreadImplForWorker::AddTaskObserverInternal(
+ base::MessageLoop::TaskObserver* observer) {
+ worker_scheduler_->AddTaskObserver(observer);
+}
+
+void WebThreadImplForWorker::RemoveTaskObserverInternal(
+ base::MessageLoop::TaskObserver* observer) {
+ worker_scheduler_->RemoveTaskObserver(observer);
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698