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 |