| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS 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 #ifndef METRICS_DAEMON_H_ | 5 #ifndef METRICS_DAEMON_H_ |
| 6 #define METRICS_DAEMON_H_ | 6 #define METRICS_DAEMON_H_ |
| 7 | 7 |
| 8 #include <dbus/dbus.h> | 8 #include <dbus/dbus.h> |
| 9 #include <glib.h> | 9 #include <glib.h> |
| 10 | 10 |
| 11 #include <base/scoped_ptr.h> |
| 12 #include <base/time.h> |
| 13 #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| 14 |
| 11 #include "metrics_library.h" | 15 #include "metrics_library.h" |
| 12 | 16 |
| 13 #include <gtest/gtest_prod.h> // for FRIEND_TEST | 17 namespace chromeos_metrics { class TaggedCounterInterface; } |
| 14 #include <base/time.h> | |
| 15 | 18 |
| 16 class MetricsDaemon { | 19 class MetricsDaemon { |
| 17 | 20 |
| 18 public: | 21 public: |
| 19 MetricsDaemon() | 22 MetricsDaemon(); |
| 20 : daily_use_record_file_(NULL), | 23 ~MetricsDaemon(); |
| 21 network_state_(kUnknownNetworkState), | |
| 22 power_state_(kUnknownPowerState), | |
| 23 session_state_(kUnknownSessionState), | |
| 24 user_active_(false), | |
| 25 daily_use_day_last_(0), | |
| 26 usemon_interval_(0), | |
| 27 usemon_source_(NULL) {} | |
| 28 ~MetricsDaemon() {} | |
| 29 | 24 |
| 30 // Initializes. | 25 // Initializes. |
| 31 void Init(bool testing, MetricsLibraryInterface* metrics_lib); | 26 void Init(bool testing, MetricsLibraryInterface* metrics_lib); |
| 32 | 27 |
| 33 // Does all the work. If |run_as_daemon| is true, daemonizes by | 28 // Does all the work. If |run_as_daemon| is true, daemonizes by |
| 34 // forking. | 29 // forking. |
| 35 void Run(bool run_as_daemon); | 30 void Run(bool run_as_daemon); |
| 36 | 31 |
| 37 private: | 32 private: |
| 38 friend class MetricsDaemonTest; | 33 friend class MetricsDaemonTest; |
| 39 FRIEND_TEST(MetricsDaemonTest, LogDailyUseRecordBadFileLocation); | 34 FRIEND_TEST(MetricsDaemonTest, DailyUseReporter); |
| 40 FRIEND_TEST(MetricsDaemonTest, LogDailyUseRecordOnLogin); | |
| 41 FRIEND_TEST(MetricsDaemonTest, LogDailyUseRecordRoundDown); | |
| 42 FRIEND_TEST(MetricsDaemonTest, LogDailyUseRecordRoundUp); | |
| 43 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState); | 35 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState); |
| 44 FRIEND_TEST(MetricsDaemonTest, LookupPowerState); | 36 FRIEND_TEST(MetricsDaemonTest, LookupPowerState); |
| 45 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState); | 37 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState); |
| 46 FRIEND_TEST(MetricsDaemonTest, LookupSessionState); | 38 FRIEND_TEST(MetricsDaemonTest, LookupSessionState); |
| 47 FRIEND_TEST(MetricsDaemonTest, MessageFilter); | 39 FRIEND_TEST(MetricsDaemonTest, MessageFilter); |
| 48 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop); | 40 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop); |
| 49 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend); | 41 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend); |
| 50 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged); | 42 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged); |
| 51 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged); | 43 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged); |
| 52 FRIEND_TEST(MetricsDaemonTest, SendMetric); | 44 FRIEND_TEST(MetricsDaemonTest, SendMetric); |
| 53 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged); | 45 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged); |
| 54 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateSendOnLogin); | 46 FRIEND_TEST(MetricsDaemonTest, SetUserActiveState); |
| 55 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateSendOnMonitor); | |
| 56 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump); | 47 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump); |
| 57 | 48 |
| 58 // The network states (see network_states.h). | 49 // The network states (see network_states.h). |
| 59 enum NetworkState { | 50 enum NetworkState { |
| 60 kUnknownNetworkState = -1, // Initial/unknown network state. | 51 kUnknownNetworkState = -1, // Initial/unknown network state. |
| 61 #define STATE(name, capname) kNetworkState ## capname, | 52 #define STATE(name, capname) kNetworkState ## capname, |
| 62 #include "network_states.h" | 53 #include "network_states.h" |
| 63 kNumberNetworkStates | 54 kNumberNetworkStates |
| 64 }; | 55 }; |
| 65 | 56 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 | 162 |
| 172 // Unschedules a scheduled use monitor, if any. | 163 // Unschedules a scheduled use monitor, if any. |
| 173 void UnscheduleUseMonitor(); | 164 void UnscheduleUseMonitor(); |
| 174 | 165 |
| 175 // Sends a regular (exponential) histogram sample to Chrome for | 166 // Sends a regular (exponential) histogram sample to Chrome for |
| 176 // transport to UMA. See MetricsLibrary::SendToUMA in | 167 // transport to UMA. See MetricsLibrary::SendToUMA in |
| 177 // metrics_library.h for a description of the arguments. | 168 // metrics_library.h for a description of the arguments. |
| 178 void SendMetric(const std::string& name, int sample, | 169 void SendMetric(const std::string& name, int sample, |
| 179 int min, int max, int nbuckets); | 170 int min, int max, int nbuckets); |
| 180 | 171 |
| 172 static void DailyUseReporter(void* data, int tag, int count); |
| 173 |
| 181 // Test mode. | 174 // Test mode. |
| 182 bool testing_; | 175 bool testing_; |
| 183 | 176 |
| 184 // The metrics library handle. | 177 // The metrics library handle. |
| 185 MetricsLibraryInterface* metrics_lib_; | 178 MetricsLibraryInterface* metrics_lib_; |
| 186 | 179 |
| 187 const char* daily_use_record_file_; | |
| 188 | |
| 189 // Current network state. | 180 // Current network state. |
| 190 NetworkState network_state_; | 181 NetworkState network_state_; |
| 191 | 182 |
| 192 // Timestamps last network state update. This timestamp is used to | 183 // Timestamps last network state update. This timestamp is used to |
| 193 // sample the time from the network going online to going offline so | 184 // sample the time from the network going online to going offline so |
| 194 // TimeTicks ensures a monotonically increasing TimeDelta. | 185 // TimeTicks ensures a monotonically increasing TimeDelta. |
| 195 base::TimeTicks network_state_last_; | 186 base::TimeTicks network_state_last_; |
| 196 | 187 |
| 197 // Current power state. | 188 // Current power state. |
| 198 PowerState power_state_; | 189 PowerState power_state_; |
| 199 | 190 |
| 200 // Current user session state. | 191 // Current user session state. |
| 201 SessionState session_state_; | 192 SessionState session_state_; |
| 202 | 193 |
| 203 // Is the user currently active: power is on, user session has | 194 // Is the user currently active: power is on, user session has |
| 204 // started, screen is not locked. | 195 // started, screen is not locked. |
| 205 bool user_active_; | 196 bool user_active_; |
| 206 | 197 |
| 207 // Timestamps last user active update. Active use time is | 198 // Timestamps last user active update. Active use time is |
| 208 // aggregated each day before sending to UMA so using time since the | 199 // aggregated each day before sending to UMA so using time since the |
| 209 // epoch as the timestamp. | 200 // epoch as the timestamp. |
| 210 base::Time user_active_last_; | 201 base::Time user_active_last_; |
| 211 | 202 |
| 212 // Last stored daily use day (since the epoch). | 203 scoped_ptr<chromeos_metrics::TaggedCounterInterface> daily_use_; |
| 213 int daily_use_day_last_; | |
| 214 | 204 |
| 215 // Sleep period until the next daily usage aggregation performed by | 205 // Sleep period until the next daily usage aggregation performed by |
| 216 // the daily use monitor (see ScheduleUseMonitor). | 206 // the daily use monitor (see ScheduleUseMonitor). |
| 217 int usemon_interval_; | 207 int usemon_interval_; |
| 218 | 208 |
| 219 // Scheduled daily use monitor source (see ScheduleUseMonitor). | 209 // Scheduled daily use monitor source (see ScheduleUseMonitor). |
| 220 GSource* usemon_source_; | 210 GSource* usemon_source_; |
| 221 }; | 211 }; |
| 222 | 212 |
| 223 #endif // METRICS_DAEMON_H_ | 213 #endif // METRICS_DAEMON_H_ |
| OLD | NEW |