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

Side by Side Diff: components/scheduler/child/webthread_impl_for_worker_scheduler.cc

Issue 987193002: Redirect the MessageLoop's task runner to the renderer scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/child/webthread_impl_for_worker_scheduler.h" 5 #include "components/scheduler/child/webthread_impl_for_worker_scheduler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
11 #include "components/scheduler/child/scheduler_message_loop_delegate.h" 11 #include "components/scheduler/child/scheduler_task_runner_delegate_impl.h"
12 #include "components/scheduler/child/web_scheduler_impl.h" 12 #include "components/scheduler/child/web_scheduler_impl.h"
13 #include "components/scheduler/child/worker_scheduler_impl.h" 13 #include "components/scheduler/child/worker_scheduler_impl.h"
14 #include "third_party/WebKit/public/platform/WebTraceLocation.h" 14 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
15 15
16 namespace scheduler { 16 namespace scheduler {
17 17
18 WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler( 18 WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler(
19 const char* name) 19 const char* name)
20 : thread_(new base::Thread(name)) { 20 : thread_(new base::Thread(name)) {
21 thread_->Start(); 21 thread_->Start();
22 thread_task_runner_ = thread_->task_runner();
22 23
23 base::WaitableEvent completion(false, false); 24 base::WaitableEvent completion(false, false);
24 thread_->task_runner()->PostTask( 25 thread_task_runner_->PostTask(
25 FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::InitOnThread, 26 FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::InitOnThread,
26 base::Unretained(this), &completion)); 27 base::Unretained(this), &completion));
27 completion.Wait(); 28 completion.Wait();
28 } 29 }
29 30
30 WebThreadImplForWorkerScheduler::~WebThreadImplForWorkerScheduler() { 31 WebThreadImplForWorkerScheduler::~WebThreadImplForWorkerScheduler() {
32 base::WaitableEvent completion(false, false);
33 // Restore the original task runner so that the thread can tear itself down.
34 thread_task_runner_->PostTask(
35 FROM_HERE,
36 base::Bind(&WebThreadImplForWorkerScheduler::RestoreTaskRunnerOnThread,
37 base::Unretained(this), &completion));
38 completion.Wait();
31 thread_->Stop(); 39 thread_->Stop();
32 } 40 }
33 41
34 void WebThreadImplForWorkerScheduler::InitOnThread( 42 void WebThreadImplForWorkerScheduler::InitOnThread(
35 base::WaitableEvent* completion) { 43 base::WaitableEvent* completion) {
36 worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop()); 44 task_runner_delegate_ =
45 SchedulerTaskRunnerDelegateImpl::Create(thread_->message_loop());
46 worker_scheduler_ = WorkerScheduler::Create(task_runner_delegate_);
37 worker_scheduler_->Init(); 47 worker_scheduler_->Init();
38 task_runner_ = worker_scheduler_->DefaultTaskRunner(); 48 task_runner_ = worker_scheduler_->DefaultTaskRunner();
39 idle_task_runner_ = worker_scheduler_->IdleTaskRunner(); 49 idle_task_runner_ = worker_scheduler_->IdleTaskRunner();
40 web_scheduler_.reset(new WebSchedulerImpl( 50 web_scheduler_.reset(new WebSchedulerImpl(
41 worker_scheduler_.get(), worker_scheduler_->IdleTaskRunner(), 51 worker_scheduler_.get(), worker_scheduler_->IdleTaskRunner(),
42 worker_scheduler_->DefaultTaskRunner(), 52 worker_scheduler_->DefaultTaskRunner(),
43 worker_scheduler_->DefaultTaskRunner())); 53 worker_scheduler_->DefaultTaskRunner()));
44 base::MessageLoop::current()->AddDestructionObserver(this); 54 base::MessageLoop::current()->AddDestructionObserver(this);
45 completion->Signal(); 55 completion->Signal();
46 } 56 }
47 57
58 void WebThreadImplForWorkerScheduler::RestoreTaskRunnerOnThread(
59 base::WaitableEvent* completion) {
60 task_runner_delegate_->RestoreDefaultTaskRunner();
61 completion->Signal();
62 }
63
48 void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() { 64 void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() {
49 task_runner_ = nullptr; 65 task_runner_ = nullptr;
50 idle_task_runner_ = nullptr; 66 idle_task_runner_ = nullptr;
51 web_scheduler_.reset(); 67 web_scheduler_.reset();
52 worker_scheduler_.reset(); 68 worker_scheduler_.reset();
53 } 69 }
54 70
55 blink::PlatformThreadId WebThreadImplForWorkerScheduler::threadId() const { 71 blink::PlatformThreadId WebThreadImplForWorkerScheduler::threadId() const {
56 return thread_->thread_id(); 72 return thread_->thread_id();
57 } 73 }
(...skipping 16 matching lines...) Expand all
74 base::MessageLoop::TaskObserver* observer) { 90 base::MessageLoop::TaskObserver* observer) {
75 worker_scheduler_->AddTaskObserver(observer); 91 worker_scheduler_->AddTaskObserver(observer);
76 } 92 }
77 93
78 void WebThreadImplForWorkerScheduler::RemoveTaskObserverInternal( 94 void WebThreadImplForWorkerScheduler::RemoveTaskObserverInternal(
79 base::MessageLoop::TaskObserver* observer) { 95 base::MessageLoop::TaskObserver* observer) {
80 worker_scheduler_->RemoveTaskObserver(observer); 96 worker_scheduler_->RemoveTaskObserver(observer);
81 } 97 }
82 98
83 } // namespace scheduler 99 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/child/webthread_impl_for_worker_scheduler.h ('k') | components/scheduler/child/worker_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698