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

Unified 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 side-by-side diff with in-line comments
Download patch
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;
« 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