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

Side by Side Diff: metrics_daemon.cc

Issue 2698002: Update metrics daemon to use new power manager signals for locking (4 of 7). (Closed) Base URL: ssh://git@chromiumos-git/metrics.git
Patch Set: Update to master Created 10 years, 6 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 unified diff | Download patch
« no previous file with comments | « metrics_daemon.h ('k') | metrics_daemon_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "metrics_daemon.h" 5 #include "metrics_daemon.h"
6 6
7 #include <dbus/dbus-glib-lowlevel.h> 7 #include <dbus/dbus-glib-lowlevel.h>
8 #include <sys/file.h> 8 #include <sys/file.h>
9 9
10 #include <base/eintr_wrapper.h> 10 #include <base/eintr_wrapper.h>
11 #include <base/logging.h> 11 #include <base/logging.h>
12 12
13 using base::Time; 13 using base::Time;
14 using base::TimeDelta; 14 using base::TimeDelta;
15 using base::TimeTicks; 15 using base::TimeTicks;
16 16
17 #define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error") 17 #define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error")
18 #define DBUS_IFACE_FLIMFLAM_MANAGER "org.chromium.flimflam.Manager" 18 #define DBUS_IFACE_FLIMFLAM_MANAGER "org.chromium.flimflam.Manager"
19 #define DBUS_IFACE_POWER_MANAGER "org.chromium.Power.Manager" 19 #define DBUS_IFACE_POWER_MANAGER "org.chromium.PowerManager"
20 #define DBUS_IFACE_SCREENSAVER_MANAGER "org.chromium.ScreenSaver.Manager"
21 #define DBUS_IFACE_SESSION_MANAGER "org.chromium.SessionManagerInterface" 20 #define DBUS_IFACE_SESSION_MANAGER "org.chromium.SessionManagerInterface"
22 21
23 // File to aggregate daily usage before sending to UMA. 22 // File to aggregate daily usage before sending to UMA.
24 // TODO(petkov): This file should probably live in a user-specific stateful 23 // TODO(petkov): This file should probably live in a user-specific stateful
25 // location, e.g., /home/chronos/user. 24 // location, e.g., /home/chronos/user.
26 static const char kDailyUseRecordFile[] = "/var/log/metrics/daily-usage"; 25 static const char kDailyUseRecordFile[] = "/var/log/metrics/daily-usage";
27 26
28 static const int kSecondsPerMinute = 60; 27 static const int kSecondsPerMinute = 60;
29 static const int kMinutesPerHour = 60; 28 static const int kMinutesPerHour = 60;
30 static const int kHoursPerDay = 24; 29 static const int kHoursPerDay = 24;
(...skipping 25 matching lines...) Expand all
56 // static 55 // static
57 const char* MetricsDaemon::kDBusMatches_[] = { 56 const char* MetricsDaemon::kDBusMatches_[] = {
58 "type='signal'," 57 "type='signal',"
59 "sender='org.chromium.flimflam'," 58 "sender='org.chromium.flimflam',"
60 "interface='" DBUS_IFACE_FLIMFLAM_MANAGER "'," 59 "interface='" DBUS_IFACE_FLIMFLAM_MANAGER "',"
61 "path='/'," 60 "path='/',"
62 "member='StateChanged'", 61 "member='StateChanged'",
63 62
64 "type='signal'," 63 "type='signal',"
65 "interface='" DBUS_IFACE_POWER_MANAGER "'," 64 "interface='" DBUS_IFACE_POWER_MANAGER "',"
66 "path='/'," 65 "path='/'"
67 "member='PowerStateChanged'",
68
69 "type='signal',"
70 "interface='" DBUS_IFACE_SCREENSAVER_MANAGER "',"
71 "path='/',"
72 "member='LockStateChanged'",
73 66
74 "type='signal'," 67 "type='signal',"
75 "sender='org.chromium.SessionManager'," 68 "sender='org.chromium.SessionManager',"
76 "interface='" DBUS_IFACE_SESSION_MANAGER "'," 69 "interface='" DBUS_IFACE_SESSION_MANAGER "',"
77 "path='/org/chromium/SessionManager'," 70 "path='/org/chromium/SessionManager',"
78 "member='SessionStateChanged'", 71 "member='SessionStateChanged'",
79 }; 72 };
80 73
81 // static 74 // static
82 const char* MetricsDaemon::kNetworkStates_[] = { 75 const char* MetricsDaemon::kNetworkStates_[] = {
83 #define STATE(name, capname) #name, 76 #define STATE(name, capname) #name,
84 #include "network_states.h" 77 #include "network_states.h"
85 }; 78 };
86 79
87 // static 80 // static
88 const char* MetricsDaemon::kPowerStates_[] = { 81 const char* MetricsDaemon::kPowerStates_[] = {
89 #define STATE(name, capname) #name, 82 #define STATE(name, capname) #name,
90 #include "power_states.h" 83 #include "power_states.h"
91 }; 84 };
92 85
93 // static 86 // static
94 const char* MetricsDaemon::kScreenSaverStates_[] = {
95 #define STATE(name, capname) #name,
96 #include "screensaver_states.h"
97 };
98
99 // static
100 const char* MetricsDaemon::kSessionStates_[] = { 87 const char* MetricsDaemon::kSessionStates_[] = {
101 #define STATE(name, capname) #name, 88 #define STATE(name, capname) #name,
102 #include "session_states.h" 89 #include "session_states.h"
103 }; 90 };
104 91
105 void MetricsDaemon::Run(bool run_as_daemon) { 92 void MetricsDaemon::Run(bool run_as_daemon) {
106 if (!run_as_daemon || daemon(0, 0) == 0) { 93 if (!run_as_daemon || daemon(0, 0) == 0) {
107 Loop(); 94 Loop();
108 } 95 }
109 } 96 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 DBusMessageIter iter; 161 DBusMessageIter iter;
175 dbus_message_iter_init(message, &iter); 162 dbus_message_iter_init(message, &iter);
176 if (strcmp(interface, DBUS_IFACE_FLIMFLAM_MANAGER) == 0) { 163 if (strcmp(interface, DBUS_IFACE_FLIMFLAM_MANAGER) == 0) {
177 CHECK(strcmp(dbus_message_get_member(message), 164 CHECK(strcmp(dbus_message_get_member(message),
178 "StateChanged") == 0); 165 "StateChanged") == 0);
179 166
180 char* state_name; 167 char* state_name;
181 dbus_message_iter_get_basic(&iter, &state_name); 168 dbus_message_iter_get_basic(&iter, &state_name);
182 daemon->NetStateChanged(state_name, ticks); 169 daemon->NetStateChanged(state_name, ticks);
183 } else if (strcmp(interface, DBUS_IFACE_POWER_MANAGER) == 0) { 170 } else if (strcmp(interface, DBUS_IFACE_POWER_MANAGER) == 0) {
184 CHECK(strcmp(dbus_message_get_member(message), 171 const char* member = dbus_message_get_member(message);
185 "PowerStateChanged") == 0); 172 if (strcmp(member, "ScreenIsLocked") == 0) {
186 173 daemon->SetUserActiveState(false, now);
187 char* state_name; 174 } else if (strcmp(member, "ScreenIsUnlocked") == 0) {
188 dbus_message_iter_get_basic(&iter, &state_name); 175 daemon->SetUserActiveState(true, now);
189 daemon->PowerStateChanged(state_name, now); 176 } else if (strcmp(member, "PowerStateChanged") == 0) {
190 } else if (strcmp(interface, DBUS_IFACE_SCREENSAVER_MANAGER) == 0) { 177 char* state_name;
191 CHECK(strcmp(dbus_message_get_member(message), 178 dbus_message_iter_get_basic(&iter, &state_name);
192 "LockStateChanged") == 0); 179 daemon->PowerStateChanged(state_name, now);
193 180 }
194 char* state_name;
195 dbus_message_iter_get_basic(&iter, &state_name);
196 daemon->ScreenSaverStateChanged(state_name, now);
197 } else if (strcmp(interface, DBUS_IFACE_SESSION_MANAGER) == 0) { 181 } else if (strcmp(interface, DBUS_IFACE_SESSION_MANAGER) == 0) {
198 CHECK(strcmp(dbus_message_get_member(message), 182 CHECK(strcmp(dbus_message_get_member(message),
199 "SessionStateChanged") == 0); 183 "SessionStateChanged") == 0);
200 184
201 char* state_name; 185 char* state_name;
202 dbus_message_iter_get_basic(&iter, &state_name); 186 dbus_message_iter_get_basic(&iter, &state_name);
203 daemon->SessionStateChanged(state_name, now); 187 daemon->SessionStateChanged(state_name, now);
204 } else { 188 } else {
205 DLOG(WARNING) << "unexpected interface: " << interface; 189 DLOG(WARNING) << "unexpected interface: " << interface;
206 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; 190 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 MetricsDaemon::LookupPowerState(const char* state_name) { 242 MetricsDaemon::LookupPowerState(const char* state_name) {
259 for (int i = 0; i < kNumberPowerStates; i++) { 243 for (int i = 0; i < kNumberPowerStates; i++) {
260 if (strcmp(state_name, kPowerStates_[i]) == 0) { 244 if (strcmp(state_name, kPowerStates_[i]) == 0) {
261 return static_cast<PowerState>(i); 245 return static_cast<PowerState>(i);
262 } 246 }
263 } 247 }
264 DLOG(WARNING) << "unknown power state: " << state_name; 248 DLOG(WARNING) << "unknown power state: " << state_name;
265 return kUnknownPowerState; 249 return kUnknownPowerState;
266 } 250 }
267 251
268 void MetricsDaemon::ScreenSaverStateChanged(const char* state_name, Time now) {
269 DLOG(INFO) << "screen-saver state: " << state_name;
270 screensaver_state_ = LookupScreenSaverState(state_name);
271 SetUserActiveState(screensaver_state_ == kScreenSaverStateUnlocked, now);
272 }
273
274 MetricsDaemon::ScreenSaverState
275 MetricsDaemon::LookupScreenSaverState(const char* state_name) {
276 for (int i = 0; i < kNumberScreenSaverStates; i++) {
277 if (strcmp(state_name, kScreenSaverStates_[i]) == 0) {
278 return static_cast<ScreenSaverState>(i);
279 }
280 }
281 DLOG(WARNING) << "unknown screen-saver state: " << state_name;
282 return kUnknownScreenSaverState;
283 }
284
285 void MetricsDaemon::SessionStateChanged(const char* state_name, Time now) { 252 void MetricsDaemon::SessionStateChanged(const char* state_name, Time now) {
286 DLOG(INFO) << "user session state: " << state_name; 253 DLOG(INFO) << "user session state: " << state_name;
287 session_state_ = LookupSessionState(state_name); 254 session_state_ = LookupSessionState(state_name);
288 SetUserActiveState(session_state_ == kSessionStateStarted, now); 255 SetUserActiveState(session_state_ == kSessionStateStarted, now);
289 } 256 }
290 257
291 MetricsDaemon::SessionState 258 MetricsDaemon::SessionState
292 MetricsDaemon::LookupSessionState(const char* state_name) { 259 MetricsDaemon::LookupSessionState(const char* state_name) {
293 for (int i = 0; i < kNumberSessionStates; i++) { 260 for (int i = 0; i < kNumberSessionStates; i++) {
294 if (strcmp(state_name, kSessionStates_[i]) == 0) { 261 if (strcmp(state_name, kSessionStates_[i]) == 0) {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 usemon_source_ = NULL; 421 usemon_source_ = NULL;
455 usemon_interval_ = 0; 422 usemon_interval_ = 0;
456 } 423 }
457 424
458 void MetricsDaemon::SendMetric(const std::string& name, int sample, 425 void MetricsDaemon::SendMetric(const std::string& name, int sample,
459 int min, int max, int nbuckets) { 426 int min, int max, int nbuckets) {
460 DLOG(INFO) << "received metric: " << name << " " << sample << " " 427 DLOG(INFO) << "received metric: " << name << " " << sample << " "
461 << min << " " << max << " " << nbuckets; 428 << min << " " << max << " " << nbuckets;
462 metrics_lib_->SendToUMA(name, sample, min, max, nbuckets); 429 metrics_lib_->SendToUMA(name, sample, min, max, nbuckets);
463 } 430 }
OLDNEW
« no previous file with comments | « metrics_daemon.h ('k') | metrics_daemon_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698