| 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 "platform/scheduler/base/task_queue_manager.h" | 5 #include "platform/scheduler/base/task_queue_manager.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 namespace scheduler { | 22 namespace scheduler { |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 const size_t kRecordRecordTaskDelayHistogramsEveryNTasks = 10; | 25 const size_t kRecordRecordTaskDelayHistogramsEveryNTasks = 10; |
| 26 | 26 |
| 27 void RecordDelayedTaskLateness(base::TimeDelta lateness) { | 27 void RecordDelayedTaskLateness(base::TimeDelta lateness) { |
| 28 UMA_HISTOGRAM_TIMES("RendererScheduler.TaskQueueManager.DelayedTaskLateness", | 28 UMA_HISTOGRAM_TIMES("RendererScheduler.TaskQueueManager.DelayedTaskLateness", |
| 29 lateness); | 29 lateness); |
| 30 } | 30 } |
| 31 | 31 |
| 32 void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) { | 32 void RecordImmediateTaskQueueingDuration(base::TimeDelta duration) { |
| 33 UMA_HISTOGRAM_TIMES( | 33 UMA_HISTOGRAM_TIMES( |
| 34 "RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration", | 34 "RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration", |
| 35 base::TimeDelta::FromMilliseconds(duration.InMilliseconds())); | 35 duration); |
| 36 } | 36 } |
| 37 | 37 |
| 38 double MonotonicTimeInSeconds(base::TimeTicks time_ticks) { | 38 double MonotonicTimeInSeconds(base::TimeTicks time_ticks) { |
| 39 return (time_ticks - base::TimeTicks()).InSecondsF(); | 39 return (time_ticks - base::TimeTicks()).InSecondsF(); |
| 40 } | 40 } |
| 41 | 41 |
| 42 // Converts a OnceClosure to a RepeatingClosure. It hits CHECK failure to run | 42 // Converts a OnceClosure to a RepeatingClosure. It hits CHECK failure to run |
| 43 // the resulting RepeatingClosure more than once. | 43 // the resulting RepeatingClosure more than once. |
| 44 // TODO(tzik): This will be unneeded after the Closure-to-OnceClosure migration | 44 // TODO(tzik): This will be unneeded after the Closure-to-OnceClosure migration |
| 45 // on TaskRunner finished. Remove it once it gets unneeded. | 45 // on TaskRunner finished. Remove it once it gets unneeded. |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 const internal::TaskQueueImpl::Task& pending_task, | 557 const internal::TaskQueueImpl::Task& pending_task, |
| 558 const internal::TaskQueueImpl* queue) { | 558 const internal::TaskQueueImpl* queue) { |
| 559 if ((task_count_++ % kRecordRecordTaskDelayHistogramsEveryNTasks) != 0) | 559 if ((task_count_++ % kRecordRecordTaskDelayHistogramsEveryNTasks) != 0) |
| 560 return; | 560 return; |
| 561 | 561 |
| 562 // Record delayed task lateness and immediate task queuing durations. | 562 // Record delayed task lateness and immediate task queuing durations. |
| 563 if (!pending_task.delayed_run_time.is_null()) { | 563 if (!pending_task.delayed_run_time.is_null()) { |
| 564 RecordDelayedTaskLateness(delegate_->NowTicks() - | 564 RecordDelayedTaskLateness(delegate_->NowTicks() - |
| 565 pending_task.delayed_run_time); | 565 pending_task.delayed_run_time); |
| 566 } else if (!pending_task.time_posted.is_null()) { | 566 } else if (!pending_task.time_posted.is_null()) { |
| 567 RecordImmediateTaskQueueingDuration(tracked_objects::TrackedTime::Now() - | 567 RecordImmediateTaskQueueingDuration(base::TimeTicks::Now() - |
| 568 pending_task.time_posted); | 568 pending_task.time_posted); |
| 569 } | 569 } |
| 570 } | 570 } |
| 571 | 571 |
| 572 bool TaskQueueManager::RunsTasksInCurrentSequence() const { | 572 bool TaskQueueManager::RunsTasksInCurrentSequence() const { |
| 573 return delegate_->RunsTasksInCurrentSequence(); | 573 return delegate_->RunsTasksInCurrentSequence(); |
| 574 } | 574 } |
| 575 | 575 |
| 576 void TaskQueueManager::SetWorkBatchSize(int work_batch_size) { | 576 void TaskQueueManager::SetWorkBatchSize(int work_batch_size) { |
| 577 DCHECK(main_thread_checker_.CalledOnValidThread()); | 577 DCHECK(main_thread_checker_.CalledOnValidThread()); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 for (const scoped_refptr<internal::TaskQueueImpl>& queue : queues_) { | 704 for (const scoped_refptr<internal::TaskQueueImpl>& queue : queues_) { |
| 705 TimeDomain* time_domain = queue->GetTimeDomain(); | 705 TimeDomain* time_domain = queue->GetTimeDomain(); |
| 706 if (time_domain_now.find(time_domain) == time_domain_now.end()) | 706 if (time_domain_now.find(time_domain) == time_domain_now.end()) |
| 707 time_domain_now.insert(std::make_pair(time_domain, time_domain->Now())); | 707 time_domain_now.insert(std::make_pair(time_domain, time_domain->Now())); |
| 708 queue->SweepCanceledDelayedTasks(time_domain_now[time_domain]); | 708 queue->SweepCanceledDelayedTasks(time_domain_now[time_domain]); |
| 709 } | 709 } |
| 710 } | 710 } |
| 711 | 711 |
| 712 } // namespace scheduler | 712 } // namespace scheduler |
| 713 } // namespace blink | 713 } // namespace blink |
| OLD | NEW |