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

Side by Side Diff: README

Issue 3573007: Metrics: Update README to reflect recent changes. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/metrics.git
Patch Set: Created 10 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 The Chrome OS "metrics" package contains utilities for client-side 5 The Chrome OS "metrics" package contains utilities for client-side user metric
6 user metric collection. The collected data is sent to Chrome for 6 collection. The collected data is sent to Chrome for transport to the UMA
7 transport to the UMA server. 7 server.
8 8
9 9
10 ================================================================================ 10 ================================================================================
11 The Metrics Library: libmetrics 11 The Metrics Library: libmetrics
12 ================================================================================ 12 ================================================================================
13 13
14 libmetrics is a small library that implements the basic C and C++ API 14 libmetrics is a small library that implements the basic C and C++ API for
15 for metrics collection. All metrics collection is funneled through 15 metrics collection. All metrics collection is funneled through this library. The
16 this library. The easiest and recommended way for a client-side module 16 easiest and recommended way for a client-side module to collect user metrics is
17 to collect user metrics is to link libmetrics and use its APIs to send 17 to link libmetrics and use its APIs to send metrics to Chrome for transport to
18 metrics to Chrome for transport to UMA. In order to use the library in 18 UMA. In order to use the library in a module, you need to do the following:
19 a module, you need to do the following:
20 19
21 - Add a dependence (DEPEND and RDEPEND) on chromeos-base/metrics to 20 - Add a dependence (DEPEND and RDEPEND) on chromeos-base/metrics to the module's
22 the module's ebuild. 21 ebuild.
23 22
24 - Link the module with libmetrics (for example, by passing -lmetrics 23 - Link the module with libmetrics (for example, by passing -lmetrics to the
25 to the module's link command). Both libmetrics.so and libmetrics.a 24 module's link command). Both libmetrics.so and libmetrics.a are built and
26 are built and installed under $SYSROOT/usr/lib/. Note that by 25 installed under $SYSROOT/usr/lib/. Note that by default -lmetrics will link
27 default -lmetrics will link against libmetrics.so, which is 26 against libmetrics.so, which is preferred.
28 preferred.
29 27
30 - To access the metrics library API in the module, include the 28 - To access the metrics library API in the module, include the
31 <metrics/metrics_library.h> header file. The file is installed in 29 <metrics/metrics_library.h> header file. The file is installed in
32 $SYSROOT/usr/include/ when the metrics library is built and 30 $SYSROOT/usr/include/ when the metrics library is built and installed.
33 installed.
34 31
35 - The API includes two methods: 32 - The API includes two methods:
36 33
37 bool MetricsLibrary::SendToUMA(const std::string& name, int sample, 34 bool MetricsLibrary::SendToUMA(const std::string& name, int sample,
38 int min, int max, int nbuckets) 35 int min, int max, int nbuckets)
39 sends a sample for a regular (exponential) histogram. 36 sends a sample for a regular (exponential) histogram.
40 37
41 bool MetricsLibrary::SendEnumToUMA(const std::string& name, int sample, 38 bool MetricsLibrary::SendEnumToUMA(const std::string& name, int sample,
42 int max) 39 int max)
43 sends a sample for an enumeration (linear) histogram. 40 sends a sample for an enumeration (linear) histogram.
44 41
45 Before using these methods, a MetricsLibrary object needs to be 42 Before using these methods, a MetricsLibrary object needs to be constructed
46 constructed and initialized through its Init method. See the 43 and initialized through its Init method. See the complete API documentation in
47 complete API documentation in metrics_library.h under 44 metrics_library.h under src/platform/metrics/.
48 src/platform/metrics/.
49 45
50 For more information on the C API see c_metrics_library.h. 46 For more information on the C API see c_metrics_library.h.
51 47
52 - On the target platform, shortly after the sample is sent it should 48 - Samples are sent to Chrome only if the "/home/chronos/Consent To Send Stats"
53 be visible in Chrome through "about:histograms". 49 file exists (see the AreMetricsEnabled API method). Normally, this file is
50 created when the user opts into metrics collection.
51
52 - On the target platform, shortly after the sample is sent, it should be visible
53 in Chrome through "about:histograms".
54 54
55 55
56 ================================================================================ 56 ================================================================================
57 Histogram Naming Convention 57 Histogram Naming Convention
58 ================================================================================ 58 ================================================================================
59 59
60 Use TrackerArea.MetricName. For example: 60 Use TrackerArea.MetricName. For example:
61 61
62 Logging.CrashCounter 62 Logging.CrashCounter
63 Network.TimeToDrop 63 Network.TimeToDrop
64 64
65 65
66 ================================================================================ 66 ================================================================================
67 Server Side 67 Server Side
68 ================================================================================ 68 ================================================================================
69 69
70 If the histogram data is visible in about:histograms, it will be sent 70 If the histogram data is visible in about:histograms, it will be sent by an
71 by an official Chrome build to UMA, assuming the user has opted into 71 official Chrome build to UMA, assuming the user has opted into metrics
72 metrics collection. To make the histogram visible on 72 collection. To make the histogram visible on "chromedashboard", the histogram
73 "chromedashboard", the histogram wiki needs to be updated (steps 2 and 73 description XML file needs to be updated (steps 2 and 3 after following the
74 3 after following the "Details on how to add your own histograms" link 74 "Details on how to add your own histograms" link under the Histograms tab).
75 under the Histograms tab). Include the string "Chrome OS" in the 75 Include the string "Chrome OS" in the histogram description so that it's easier
76 histogram description so that it's easier to distinguish Chrome OS 76 to distinguish Chrome OS specific metrics from general Chrome histograms.
77 specific metrics from general Chrome histograms.
78 77
79 The UMA server logs and keeps the collected field data even if the 78 The UMA server logs and keeps the collected field data even if the metric's name
80 metric's name is not added to the histogram wiki. However, the 79 is not added to the histogram XML. However, the dashboard histogram for that
81 dashboard histogram for that metric will show field data as of the 80 metric will show field data as of the histogram XML update date; it will not
82 histogram wiki update date; it will not include data for older 81 include data for older dates. If past data needs to be displayed, manual
83 dates. If past data needs to be displayed, manual server-side 82 server-side intervention is required. In other words, one should assume that
84 intervention is required. In other words, one should assume that field 83 field data collection starts only after the histogram XML has been updated.
85 data collection starts only after the histogram wiki has been updated.
86 84
87 85
88 ================================================================================ 86 ================================================================================
89 The Metrics Client: metrics_client 87 The Metrics Client: metrics_client
90 ================================================================================ 88 ================================================================================
91 89
92 metrics_client is a simple shell command-line utility for sending 90 metrics_client is a simple shell command-line utility for sending histogram
93 histogram samples. It's installed under /usr/bin on the target 91 samples. It's installed under /usr/bin on the target platform and uses
94 platform and uses libmetrics to send the data to Chrome. The utility 92 libmetrics to send the data to Chrome. The utility is useful for generating
95 is useful for generating metrics from shell scripts. 93 metrics from shell scripts.
96 94
97 For usage information and command-line options, run "metrics_client" 95 For usage information and command-line options, run "metrics_client" on the
98 on the target platform or look for "Usage:" in metrics_client.cc. 96 target platform or look for "Usage:" in metrics_client.cc.
99 97
100 98
101 ================================================================================ 99 ================================================================================
102 The Metrics Daemon: metrics_daemon 100 The Metrics Daemon: metrics_daemon
103 ================================================================================ 101 ================================================================================
104 102
105 metrics_daemon is a daemon that runs in the background on the target 103 metrics_daemon is a daemon that runs in the background on the target platform
106 platform and is intended for passive or ongoing metrics collection, or 104 and is intended for passive or ongoing metrics collection, or metrics collection
107 metrics collection requiring feedback from multiple modules. For 105 requiring feedback from multiple modules. For example, it listens to D-Bus
108 example, it listens to D-Bus signals related to the user session and 106 signals related to the user session and screen saver states to determine if the
109 screen saver states to determine if the user is actively using the 107 user is actively using the device or not and generates the corresponding
110 device or not and generates the corresponding data. The metrics daemon 108 data. The metrics daemon uses libmetrics to send the data to Chrome.
111 uses libmetrics to send the data to Chrome.
112 109
113 The recommended way to generate metrics data from a module is to link 110 The recommended way to generate metrics data from a module is to link and use
114 and use libmetrics directly. However, the module could instead send 111 libmetrics directly. However, the module could instead send signals to or
115 signals to or communicate in some alternative way with the metrics 112 communicate in some alternative way with the metrics daemon. Then the metrics
116 daemon. Then the metrics daemon needs to monitor for the relevant 113 daemon needs to monitor for the relevant events and take appropriate action --
117 events and take appropriate action -- for example, aggregate data and 114 for example, aggregate data and send the histogram samples.
118 send the histogram samples.
119 115
120 116
121 ================================================================================ 117 ================================================================================
122 FAQ 118 FAQ
123 ================================================================================ 119 ================================================================================
124 120
125 Q. What should my histogram's |min| and |max| values be set at? 121 Q. What should my histogram's |min| and |max| values be set at?
126 122
127 A. You should set the values to a range that covers the vast majority 123 A. You should set the values to a range that covers the vast majority of samples
128 of samples that would appear in the field. Note that samples below 124 that would appear in the field. Note that samples below the |min| will still
129 the |min| will still be collected in the underflow bucket and 125 be collected in the underflow bucket and samples above the |max| will end up
130 samples above the |max| will end up in the overflow bucket. Also, 126 in the overflow bucket. Also, the reported mean of the data will be correct
131 the reported mean of the data will be correct regardless of the 127 regardless of the range.
132 range.
133 128
134 Q. How many buckets should I use in my histogram? 129 Q. How many buckets should I use in my histogram?
135 130
136 A. You should allocate as many buckets as necessary to perform proper 131 A. You should allocate as many buckets as necessary to perform proper analysis
137 analysis on the collected data. Note, however, that the memory 132 on the collected data. Note, however, that the memory allocated in Chrome for
138 allocated in Chrome for each histogram is proportional to the 133 each histogram is proportional to the number of buckets. Therefore, it is
139 number of buckets. Therefore, it is strongly recommended to keep 134 strongly recommended to keep this number low (e.g., 50 is normal, while 100
140 this number low (e.g., 50 is normal, while 100 is probably high). 135 is probably high).
141 136
142 Q. When should I use an enumeration (linear) histogram vs. a regular 137 Q. When should I use an enumeration (linear) histogram vs. a regular
143 (exponential) histogram? 138 (exponential) histogram?
144 139
145 A. Enumeration histograms should really be used only for sampling 140 A. Enumeration histograms should really be used only for sampling enumerated
146 enumerated events and, in some cases, percentages. Normally, you 141 events and, in some cases, percentages. Normally, you should use a regular
147 should use a regular histogram with exponential bucket layout that 142 histogram with exponential bucket layout that provides higher resolution at
148 provides higher resolution at the low end of the range and lower 143 the low end of the range and lower resolution at the high end. Regular
149 resolution at the high end. Regular histograms are generally used 144 histograms are generally used for collecting performance data (e.g., timing,
150 for collecting performance data (e.g., timing, memory usage, power) 145 memory usage, power) as well as aggregated event counts.
151 as well as aggregated event counts.
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698