Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2989)

Unified Diff: ash/metrics/task_switch_time_tracker.h

Issue 1133123003: Added metrics to track the time between task switches done via the shelf. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added ASH_EXPORT to TaskSwitchTimeTracker. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/metrics/task_switch_metrics_recorder_unittest.cc ('k') | ash/metrics/task_switch_time_tracker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..77d1182033a60b9b9538bfab2b5d0f8d2401ff0b
--- /dev/null
+++ b/ash/metrics/task_switch_time_tracker.h
@@ -0,0 +1,77 @@
+// 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 "ash/ash_export.h"
+#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 ASH_EXPORT 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_
« no previous file with comments | « ash/metrics/task_switch_metrics_recorder_unittest.cc ('k') | ash/metrics/task_switch_time_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698