OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/single_thread_idle_task_runner.h" | 5 #include "components/scheduler/child/single_thread_idle_task_runner.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/trace_event/blame_context.h" |
8 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
9 | 10 |
10 namespace scheduler { | 11 namespace scheduler { |
11 | 12 |
12 SingleThreadIdleTaskRunner::SingleThreadIdleTaskRunner( | 13 SingleThreadIdleTaskRunner::SingleThreadIdleTaskRunner( |
13 scoped_refptr<base::SingleThreadTaskRunner> idle_priority_task_runner, | 14 scoped_refptr<base::SingleThreadTaskRunner> idle_priority_task_runner, |
14 scoped_refptr<base::SingleThreadTaskRunner> after_wakeup_task_runner, | 15 scoped_refptr<base::SingleThreadTaskRunner> after_wakeup_task_runner, |
15 Delegate* delegate, | 16 Delegate* delegate, |
16 const char* tracing_category) | 17 const char* tracing_category) |
17 : idle_priority_task_runner_(idle_priority_task_runner), | 18 : idle_priority_task_runner_(idle_priority_task_runner), |
18 after_wakeup_task_runner_(after_wakeup_task_runner), | 19 after_wakeup_task_runner_(after_wakeup_task_runner), |
19 delegate_(delegate), | 20 delegate_(delegate), |
20 tracing_category_(tracing_category), | 21 tracing_category_(tracing_category), |
| 22 blame_context_(nullptr), |
21 weak_factory_(this) { | 23 weak_factory_(this) { |
22 DCHECK(!idle_priority_task_runner_ || | 24 DCHECK(!idle_priority_task_runner_ || |
23 idle_priority_task_runner_->RunsTasksOnCurrentThread()); | 25 idle_priority_task_runner_->RunsTasksOnCurrentThread()); |
24 DCHECK(!after_wakeup_task_runner_ || | 26 DCHECK(!after_wakeup_task_runner_ || |
25 after_wakeup_task_runner_->RunsTasksOnCurrentThread()); | 27 after_wakeup_task_runner_->RunsTasksOnCurrentThread()); |
26 weak_scheduler_ptr_ = weak_factory_.GetWeakPtr(); | 28 weak_scheduler_ptr_ = weak_factory_.GetWeakPtr(); |
27 } | 29 } |
28 | 30 |
29 SingleThreadIdleTaskRunner::~SingleThreadIdleTaskRunner() { | 31 SingleThreadIdleTaskRunner::~SingleThreadIdleTaskRunner() { |
30 } | 32 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 after_wakeup_task_runner_->PostTask( | 67 after_wakeup_task_runner_->PostTask( |
66 FROM_HERE, base::Bind(&SingleThreadIdleTaskRunner::PostIdleTask, | 68 FROM_HERE, base::Bind(&SingleThreadIdleTaskRunner::PostIdleTask, |
67 weak_scheduler_ptr_, from_here, idle_task)); | 69 weak_scheduler_ptr_, from_here, idle_task)); |
68 } | 70 } |
69 | 71 |
70 void SingleThreadIdleTaskRunner::RunTask(IdleTask idle_task) { | 72 void SingleThreadIdleTaskRunner::RunTask(IdleTask idle_task) { |
71 base::TimeTicks deadline = delegate_->WillProcessIdleTask(); | 73 base::TimeTicks deadline = delegate_->WillProcessIdleTask(); |
72 TRACE_EVENT1(tracing_category_, "SingleThreadIdleTaskRunner::RunTask", | 74 TRACE_EVENT1(tracing_category_, "SingleThreadIdleTaskRunner::RunTask", |
73 "allotted_time_ms", | 75 "allotted_time_ms", |
74 (deadline - base::TimeTicks::Now()).InMillisecondsF()); | 76 (deadline - base::TimeTicks::Now()).InMillisecondsF()); |
| 77 if (blame_context_) |
| 78 blame_context_->Enter(); |
75 idle_task.Run(deadline); | 79 idle_task.Run(deadline); |
| 80 if (blame_context_) |
| 81 blame_context_->Leave(); |
76 delegate_->DidProcessIdleTask(); | 82 delegate_->DidProcessIdleTask(); |
77 } | 83 } |
78 | 84 |
| 85 void SingleThreadIdleTaskRunner::SetBlameContext( |
| 86 base::trace_event::BlameContext* blame_context) { |
| 87 blame_context_ = blame_context; |
| 88 } |
| 89 |
79 } // namespace scheduler | 90 } // namespace scheduler |
OLD | NEW |