| Index: ash/metrics/task_switch_time_tracker.h
|
| diff --git a/ash/metrics/task_switch_time_tracker.h b/ash/metrics/task_switch_time_tracker.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3673ae3fc2dbb58a40a04c6a906468125932353c
|
| --- /dev/null
|
| +++ b/ash/metrics/task_switch_time_tracker.h
|
| @@ -0,0 +1,76 @@
|
| +// Copyright 2015 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.
|
| +
|
| +#ifndef ASH_METRICS_TASK_SWITCH_TIME_TRACKER_H_
|
| +#define ASH_METRICS_TASK_SWITCH_TIME_TRACKER_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/time/time.h"
|
| +
|
| +namespace base {
|
| +class HistogramBase;
|
| +class TickClock;
|
| +}
|
| +
|
| +namespace ash {
|
| +
|
| +namespace test {
|
| +class TaskSwitchTimeTrackerTestAPI;
|
| +} // namespace test
|
| +
|
| +// Tracks time deltas between task switches and records them in a histogram.
|
| +class TaskSwitchTimeTracker {
|
| + public:
|
| + // Create a TaskSwitchTimeTracker that will record data to the histogram with
|
| + // the given |histogram_name|.
|
| + explicit TaskSwitchTimeTracker(const std::string& histogram_name);
|
| +
|
| + ~TaskSwitchTimeTracker();
|
| +
|
| + // Notifies |this| that a task switch has occurred. A histogram data point
|
| + // will be recorded for all calls but the first.
|
| + void OnTaskSwitch();
|
| +
|
| + private:
|
| + friend class test::TaskSwitchTimeTrackerTestAPI;
|
| +
|
| + // Private constructor that the test::TaskSwitchTimeTrackerTestAPI can use to
|
| + // inject a custom |tick_clock|.
|
| + TaskSwitchTimeTracker(const std::string& histogram_name,
|
| + scoped_ptr<base::TickClock> tick_clock);
|
| +
|
| + // Returns true if |last_action_time_| has a valid value.
|
| + bool HasLastActionTime() const;
|
| +
|
| + // Sets the |last_action_time_| to |tick_clock_|'s current value and returns
|
| + // the previous value for |last_action_time_|.
|
| + base::TimeTicks SetLastActionTime();
|
| +
|
| + // Records a data point in the histogram.
|
| + void RecordTimeDelta();
|
| +
|
| + // Lazily obtains and sets the |histogram_|.
|
| + base::HistogramBase* GetHistogram();
|
| +
|
| + // The histogram name to record data to.
|
| + std::string histogram_name_;
|
| +
|
| + // The histogram to log data to. Set via GetHistogram() using lazy load.
|
| + base::HistogramBase* histogram_ = nullptr;
|
| +
|
| + // Tracks the last time OnTaskSwitch() was called. A value of
|
| + // base::TimeTicks() should be interpreted as not set.
|
| + base::TimeTicks last_action_time_ = base::TimeTicks();
|
| +
|
| + // The clock used to determine the |last_action_time_|.
|
| + scoped_ptr<base::TickClock> tick_clock_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TaskSwitchTimeTracker);
|
| +};
|
| +
|
| +} // namespace ash
|
| +
|
| +#endif // ASH_METRICS_TASK_SWITCH_TIME_TRACKE_H_
|
|
|