Chromium Code Reviews| 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 |