| Index: README
|
| diff --git a/README b/README
|
| index 677e6b75c5fa88d6148d8189a11ba2d20c75fdbf..1519648373c2baf4d8ceb1d78f0d1df1a376ef8a 100644
|
| --- a/README
|
| +++ b/README
|
| @@ -2,35 +2,32 @@ Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| Use of this source code is governed by a BSD-style license that can be
|
| found in the LICENSE file.
|
|
|
| -The Chrome OS "metrics" package contains utilities for client-side
|
| -user metric collection. The collected data is sent to Chrome for
|
| -transport to the UMA server.
|
| +The Chrome OS "metrics" package contains utilities for client-side user metric
|
| +collection. The collected data is sent to Chrome for transport to the UMA
|
| +server.
|
|
|
|
|
| ================================================================================
|
| The Metrics Library: libmetrics
|
| ================================================================================
|
|
|
| -libmetrics is a small library that implements the basic C and C++ API
|
| -for metrics collection. All metrics collection is funneled through
|
| -this library. The easiest and recommended way for a client-side module
|
| -to collect user metrics is to link libmetrics and use its APIs to send
|
| -metrics to Chrome for transport to UMA. In order to use the library in
|
| -a module, you need to do the following:
|
| +libmetrics is a small library that implements the basic C and C++ API for
|
| +metrics collection. All metrics collection is funneled through this library. The
|
| +easiest and recommended way for a client-side module to collect user metrics is
|
| +to link libmetrics and use its APIs to send metrics to Chrome for transport to
|
| +UMA. In order to use the library in a module, you need to do the following:
|
|
|
| -- Add a dependence (DEPEND and RDEPEND) on chromeos-base/metrics to
|
| - the module's ebuild.
|
| +- Add a dependence (DEPEND and RDEPEND) on chromeos-base/metrics to the module's
|
| + ebuild.
|
|
|
| -- Link the module with libmetrics (for example, by passing -lmetrics
|
| - to the module's link command). Both libmetrics.so and libmetrics.a
|
| - are built and installed under $SYSROOT/usr/lib/. Note that by
|
| - default -lmetrics will link against libmetrics.so, which is
|
| - preferred.
|
| +- Link the module with libmetrics (for example, by passing -lmetrics to the
|
| + module's link command). Both libmetrics.so and libmetrics.a are built and
|
| + installed under $SYSROOT/usr/lib/. Note that by default -lmetrics will link
|
| + against libmetrics.so, which is preferred.
|
|
|
| - To access the metrics library API in the module, include the
|
| <metrics/metrics_library.h> header file. The file is installed in
|
| - $SYSROOT/usr/include/ when the metrics library is built and
|
| - installed.
|
| + $SYSROOT/usr/include/ when the metrics library is built and installed.
|
|
|
| - The API includes two methods:
|
|
|
| @@ -42,15 +39,18 @@ a module, you need to do the following:
|
| int max)
|
| sends a sample for an enumeration (linear) histogram.
|
|
|
| - Before using these methods, a MetricsLibrary object needs to be
|
| - constructed and initialized through its Init method. See the
|
| - complete API documentation in metrics_library.h under
|
| - src/platform/metrics/.
|
| + Before using these methods, a MetricsLibrary object needs to be constructed
|
| + and initialized through its Init method. See the complete API documentation in
|
| + metrics_library.h under src/platform/metrics/.
|
|
|
| For more information on the C API see c_metrics_library.h.
|
|
|
| -- On the target platform, shortly after the sample is sent it should
|
| - be visible in Chrome through "about:histograms".
|
| +- Samples are sent to Chrome only if the "/home/chronos/Consent To Send Stats"
|
| + file exists (see the AreMetricsEnabled API method). Normally, this file is
|
| + created when the user opts into metrics collection.
|
| +
|
| +- On the target platform, shortly after the sample is sent, it should be visible
|
| + in Chrome through "about:histograms".
|
|
|
|
|
| ================================================================================
|
| @@ -67,55 +67,51 @@ Network.TimeToDrop
|
| Server Side
|
| ================================================================================
|
|
|
| -If the histogram data is visible in about:histograms, it will be sent
|
| -by an official Chrome build to UMA, assuming the user has opted into
|
| -metrics collection. To make the histogram visible on
|
| -"chromedashboard", the histogram wiki needs to be updated (steps 2 and
|
| -3 after following the "Details on how to add your own histograms" link
|
| -under the Histograms tab). Include the string "Chrome OS" in the
|
| -histogram description so that it's easier to distinguish Chrome OS
|
| -specific metrics from general Chrome histograms.
|
| +If the histogram data is visible in about:histograms, it will be sent by an
|
| +official Chrome build to UMA, assuming the user has opted into metrics
|
| +collection. To make the histogram visible on "chromedashboard", the histogram
|
| +description XML file needs to be updated (steps 2 and 3 after following the
|
| +"Details on how to add your own histograms" link under the Histograms tab).
|
| +Include the string "Chrome OS" in the histogram description so that it's easier
|
| +to distinguish Chrome OS specific metrics from general Chrome histograms.
|
|
|
| -The UMA server logs and keeps the collected field data even if the
|
| -metric's name is not added to the histogram wiki. However, the
|
| -dashboard histogram for that metric will show field data as of the
|
| -histogram wiki update date; it will not include data for older
|
| -dates. If past data needs to be displayed, manual server-side
|
| -intervention is required. In other words, one should assume that field
|
| -data collection starts only after the histogram wiki has been updated.
|
| +The UMA server logs and keeps the collected field data even if the metric's name
|
| +is not added to the histogram XML. However, the dashboard histogram for that
|
| +metric will show field data as of the histogram XML update date; it will not
|
| +include data for older dates. If past data needs to be displayed, manual
|
| +server-side intervention is required. In other words, one should assume that
|
| +field data collection starts only after the histogram XML has been updated.
|
|
|
|
|
| ================================================================================
|
| The Metrics Client: metrics_client
|
| ================================================================================
|
|
|
| -metrics_client is a simple shell command-line utility for sending
|
| -histogram samples. It's installed under /usr/bin on the target
|
| -platform and uses libmetrics to send the data to Chrome. The utility
|
| -is useful for generating metrics from shell scripts.
|
| +metrics_client is a simple shell command-line utility for sending histogram
|
| +samples. It's installed under /usr/bin on the target platform and uses
|
| +libmetrics to send the data to Chrome. The utility is useful for generating
|
| +metrics from shell scripts.
|
|
|
| -For usage information and command-line options, run "metrics_client"
|
| -on the target platform or look for "Usage:" in metrics_client.cc.
|
| +For usage information and command-line options, run "metrics_client" on the
|
| +target platform or look for "Usage:" in metrics_client.cc.
|
|
|
|
|
| ================================================================================
|
| The Metrics Daemon: metrics_daemon
|
| ================================================================================
|
|
|
| -metrics_daemon is a daemon that runs in the background on the target
|
| -platform and is intended for passive or ongoing metrics collection, or
|
| -metrics collection requiring feedback from multiple modules. For
|
| -example, it listens to D-Bus signals related to the user session and
|
| -screen saver states to determine if the user is actively using the
|
| -device or not and generates the corresponding data. The metrics daemon
|
| -uses libmetrics to send the data to Chrome.
|
| +metrics_daemon is a daemon that runs in the background on the target platform
|
| +and is intended for passive or ongoing metrics collection, or metrics collection
|
| +requiring feedback from multiple modules. For example, it listens to D-Bus
|
| +signals related to the user session and screen saver states to determine if the
|
| +user is actively using the device or not and generates the corresponding
|
| +data. The metrics daemon uses libmetrics to send the data to Chrome.
|
|
|
| -The recommended way to generate metrics data from a module is to link
|
| -and use libmetrics directly. However, the module could instead send
|
| -signals to or communicate in some alternative way with the metrics
|
| -daemon. Then the metrics daemon needs to monitor for the relevant
|
| -events and take appropriate action -- for example, aggregate data and
|
| -send the histogram samples.
|
| +The recommended way to generate metrics data from a module is to link and use
|
| +libmetrics directly. However, the module could instead send signals to or
|
| +communicate in some alternative way with the metrics daemon. Then the metrics
|
| +daemon needs to monitor for the relevant events and take appropriate action --
|
| +for example, aggregate data and send the histogram samples.
|
|
|
|
|
| ================================================================================
|
| @@ -124,28 +120,26 @@ FAQ
|
|
|
| Q. What should my histogram's |min| and |max| values be set at?
|
|
|
| -A. You should set the values to a range that covers the vast majority
|
| - of samples that would appear in the field. Note that samples below
|
| - the |min| will still be collected in the underflow bucket and
|
| - samples above the |max| will end up in the overflow bucket. Also,
|
| - the reported mean of the data will be correct regardless of the
|
| - range.
|
| +A. You should set the values to a range that covers the vast majority of samples
|
| + that would appear in the field. Note that samples below the |min| will still
|
| + be collected in the underflow bucket and samples above the |max| will end up
|
| + in the overflow bucket. Also, the reported mean of the data will be correct
|
| + regardless of the range.
|
|
|
| Q. How many buckets should I use in my histogram?
|
|
|
| -A. You should allocate as many buckets as necessary to perform proper
|
| - analysis on the collected data. Note, however, that the memory
|
| - allocated in Chrome for each histogram is proportional to the
|
| - number of buckets. Therefore, it is strongly recommended to keep
|
| - this number low (e.g., 50 is normal, while 100 is probably high).
|
| +A. You should allocate as many buckets as necessary to perform proper analysis
|
| + on the collected data. Note, however, that the memory allocated in Chrome for
|
| + each histogram is proportional to the number of buckets. Therefore, it is
|
| + strongly recommended to keep this number low (e.g., 50 is normal, while 100
|
| + is probably high).
|
|
|
| Q. When should I use an enumeration (linear) histogram vs. a regular
|
| (exponential) histogram?
|
|
|
| -A. Enumeration histograms should really be used only for sampling
|
| - enumerated events and, in some cases, percentages. Normally, you
|
| - should use a regular histogram with exponential bucket layout that
|
| - provides higher resolution at the low end of the range and lower
|
| - resolution at the high end. Regular histograms are generally used
|
| - for collecting performance data (e.g., timing, memory usage, power)
|
| - as well as aggregated event counts.
|
| +A. Enumeration histograms should really be used only for sampling enumerated
|
| + events and, in some cases, percentages. Normally, you should use a regular
|
| + histogram with exponential bucket layout that provides higher resolution at
|
| + the low end of the range and lower resolution at the high end. Regular
|
| + histograms are generally used for collecting performance data (e.g., timing,
|
| + memory usage, power) as well as aggregated event counts.
|
|
|