| Index: components/scheduler/child/webthread_impl_for_worker_scheduler.cc
|
| diff --git a/components/scheduler/child/webthread_impl_for_worker_scheduler.cc b/components/scheduler/child/webthread_impl_for_worker_scheduler.cc
|
| index 87ac8208c746bd5b5b01dc10baa27ba93c296749..cf9322dfb882860989488722057e0a34c495f580 100644
|
| --- a/components/scheduler/child/webthread_impl_for_worker_scheduler.cc
|
| +++ b/components/scheduler/child/webthread_impl_for_worker_scheduler.cc
|
| @@ -8,7 +8,7 @@
|
| #include "base/location.h"
|
| #include "base/single_thread_task_runner.h"
|
| #include "base/synchronization/waitable_event.h"
|
| -#include "components/scheduler/child/scheduler_message_loop_delegate.h"
|
| +#include "components/scheduler/child/scheduler_task_runner_delegate_impl.h"
|
| #include "components/scheduler/child/web_scheduler_impl.h"
|
| #include "components/scheduler/child/worker_scheduler_impl.h"
|
| #include "third_party/WebKit/public/platform/WebTraceLocation.h"
|
| @@ -19,21 +19,31 @@ WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler(
|
| const char* name)
|
| : thread_(new base::Thread(name)) {
|
| thread_->Start();
|
| + thread_task_runner_ = thread_->task_runner();
|
|
|
| base::WaitableEvent completion(false, false);
|
| - thread_->task_runner()->PostTask(
|
| + thread_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::InitOnThread,
|
| base::Unretained(this), &completion));
|
| completion.Wait();
|
| }
|
|
|
| WebThreadImplForWorkerScheduler::~WebThreadImplForWorkerScheduler() {
|
| + base::WaitableEvent completion(false, false);
|
| + // Restore the original task runner so that the thread can tear itself down.
|
| + thread_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&WebThreadImplForWorkerScheduler::RestoreTaskRunnerOnThread,
|
| + base::Unretained(this), &completion));
|
| + completion.Wait();
|
| thread_->Stop();
|
| }
|
|
|
| void WebThreadImplForWorkerScheduler::InitOnThread(
|
| base::WaitableEvent* completion) {
|
| - worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop());
|
| + task_runner_delegate_ =
|
| + SchedulerTaskRunnerDelegateImpl::Create(thread_->message_loop());
|
| + worker_scheduler_ = WorkerScheduler::Create(task_runner_delegate_);
|
| worker_scheduler_->Init();
|
| task_runner_ = worker_scheduler_->DefaultTaskRunner();
|
| idle_task_runner_ = worker_scheduler_->IdleTaskRunner();
|
| @@ -45,6 +55,12 @@ void WebThreadImplForWorkerScheduler::InitOnThread(
|
| completion->Signal();
|
| }
|
|
|
| +void WebThreadImplForWorkerScheduler::RestoreTaskRunnerOnThread(
|
| + base::WaitableEvent* completion) {
|
| + task_runner_delegate_->RestoreDefaultTaskRunner();
|
| + completion->Signal();
|
| +}
|
| +
|
| void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() {
|
| task_runner_ = nullptr;
|
| idle_task_runner_ = nullptr;
|
|
|