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 "content/renderer/scheduler/task_queue_manager.h" | 5 #include "content/renderer/scheduler/task_queue_manager.h" |
6 | 6 |
7 #include <queue> | 7 #include <queue> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 | 49 |
50 bool UpdateWorkQueue(base::TimeTicks* next_pending_delayed_task); | 50 bool UpdateWorkQueue(base::TimeTicks* next_pending_delayed_task); |
51 base::PendingTask TakeTaskFromWorkQueue(); | 51 base::PendingTask TakeTaskFromWorkQueue(); |
52 | 52 |
53 void WillDeleteTaskQueueManager(); | 53 void WillDeleteTaskQueueManager(); |
54 | 54 |
55 base::TaskQueue& work_queue() { return work_queue_; } | 55 base::TaskQueue& work_queue() { return work_queue_; } |
56 | 56 |
57 void set_name(const char* name) { name_ = name; } | 57 void set_name(const char* name) { name_ = name; } |
58 | 58 |
59 void AsValueInto(base::debug::TracedValue* state) const; | 59 void AsValueInto(base::trace_event::TracedValue* state) const; |
60 | 60 |
61 private: | 61 private: |
62 ~TaskQueue() override; | 62 ~TaskQueue() override; |
63 | 63 |
64 bool PostDelayedTaskImpl(const tracked_objects::Location& from_here, | 64 bool PostDelayedTaskImpl(const tracked_objects::Location& from_here, |
65 const base::Closure& task, | 65 const base::Closure& task, |
66 base::TimeDelta delay, | 66 base::TimeDelta delay, |
67 bool nestable); | 67 bool nestable); |
68 | 68 |
69 void PumpQueueLocked(); | 69 void PumpQueueLocked(); |
70 void EnqueueTaskLocked(const base::PendingTask& pending_task); | 70 void EnqueueTaskLocked(const base::PendingTask& pending_task); |
71 | 71 |
72 void TraceWorkQueueSize() const; | 72 void TraceWorkQueueSize() const; |
73 static void QueueAsValueInto(const base::TaskQueue& queue, | 73 static void QueueAsValueInto(const base::TaskQueue& queue, |
74 base::debug::TracedValue* state); | 74 base::trace_event::TracedValue* state); |
75 static void TaskAsValueInto(const base::PendingTask& task, | 75 static void TaskAsValueInto(const base::PendingTask& task, |
76 base::debug::TracedValue* state); | 76 base::trace_event::TracedValue* state); |
77 | 77 |
78 // This lock protects all members except the work queue. | 78 // This lock protects all members except the work queue. |
79 mutable base::Lock lock_; | 79 mutable base::Lock lock_; |
80 TaskQueueManager* task_queue_manager_; | 80 TaskQueueManager* task_queue_manager_; |
81 base::TaskQueue incoming_queue_; | 81 base::TaskQueue incoming_queue_; |
82 bool auto_pump_; | 82 bool auto_pump_; |
83 const char* name_; | 83 const char* name_; |
84 std::priority_queue<base::TimeTicks, | 84 std::priority_queue<base::TimeTicks, |
85 std::vector<base::TimeTicks>, | 85 std::vector<base::TimeTicks>, |
86 std::greater<base::TimeTicks>> delayed_task_run_times_; | 86 std::greater<base::TimeTicks>> delayed_task_run_times_; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 } | 217 } |
218 if (!work_queue_.empty()) | 218 if (!work_queue_.empty()) |
219 task_queue_manager_->MaybePostDoWorkOnMainRunner(); | 219 task_queue_manager_->MaybePostDoWorkOnMainRunner(); |
220 } | 220 } |
221 | 221 |
222 void TaskQueue::PumpQueue() { | 222 void TaskQueue::PumpQueue() { |
223 base::AutoLock lock(lock_); | 223 base::AutoLock lock(lock_); |
224 PumpQueueLocked(); | 224 PumpQueueLocked(); |
225 } | 225 } |
226 | 226 |
227 void TaskQueue::AsValueInto(base::debug::TracedValue* state) const { | 227 void TaskQueue::AsValueInto(base::trace_event::TracedValue* state) const { |
228 base::AutoLock lock(lock_); | 228 base::AutoLock lock(lock_); |
229 state->BeginDictionary(); | 229 state->BeginDictionary(); |
230 if (name_) | 230 if (name_) |
231 state->SetString("name", name_); | 231 state->SetString("name", name_); |
232 state->SetBoolean("auto_pump", auto_pump_); | 232 state->SetBoolean("auto_pump", auto_pump_); |
233 state->BeginArray("incoming_queue"); | 233 state->BeginArray("incoming_queue"); |
234 QueueAsValueInto(incoming_queue_, state); | 234 QueueAsValueInto(incoming_queue_, state); |
235 state->EndArray(); | 235 state->EndArray(); |
236 state->BeginArray("work_queue"); | 236 state->BeginArray("work_queue"); |
237 QueueAsValueInto(work_queue_, state); | 237 QueueAsValueInto(work_queue_, state); |
238 state->EndArray(); | 238 state->EndArray(); |
239 state->EndDictionary(); | 239 state->EndDictionary(); |
240 } | 240 } |
241 | 241 |
242 // static | 242 // static |
243 void TaskQueue::QueueAsValueInto(const base::TaskQueue& queue, | 243 void TaskQueue::QueueAsValueInto(const base::TaskQueue& queue, |
244 base::debug::TracedValue* state) { | 244 base::trace_event::TracedValue* state) { |
245 base::TaskQueue queue_copy(queue); | 245 base::TaskQueue queue_copy(queue); |
246 while (!queue_copy.empty()) { | 246 while (!queue_copy.empty()) { |
247 TaskAsValueInto(queue_copy.front(), state); | 247 TaskAsValueInto(queue_copy.front(), state); |
248 queue_copy.pop(); | 248 queue_copy.pop(); |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 // static | 252 // static |
253 void TaskQueue::TaskAsValueInto(const base::PendingTask& task, | 253 void TaskQueue::TaskAsValueInto(const base::PendingTask& task, |
254 base::debug::TracedValue* state) { | 254 base::trace_event::TracedValue* state) { |
255 state->BeginDictionary(); | 255 state->BeginDictionary(); |
256 state->SetString("posted_from", task.posted_from.ToString()); | 256 state->SetString("posted_from", task.posted_from.ToString()); |
257 state->SetInteger("sequence_num", task.sequence_num); | 257 state->SetInteger("sequence_num", task.sequence_num); |
258 state->SetBoolean("nestable", task.nestable); | 258 state->SetBoolean("nestable", task.nestable); |
259 state->SetBoolean("is_high_res", task.is_high_res); | 259 state->SetBoolean("is_high_res", task.is_high_res); |
260 state->SetDouble( | 260 state->SetDouble( |
261 "delayed_run_time", | 261 "delayed_run_time", |
262 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L); | 262 (task.delayed_run_time - base::TimeTicks()).InMicroseconds() / 1000.0L); |
263 state->EndDictionary(); | 263 state->EndDictionary(); |
264 } | 264 } |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 void TaskQueueManager::SetTimeSourceForTesting( | 445 void TaskQueueManager::SetTimeSourceForTesting( |
446 scoped_refptr<cc::TestNowSource> time_source) { | 446 scoped_refptr<cc::TestNowSource> time_source) { |
447 DCHECK(main_thread_checker_.CalledOnValidThread()); | 447 DCHECK(main_thread_checker_.CalledOnValidThread()); |
448 time_source_ = time_source; | 448 time_source_ = time_source; |
449 } | 449 } |
450 | 450 |
451 base::TimeTicks TaskQueueManager::Now() const { | 451 base::TimeTicks TaskQueueManager::Now() const { |
452 return UNLIKELY(time_source_) ? time_source_->Now() : base::TimeTicks::Now(); | 452 return UNLIKELY(time_source_) ? time_source_->Now() : base::TimeTicks::Now(); |
453 } | 453 } |
454 | 454 |
455 scoped_refptr<base::debug::ConvertableToTraceFormat> | 455 scoped_refptr<base::trace_event::ConvertableToTraceFormat> |
456 TaskQueueManager::AsValueWithSelectorResult(bool should_run, | 456 TaskQueueManager::AsValueWithSelectorResult(bool should_run, |
457 size_t selected_queue) const { | 457 size_t selected_queue) const { |
458 DCHECK(main_thread_checker_.CalledOnValidThread()); | 458 DCHECK(main_thread_checker_.CalledOnValidThread()); |
459 scoped_refptr<base::debug::TracedValue> state = | 459 scoped_refptr<base::trace_event::TracedValue> state = |
460 new base::debug::TracedValue(); | 460 new base::trace_event::TracedValue(); |
461 state->BeginArray("queues"); | 461 state->BeginArray("queues"); |
462 for (auto& queue : queues_) | 462 for (auto& queue : queues_) |
463 queue->AsValueInto(state.get()); | 463 queue->AsValueInto(state.get()); |
464 state->EndArray(); | 464 state->EndArray(); |
465 state->BeginDictionary("selector"); | 465 state->BeginDictionary("selector"); |
466 selector_->AsValueInto(state.get()); | 466 selector_->AsValueInto(state.get()); |
467 state->EndDictionary(); | 467 state->EndDictionary(); |
468 if (should_run) | 468 if (should_run) |
469 state->SetInteger("selected_queue", selected_queue); | 469 state->SetInteger("selected_queue", selected_queue); |
470 return state; | 470 return state; |
471 } | 471 } |
472 | 472 |
473 } // namespace content | 473 } // namespace content |
OLD | NEW |