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

Side by Side Diff: src/platform/metrics/metrics_daemon.cc

Issue 2079007: Add metrics library tests. Some metrics daemon API cleanup. (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: A bit more cleanup. Created 10 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 unified diff | Download patch
« no previous file with comments | « src/platform/metrics/metrics_daemon.h ('k') | src/platform/metrics/metrics_daemon_main.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>
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 #include "screensaver_states.h" 93 #include "screensaver_states.h"
94 }; 94 };
95 95
96 // static 96 // static
97 const char* MetricsDaemon::kSessionStates_[] = { 97 const char* MetricsDaemon::kSessionStates_[] = {
98 #define STATE(name, capname) #name, 98 #define STATE(name, capname) #name,
99 #include "session_states.h" 99 #include "session_states.h"
100 }; 100 };
101 101
102 void MetricsDaemon::Run(bool run_as_daemon) { 102 void MetricsDaemon::Run(bool run_as_daemon) {
103 MetricsLibrary metrics_lib;
104 metrics_lib.Init();
105 Init(false, &metrics_lib);
106 if (!run_as_daemon || daemon(0, 0) == 0) { 103 if (!run_as_daemon || daemon(0, 0) == 0) {
107 Loop(); 104 Loop();
108 } 105 }
109 } 106 }
110 107
111 void MetricsDaemon::Init(bool testing, MetricsLibraryInterface* metrics_lib) { 108 void MetricsDaemon::Init(bool testing, MetricsLibraryInterface* metrics_lib) {
112 testing_ = testing; 109 testing_ = testing;
113 DCHECK(metrics_lib != NULL); 110 DCHECK(metrics_lib != NULL);
114 metrics_lib_ = metrics_lib; 111 metrics_lib_ = metrics_lib;
115 daily_use_record_file_ = kDailyUseRecordFile; 112 daily_use_record_file_ = kDailyUseRecordFile;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 // Logs the time in seconds between the network going online to 213 // Logs the time in seconds between the network going online to
217 // going offline (or, more precisely, going not online) in order to 214 // going offline (or, more precisely, going not online) in order to
218 // measure the mean time to network dropping. Going offline as part 215 // measure the mean time to network dropping. Going offline as part
219 // of suspend-to-RAM is not logged as network drop -- the assumption 216 // of suspend-to-RAM is not logged as network drop -- the assumption
220 // is that the message for suspend-to-RAM comes before the network 217 // is that the message for suspend-to-RAM comes before the network
221 // offline message which seems to and should be the case. 218 // offline message which seems to and should be the case.
222 if (state != kNetworkStateOnline && 219 if (state != kNetworkStateOnline &&
223 network_state_ == kNetworkStateOnline && 220 network_state_ == kNetworkStateOnline &&
224 power_state_ != kPowerStateMem) { 221 power_state_ != kPowerStateMem) {
225 int online_time = static_cast<int>(now - network_state_last_); 222 int online_time = static_cast<int>(now - network_state_last_);
226 PublishMetric(kMetricTimeToNetworkDropName, online_time, 223 SendMetric(kMetricTimeToNetworkDropName, online_time,
227 kMetricTimeToNetworkDropMin, 224 kMetricTimeToNetworkDropMin,
228 kMetricTimeToNetworkDropMax, 225 kMetricTimeToNetworkDropMax,
229 kMetricTimeToNetworkDropBuckets); 226 kMetricTimeToNetworkDropBuckets);
230 } 227 }
231 228
232 network_state_ = state; 229 network_state_ = state;
233 network_state_last_ = now; 230 network_state_last_ = now;
234 } 231 }
235 232
236 MetricsDaemon::NetworkState 233 MetricsDaemon::NetworkState
237 MetricsDaemon::LookupNetworkState(const char* state_name) { 234 MetricsDaemon::LookupNetworkState(const char* state_name) {
238 for (int i = 0; i < kNumberNetworkStates; i++) { 235 for (int i = 0; i < kNumberNetworkStates; i++) {
239 if (strcmp(state_name, kNetworkStates_[i]) == 0) { 236 if (strcmp(state_name, kNetworkStates_[i]) == 0) {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 if (record.day_ == day) { 339 if (record.day_ == day) {
343 // If there's an existing record for today, aggregates the usage 340 // If there's an existing record for today, aggregates the usage
344 // time. 341 // time.
345 same_day = true; 342 same_day = true;
346 record.seconds_ += seconds; 343 record.seconds_ += seconds;
347 } else { 344 } else {
348 // If there's an existing record for a day in the past, rounds 345 // If there's an existing record for a day in the past, rounds
349 // the usage to the nearest minute and sends it to UMA. 346 // the usage to the nearest minute and sends it to UMA.
350 int minutes = 347 int minutes =
351 (record.seconds_ + kSecondsPerMinute / 2) / kSecondsPerMinute; 348 (record.seconds_ + kSecondsPerMinute / 2) / kSecondsPerMinute;
352 PublishMetric(kMetricDailyUseTimeName, minutes, 349 SendMetric(kMetricDailyUseTimeName, minutes,
353 kMetricDailyUseTimeMin, 350 kMetricDailyUseTimeMin,
354 kMetricDailyUseTimeMax, 351 kMetricDailyUseTimeMax,
355 kMetricDailyUseTimeBuckets); 352 kMetricDailyUseTimeBuckets);
356 353
357 // Truncates the usage file to ensure that no duplicate usage is 354 // Truncates the usage file to ensure that no duplicate usage is
358 // sent to UMA. 355 // sent to UMA.
359 PLOG_IF(WARNING, HANDLE_EINTR(ftruncate(fd, 0)) != 0); 356 PLOG_IF(WARNING, HANDLE_EINTR(ftruncate(fd, 0)) != 0);
360 } 357 }
361 } 358 }
362 359
363 // Updates the use record in the daily usage file if there's new 360 // Updates the use record in the daily usage file if there's new
364 // usage today. 361 // usage today.
365 if (seconds > 0) { 362 if (seconds > 0) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 // If there's a use monitor scheduled already, destroys it. 435 // If there's a use monitor scheduled already, destroys it.
439 if (usemon_source_ == NULL) 436 if (usemon_source_ == NULL)
440 return; 437 return;
441 438
442 DLOG(INFO) << "destroying use monitor"; 439 DLOG(INFO) << "destroying use monitor";
443 g_source_destroy(usemon_source_); 440 g_source_destroy(usemon_source_);
444 usemon_source_ = NULL; 441 usemon_source_ = NULL;
445 usemon_interval_ = 0; 442 usemon_interval_ = 0;
446 } 443 }
447 444
448 void MetricsDaemon::PublishMetric(const char* name, int sample, 445 void MetricsDaemon::SendMetric(const std::string& name, int sample,
449 int min, int max, int nbuckets) { 446 int min, int max, int nbuckets) {
450 DLOG(INFO) << "received metric: " << name << " " << sample << " " 447 DLOG(INFO) << "received metric: " << name << " " << sample << " "
451 << min << " " << max << " " << nbuckets; 448 << min << " " << max << " " << nbuckets;
452 metrics_lib_->SendToUMA(name, sample, min, max, nbuckets); 449 metrics_lib_->SendToUMA(name, sample, min, max, nbuckets);
453 } 450 }
OLDNEW
« no previous file with comments | « src/platform/metrics/metrics_daemon.h ('k') | src/platform/metrics/metrics_daemon_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698