OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "content/child/scheduler/webthread_impl_for_worker.h" |
| 6 |
| 7 #include "base/bind.h" |
| 8 #include "cc/base/completion_event.h" |
| 9 #include "content/child/scheduler/scheduler_message_loop_delegate.h" |
| 10 #include "content/child/scheduler/worker_scheduler_impl.h" |
| 11 #include "third_party/WebKit/public/platform/WebTraceLocation.h" |
| 12 |
| 13 namespace content { |
| 14 |
| 15 WebThreadImplForWorker::WebThreadImplForWorker(const char* name) |
| 16 : thread_(new base::Thread(name)) { |
| 17 thread_->Start(); |
| 18 |
| 19 cc::CompletionEvent completion; |
| 20 thread_->message_loop()->PostTask( |
| 21 FROM_HERE, base::Bind(&WebThreadImplForWorker::InitOnThread, |
| 22 base::Unretained(this), &completion)); |
| 23 completion.Wait(); |
| 24 } |
| 25 |
| 26 WebThreadImplForWorker::~WebThreadImplForWorker() { |
| 27 cc::CompletionEvent completion; |
| 28 thread_->message_loop()->PostTask( |
| 29 FROM_HERE, base::Bind(&WebThreadImplForWorker::ShutDownOnThread, |
| 30 base::Unretained(this), &completion)); |
| 31 completion.Wait(); |
| 32 |
| 33 thread_->Stop(); |
| 34 } |
| 35 |
| 36 void WebThreadImplForWorker::InitOnThread(cc::CompletionEvent* completion) { |
| 37 worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop()); |
| 38 task_runner_ = worker_scheduler_->DefaultTaskRunner(); |
| 39 idle_task_runner_ = worker_scheduler_->IdleTaskRunner(); |
| 40 completion->Signal(); |
| 41 } |
| 42 |
| 43 void WebThreadImplForWorker::ShutDownOnThread(cc::CompletionEvent* completion) { |
| 44 task_runner_ = NULL; |
| 45 idle_task_runner_ = NULL; |
| 46 worker_scheduler_.reset(nullptr); |
| 47 completion->Signal(); |
| 48 } |
| 49 |
| 50 blink::PlatformThreadId WebThreadImplForWorker::threadId() const { |
| 51 return thread_->thread_id(); |
| 52 } |
| 53 |
| 54 base::MessageLoop* WebThreadImplForWorker::MessageLoop() const { |
| 55 // As per WebThreadImpl::MessageLoop() |
| 56 return nullptr; |
| 57 } |
| 58 |
| 59 base::SingleThreadTaskRunner* WebThreadImplForWorker::TaskRunner() const { |
| 60 return task_runner_.get(); |
| 61 } |
| 62 |
| 63 SingleThreadIdleTaskRunner* WebThreadImplForWorker::IdleTaskRunner() const { |
| 64 return idle_task_runner_.get(); |
| 65 } |
| 66 |
| 67 void WebThreadImplForWorker::AddTaskObserverInternal( |
| 68 base::MessageLoop::TaskObserver* observer) { |
| 69 worker_scheduler_->AddTaskObserver(observer); |
| 70 } |
| 71 |
| 72 void WebThreadImplForWorker::RemoveTaskObserverInternal( |
| 73 base::MessageLoop::TaskObserver* observer) { |
| 74 worker_scheduler_->RemoveTaskObserver(observer); |
| 75 } |
| 76 |
| 77 } // namespace content |
OLD | NEW |