Index: ui/events/fraction_of_time_without_user_input_recorder.h |
diff --git a/ui/events/fraction_of_time_without_user_input_recorder.h b/ui/events/fraction_of_time_without_user_input_recorder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..daa3035c400652c51afe9aed04e55b4cdf49ebf9 |
--- /dev/null |
+++ b/ui/events/fraction_of_time_without_user_input_recorder.h |
@@ -0,0 +1,51 @@ |
+// Copyright 2017 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 UI_EVENTS_IDLE_FRACTION_RECORDER_H_ |
+#define UI_EVENTS_IDLE_FRACTION_RECORDER_H_ |
+ |
+#include "base/time/time.h" |
+#include "ui/events/events_base_export.h" |
+ |
+namespace ui { |
+ |
+// Receives as input a set of timestamps indicating when events were |
+// received. Reports via UMA the fraction of the time per |window_size_| that |
+// the user was interacting. |
+class EVENTS_BASE_EXPORT FractionOfTimeWithoutUserInputRecorder { |
+ public: |
+ FractionOfTimeWithoutUserInputRecorder(); |
+ void RecordEventAtTime(base::TimeTicks start_time); |
+ |
+ protected: |
+ virtual void RecordActiveInterval(base::TimeTicks start_time, |
+ base::TimeTicks end_time); |
+ void RecordToUma(float idle_fraction) const; |
+ void set_window_size(base::TimeDelta window_size) { |
+ window_size_ = window_size; |
+ } |
+ void set_idle_timeout(base::TimeDelta idle_timeout) { |
+ idle_timeout_ = idle_timeout; |
+ } |
+ |
+ private: |
+ // Within the current period of length |window_size_|, how long has the user |
+ // been active? |
+ base::TimeDelta current_window_active_time_; |
+ // If the user is currently active, when did they start being active? |
+ base::TimeTicks active_duration_start_time_; |
+ base::TimeTicks window_start_time_; |
+ base::TimeTicks previous_event_end_time_; |
+ |
+ // We report the fraction of the time we were idle once per |window_size_|. |
+ base::TimeDelta window_size_; |
+ |
+ // Two events within |idle_timeout_| of one another are considered to be in |
+ // the same period of user activity. |
+ base::TimeDelta idle_timeout_; |
+}; |
+ |
+} // namespace ui |
+ |
+#endif // UI_EVENTS_IDLE_FRACTION_RECORDER_H_ |