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

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

Issue 1238483003: Revert of Redirect the MessageLoop's task runner to the renderer scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/web_scheduler_impl.h" 12 #include "components/scheduler/child/web_scheduler_impl.h"
12 #include "components/scheduler/child/worker_scheduler_impl.h" 13 #include "components/scheduler/child/worker_scheduler_impl.h"
13 #include "third_party/WebKit/public/platform/WebTraceLocation.h" 14 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
14 15
15 namespace scheduler { 16 namespace scheduler {
16 17
17 WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler( 18 WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler(
18 const char* name) 19 const char* name)
19 : thread_(new base::Thread(name)) { 20 : thread_(new base::Thread(name)) {
20 thread_->Start(); 21 thread_->Start();
21 thread_task_runner_ = thread_->task_runner();
22 22
23 base::WaitableEvent completion(false, false); 23 base::WaitableEvent completion(false, false);
24 thread_task_runner_->PostTask( 24 thread_->task_runner()->PostTask(
25 FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::InitOnThread, 25 FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::InitOnThread,
26 base::Unretained(this), &completion)); 26 base::Unretained(this), &completion));
27 completion.Wait(); 27 completion.Wait();
28 } 28 }
29 29
30 WebThreadImplForWorkerScheduler::~WebThreadImplForWorkerScheduler() { 30 WebThreadImplForWorkerScheduler::~WebThreadImplForWorkerScheduler() {
31 base::WaitableEvent completion(false, false);
32 // Shut down the scheduler on the thread to restore the original task runner
33 // so that the thread can tear itself down.
34 thread_task_runner_->PostTask(
35 FROM_HERE, base::Bind(&WebThreadImplForWorkerScheduler::ShutdownOnThread,
36 base::Unretained(this), &completion));
37 completion.Wait();
38 thread_->Stop(); 31 thread_->Stop();
39 } 32 }
40 33
41 void WebThreadImplForWorkerScheduler::InitOnThread( 34 void WebThreadImplForWorkerScheduler::InitOnThread(
42 base::WaitableEvent* completion) { 35 base::WaitableEvent* completion) {
43 worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop()); 36 worker_scheduler_ = WorkerScheduler::Create(thread_->message_loop());
44 worker_scheduler_->Init(); 37 worker_scheduler_->Init();
45 task_runner_ = worker_scheduler_->DefaultTaskRunner(); 38 task_runner_ = worker_scheduler_->DefaultTaskRunner();
46 idle_task_runner_ = worker_scheduler_->IdleTaskRunner(); 39 idle_task_runner_ = worker_scheduler_->IdleTaskRunner();
47 web_scheduler_.reset(new WebSchedulerImpl( 40 web_scheduler_.reset(new WebSchedulerImpl(
48 worker_scheduler_.get(), worker_scheduler_->IdleTaskRunner(), 41 worker_scheduler_.get(), worker_scheduler_->IdleTaskRunner(),
49 worker_scheduler_->DefaultTaskRunner(), 42 worker_scheduler_->DefaultTaskRunner(),
50 worker_scheduler_->DefaultTaskRunner())); 43 worker_scheduler_->DefaultTaskRunner()));
51 base::MessageLoop::current()->AddDestructionObserver(this); 44 base::MessageLoop::current()->AddDestructionObserver(this);
52 completion->Signal(); 45 completion->Signal();
53 } 46 }
54 47
55 void WebThreadImplForWorkerScheduler::ShutdownOnThread(
56 base::WaitableEvent* completion) {
57 worker_scheduler_->Shutdown();
58 completion->Signal();
59 }
60
61 void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() { 48 void WebThreadImplForWorkerScheduler::WillDestroyCurrentMessageLoop() {
62 task_runner_ = nullptr; 49 task_runner_ = nullptr;
63 idle_task_runner_ = nullptr; 50 idle_task_runner_ = nullptr;
64 web_scheduler_.reset(); 51 web_scheduler_.reset();
65 worker_scheduler_.reset(); 52 worker_scheduler_.reset();
66 } 53 }
67 54
68 blink::PlatformThreadId WebThreadImplForWorkerScheduler::threadId() const { 55 blink::PlatformThreadId WebThreadImplForWorkerScheduler::threadId() const {
69 return thread_->thread_id(); 56 return thread_->thread_id();
70 } 57 }
(...skipping 16 matching lines...) Expand all
87 base::MessageLoop::TaskObserver* observer) { 74 base::MessageLoop::TaskObserver* observer) {
88 worker_scheduler_->AddTaskObserver(observer); 75 worker_scheduler_->AddTaskObserver(observer);
89 } 76 }
90 77
91 void WebThreadImplForWorkerScheduler::RemoveTaskObserverInternal( 78 void WebThreadImplForWorkerScheduler::RemoveTaskObserverInternal(
92 base::MessageLoop::TaskObserver* observer) { 79 base::MessageLoop::TaskObserver* observer) {
93 worker_scheduler_->RemoveTaskObserver(observer); 80 worker_scheduler_->RemoveTaskObserver(observer);
94 } 81 }
95 82
96 } // namespace scheduler 83 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/child/webthread_impl_for_worker_scheduler.h ('k') | components/scheduler/child/worker_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698