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

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

Issue 2118903002: scheduler: Move the Blink scheduler into Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 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
(Empty)
1 // Copyright 2014 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 "components/scheduler/child/single_thread_idle_task_runner.h"
6
7 #include "base/location.h"
8 #include "base/trace_event/blame_context.h"
9 #include "base/trace_event/trace_event.h"
10
11 namespace scheduler {
12
13 SingleThreadIdleTaskRunner::SingleThreadIdleTaskRunner(
14 scoped_refptr<base::SingleThreadTaskRunner> idle_priority_task_runner,
15 scoped_refptr<base::SingleThreadTaskRunner> after_wakeup_task_runner,
16 Delegate* delegate,
17 const char* tracing_category)
18 : idle_priority_task_runner_(idle_priority_task_runner),
19 after_wakeup_task_runner_(after_wakeup_task_runner),
20 delegate_(delegate),
21 tracing_category_(tracing_category),
22 blame_context_(nullptr),
23 weak_factory_(this) {
24 DCHECK(!idle_priority_task_runner_ ||
25 idle_priority_task_runner_->RunsTasksOnCurrentThread());
26 DCHECK(!after_wakeup_task_runner_ ||
27 after_wakeup_task_runner_->RunsTasksOnCurrentThread());
28 weak_scheduler_ptr_ = weak_factory_.GetWeakPtr();
29 }
30
31 SingleThreadIdleTaskRunner::~SingleThreadIdleTaskRunner() {
32 }
33
34 SingleThreadIdleTaskRunner::Delegate::Delegate() {
35 }
36
37 SingleThreadIdleTaskRunner::Delegate::~Delegate() {
38 }
39
40 bool SingleThreadIdleTaskRunner::RunsTasksOnCurrentThread() const {
41 return idle_priority_task_runner_->RunsTasksOnCurrentThread();
42 }
43
44 void SingleThreadIdleTaskRunner::PostIdleTask(
45 const tracked_objects::Location& from_here,
46 const IdleTask& idle_task) {
47 delegate_->OnIdleTaskPosted();
48 idle_priority_task_runner_->PostTask(
49 from_here, base::Bind(&SingleThreadIdleTaskRunner::RunTask,
50 weak_scheduler_ptr_, idle_task));
51 }
52
53 void SingleThreadIdleTaskRunner::PostNonNestableIdleTask(
54 const tracked_objects::Location& from_here,
55 const IdleTask& idle_task) {
56 delegate_->OnIdleTaskPosted();
57 idle_priority_task_runner_->PostNonNestableTask(
58 from_here, base::Bind(&SingleThreadIdleTaskRunner::RunTask,
59 weak_scheduler_ptr_, idle_task));
60 }
61
62 void SingleThreadIdleTaskRunner::PostIdleTaskAfterWakeup(
63 const tracked_objects::Location& from_here,
64 const IdleTask& idle_task) {
65 // Don't signal posting of idle task to the delegate here, wait until the
66 // after-wakeup task posts the real idle task.
67 after_wakeup_task_runner_->PostTask(
68 FROM_HERE, base::Bind(&SingleThreadIdleTaskRunner::PostIdleTask,
69 weak_scheduler_ptr_, from_here, idle_task));
70 }
71
72 void SingleThreadIdleTaskRunner::RunTask(IdleTask idle_task) {
73 base::TimeTicks deadline = delegate_->WillProcessIdleTask();
74 TRACE_EVENT1(tracing_category_, "SingleThreadIdleTaskRunner::RunTask",
75 "allotted_time_ms",
76 (deadline - base::TimeTicks::Now()).InMillisecondsF());
77 if (blame_context_)
78 blame_context_->Enter();
79 idle_task.Run(deadline);
80 if (blame_context_)
81 blame_context_->Leave();
82 delegate_->DidProcessIdleTask();
83 }
84
85 void SingleThreadIdleTaskRunner::SetBlameContext(
86 base::trace_event::BlameContext* blame_context) {
87 blame_context_ = blame_context;
88 }
89
90 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/child/single_thread_idle_task_runner.h ('k') | components/scheduler/child/web_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698