12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/scheduling_metrics/thread_metrics.h"
- namespace scheduling_metrics {
- namespace {
- // Threshold for discarding ultra-long tasks. It is assumed that ultra-long
- // tasks are reporting glitches (e.g. system falling asleep on the middle of the
- // task).
- constexpr base::TimeDelta kLongTaskDiscardingThreshold = base::Seconds(30);
- } // namespace
- ThreadMetrics::ThreadMetrics(ThreadType thread_type,
- bool has_cpu_timing_for_each_task)
- : thread_type_(thread_type),
- has_cpu_timing_for_each_task_(has_cpu_timing_for_each_task),
- last_known_time_(has_cpu_timing_for_each_task_ ? base::ThreadTicks::Now()
- : base::ThreadTicks()),
- thread_task_duration_reporter_(
- "Scheduler.Experimental.WallTimePerThread"),
- thread_task_cpu_duration_reporter_(
- "Scheduler.Experimental.CPUTimePerThread"),
- tracked_cpu_duration_reporter_(
- "Scheduler.Experimental.CPUTimePerThread.Tracked"),
- non_tracked_cpu_duration_reporter_(
- "Scheduler.Experimental.CPUTimePerThread.Untracked") {}
- ThreadMetrics::~ThreadMetrics() {}
- bool ThreadMetrics::ShouldDiscardTask(
- const base::sequence_manager::Task& task,
- const base::sequence_manager::TaskQueue::TaskTiming& task_timing) {
- // TODO(altimin): Investigate the relationship between thread time and
- // wall time for discarded tasks.
- return task_timing.wall_duration() > kLongTaskDiscardingThreshold;
- }
- void ThreadMetrics::RecordTaskMetrics(
- const base::sequence_manager::Task& task,
- const base::sequence_manager::TaskQueue::TaskTiming& task_timing) {
- DCHECK(!has_cpu_timing_for_each_task_ || task_timing.has_thread_time());
- thread_task_duration_reporter_.RecordTask(thread_type_,
- task_timing.wall_duration());
- if (!task_timing.has_thread_time())
- return;
- thread_task_cpu_duration_reporter_.RecordTask(thread_type_,
- task_timing.thread_duration());
- if (has_cpu_timing_for_each_task_) {
- non_tracked_cpu_duration_reporter_.RecordTask(
- thread_type_, task_timing.start_thread_time() - last_known_time_);
- tracked_cpu_duration_reporter_.RecordTask(thread_type_,
- task_timing.thread_duration());
- last_known_time_ = task_timing.end_thread_time();
- }
- }
- } // namespace scheduling_metrics
|