| 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 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 friend class MetricsDaemonTest; | 33 friend class MetricsDaemonTest; |
| 34 FRIEND_TEST(MetricsDaemonTest, DailyUseReporter); | 34 FRIEND_TEST(MetricsDaemonTest, DailyUseReporter); |
| 35 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState); | 35 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState); |
| 36 FRIEND_TEST(MetricsDaemonTest, LookupPowerState); | 36 FRIEND_TEST(MetricsDaemonTest, LookupPowerState); |
| 37 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState); | 37 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState); |
| 38 FRIEND_TEST(MetricsDaemonTest, LookupSessionState); | 38 FRIEND_TEST(MetricsDaemonTest, LookupSessionState); |
| 39 FRIEND_TEST(MetricsDaemonTest, MessageFilter); | 39 FRIEND_TEST(MetricsDaemonTest, MessageFilter); |
| 40 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop); | 40 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop); |
| 41 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend); | 41 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend); |
| 42 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged); | 42 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged); |
| 43 FRIEND_TEST(MetricsDaemonTest, ProcessUserCrash); |
| 43 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged); | 44 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged); |
| 44 FRIEND_TEST(MetricsDaemonTest, SendMetric); | 45 FRIEND_TEST(MetricsDaemonTest, SendMetric); |
| 45 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged); | 46 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged); |
| 46 FRIEND_TEST(MetricsDaemonTest, SetUserActiveState); | 47 FRIEND_TEST(MetricsDaemonTest, SetUserActiveState); |
| 47 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump); | 48 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump); |
| 49 FRIEND_TEST(MetricsDaemonTest, UserCrashIntervalReporter); |
| 48 | 50 |
| 49 // The network states (see network_states.h). | 51 // The network states (see network_states.h). |
| 50 enum NetworkState { | 52 enum NetworkState { |
| 51 kUnknownNetworkState = -1, // Initial/unknown network state. | 53 kUnknownNetworkState = -1, // Initial/unknown network state. |
| 52 #define STATE(name, capname) kNetworkState ## capname, | 54 #define STATE(name, capname) kNetworkState ## capname, |
| 53 #include "network_states.h" | 55 #include "network_states.h" |
| 54 kNumberNetworkStates | 56 kNumberNetworkStates |
| 55 }; | 57 }; |
| 56 | 58 |
| 57 // The power states (see power_states.h). | 59 // The power states (see power_states.h). |
| (...skipping 22 matching lines...) Expand all Loading... |
| 80 | 82 |
| 81 // Metric parameters. | 83 // Metric parameters. |
| 82 static const char kMetricDailyUseTimeName[]; | 84 static const char kMetricDailyUseTimeName[]; |
| 83 static const int kMetricDailyUseTimeMin; | 85 static const int kMetricDailyUseTimeMin; |
| 84 static const int kMetricDailyUseTimeMax; | 86 static const int kMetricDailyUseTimeMax; |
| 85 static const int kMetricDailyUseTimeBuckets; | 87 static const int kMetricDailyUseTimeBuckets; |
| 86 static const char kMetricTimeToNetworkDropName[]; | 88 static const char kMetricTimeToNetworkDropName[]; |
| 87 static const int kMetricTimeToNetworkDropMin; | 89 static const int kMetricTimeToNetworkDropMin; |
| 88 static const int kMetricTimeToNetworkDropMax; | 90 static const int kMetricTimeToNetworkDropMax; |
| 89 static const int kMetricTimeToNetworkDropBuckets; | 91 static const int kMetricTimeToNetworkDropBuckets; |
| 92 static const char kMetricUserCrashIntervalName[]; |
| 93 static const int kMetricUserCrashIntervalMin; |
| 94 static const int kMetricUserCrashIntervalMax; |
| 95 static const int kMetricUserCrashIntervalBuckets; |
| 90 | 96 |
| 91 // D-Bus message match strings. | 97 // D-Bus message match strings. |
| 92 static const char* kDBusMatches_[]; | 98 static const char* kDBusMatches_[]; |
| 93 | 99 |
| 94 // Array of network states. | 100 // Array of network states. |
| 95 static const char* kNetworkStates_[kNumberNetworkStates]; | 101 static const char* kNetworkStates_[kNumberNetworkStates]; |
| 96 | 102 |
| 97 // Array of power states. | 103 // Array of power states. |
| 98 static const char* kPowerStates_[kNumberPowerStates]; | 104 static const char* kPowerStates_[kNumberPowerStates]; |
| 99 | 105 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 // discarded. | 141 // discarded. |
| 136 void SetUserActiveState(bool active, base::Time now); | 142 void SetUserActiveState(bool active, base::Time now); |
| 137 | 143 |
| 138 // Updates the daily usage file, if necessary, by adding |seconds| | 144 // Updates the daily usage file, if necessary, by adding |seconds| |
| 139 // of active use to the |day| since Epoch. If there's usage data for | 145 // of active use to the |day| since Epoch. If there's usage data for |
| 140 // day in the past in the usage file, that data is sent to UMA and | 146 // day in the past in the usage file, that data is sent to UMA and |
| 141 // removed from the file. If there's already usage data for |day| in | 147 // removed from the file. If there's already usage data for |day| in |
| 142 // the usage file, the |seconds| are accumulated. | 148 // the usage file, the |seconds| are accumulated. |
| 143 void LogDailyUseRecord(int day, int seconds); | 149 void LogDailyUseRecord(int day, int seconds); |
| 144 | 150 |
| 151 // Updates the active use time and logs time between user-space |
| 152 // process crashes. |
| 153 void ProcessUserCrash(); |
| 154 |
| 145 // Callbacks for the daily use monitor. The daily use monitor uses | 155 // Callbacks for the daily use monitor. The daily use monitor uses |
| 146 // LogDailyUseRecord to aggregate current usage data and send it to | 156 // LogDailyUseRecord to aggregate current usage data and send it to |
| 147 // UMA, if necessary. It also reschedules itself using an | 157 // UMA, if necessary. It also reschedules itself using an |
| 148 // exponentially bigger interval (up to a certain maximum) -- so | 158 // exponentially bigger interval (up to a certain maximum) -- so |
| 149 // usage is monitored less frequently with longer active use. | 159 // usage is monitored less frequently with longer active use. |
| 150 static gboolean UseMonitorStatic(gpointer data); | 160 static gboolean UseMonitorStatic(gpointer data); |
| 151 bool UseMonitor(); | 161 bool UseMonitor(); |
| 152 | 162 |
| 153 // Schedules or reschedules a daily use monitor for |interval| | 163 // Schedules or reschedules a daily use monitor for |interval| |
| 154 // seconds from now. |backoff| mode is used by the use monitor to | 164 // seconds from now. |backoff| mode is used by the use monitor to |
| 155 // reschedule itself. If there's a monitor scheduled already and | 165 // reschedule itself. If there's a monitor scheduled already and |
| 156 // |backoff| is false, unschedules it first. Doesn't schedule a | 166 // |backoff| is false, unschedules it first. Doesn't schedule a |
| 157 // monitor for more than kUseMonitorIntervalMax seconds in the | 167 // monitor for more than kUseMonitorIntervalMax seconds in the |
| 158 // future (see metrics_daemon.cc). Returns true if a new use monitor | 168 // future (see metrics_daemon.cc). Returns true if a new use monitor |
| 159 // was scheduled, false otherwise (note that if |backoff| is false a | 169 // was scheduled, false otherwise (note that if |backoff| is false a |
| 160 // new use monitor will always be scheduled). | 170 // new use monitor will always be scheduled). |
| 161 bool ScheduleUseMonitor(int interval, bool backoff); | 171 bool ScheduleUseMonitor(int interval, bool backoff); |
| 162 | 172 |
| 163 // Unschedules a scheduled use monitor, if any. | 173 // Unschedules a scheduled use monitor, if any. |
| 164 void UnscheduleUseMonitor(); | 174 void UnscheduleUseMonitor(); |
| 165 | 175 |
| 166 // Sends a regular (exponential) histogram sample to Chrome for | 176 // Sends a regular (exponential) histogram sample to Chrome for |
| 167 // transport to UMA. See MetricsLibrary::SendToUMA in | 177 // transport to UMA. See MetricsLibrary::SendToUMA in |
| 168 // metrics_library.h for a description of the arguments. | 178 // metrics_library.h for a description of the arguments. |
| 169 void SendMetric(const std::string& name, int sample, | 179 void SendMetric(const std::string& name, int sample, |
| 170 int min, int max, int nbuckets); | 180 int min, int max, int nbuckets); |
| 171 | 181 |
| 182 // TaggedCounter callback to process aggregated daily usage data and |
| 183 // send to UMA. |
| 172 static void DailyUseReporter(void* data, int tag, int count); | 184 static void DailyUseReporter(void* data, int tag, int count); |
| 173 | 185 |
| 186 // TaggedCounter callback to process time between user-space process |
| 187 // crashes and send to UMA. |
| 188 static void UserCrashIntervalReporter(void* data, int tag, int count); |
| 189 |
| 174 // Test mode. | 190 // Test mode. |
| 175 bool testing_; | 191 bool testing_; |
| 176 | 192 |
| 177 // The metrics library handle. | 193 // The metrics library handle. |
| 178 MetricsLibraryInterface* metrics_lib_; | 194 MetricsLibraryInterface* metrics_lib_; |
| 179 | 195 |
| 180 // Current network state. | 196 // Current network state. |
| 181 NetworkState network_state_; | 197 NetworkState network_state_; |
| 182 | 198 |
| 183 // Timestamps last network state update. This timestamp is used to | 199 // Timestamps last network state update. This timestamp is used to |
| 184 // sample the time from the network going online to going offline so | 200 // sample the time from the network going online to going offline so |
| 185 // TimeTicks ensures a monotonically increasing TimeDelta. | 201 // TimeTicks ensures a monotonically increasing TimeDelta. |
| 186 base::TimeTicks network_state_last_; | 202 base::TimeTicks network_state_last_; |
| 187 | 203 |
| 188 // Current power state. | 204 // Current power state. |
| 189 PowerState power_state_; | 205 PowerState power_state_; |
| 190 | 206 |
| 191 // Current user session state. | 207 // Current user session state. |
| 192 SessionState session_state_; | 208 SessionState session_state_; |
| 193 | 209 |
| 194 // Is the user currently active: power is on, user session has | 210 // Is the user currently active: power is on, user session has |
| 195 // started, screen is not locked. | 211 // started, screen is not locked. |
| 196 bool user_active_; | 212 bool user_active_; |
| 197 | 213 |
| 198 // Timestamps last user active update. Active use time is | 214 // Timestamps last user active update. Active use time is aggregated |
| 199 // aggregated each day before sending to UMA so using time since the | 215 // each day before sending to UMA so using time since the epoch as |
| 200 // epoch as the timestamp. | 216 // the timestamp. |
| 201 base::Time user_active_last_; | 217 base::Time user_active_last_; |
| 202 | 218 |
| 219 // Daily active use time in seconds. |
| 203 scoped_ptr<chromeos_metrics::TaggedCounterInterface> daily_use_; | 220 scoped_ptr<chromeos_metrics::TaggedCounterInterface> daily_use_; |
| 204 | 221 |
| 222 // Active use time between user-space process crashes. |
| 223 scoped_ptr<chromeos_metrics::TaggedCounterInterface> user_crash_interval_; |
| 224 |
| 205 // Sleep period until the next daily usage aggregation performed by | 225 // Sleep period until the next daily usage aggregation performed by |
| 206 // the daily use monitor (see ScheduleUseMonitor). | 226 // the daily use monitor (see ScheduleUseMonitor). |
| 207 int usemon_interval_; | 227 int usemon_interval_; |
| 208 | 228 |
| 209 // Scheduled daily use monitor source (see ScheduleUseMonitor). | 229 // Scheduled daily use monitor source (see ScheduleUseMonitor). |
| 210 GSource* usemon_source_; | 230 GSource* usemon_source_; |
| 211 }; | 231 }; |
| 212 | 232 |
| 213 #endif // METRICS_DAEMON_H_ | 233 #endif // METRICS_DAEMON_H_ |
| OLD | NEW |