| Index: base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
|
| diff --git a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
|
| index 050708ca5c73cffdb6b1a5f28ed21624c097ace9..08c314f156eb8fa1ba4ef7386fd528099d386033 100644
|
| --- a/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
|
| +++ b/base/android/java/src/org/chromium/base/metrics/RecordHistogram.java
|
| @@ -7,16 +7,21 @@ package org.chromium.base.metrics;
|
| import org.chromium.base.JNINamespace;
|
| import org.chromium.base.VisibleForTesting;
|
|
|
| +import java.util.concurrent.TimeUnit;
|
| +
|
| /**
|
| - * Java API for recording UMA histograms. As opposed to macros used in native code, these calls are
|
| - * not caching the histogram pointer; also, the JNI calls are relatively costly - avoid calling
|
| - * these methods in performance-critical code.
|
| + * Java API for recording UMA histograms. Internally, the histogram will be cached by
|
| + * System.identityHashCode(name).
|
| + *
|
| + * Note: the JNI calls are relatively costly - avoid calling these methods in performance-critical
|
| + * code.
|
| */
|
| @JNINamespace("base::android")
|
| public class RecordHistogram {
|
| /**
|
| * Records a sample in a boolean UMA histogram of the given name. Boolean histogram has two
|
| - * buckets, corresponding to success (true) and failure (false).
|
| + * buckets, corresponding to success (true) and failure (false). This is the Java equivalent of
|
| + * the UMA_HISTOGRAM_BOOLEAN C++ macro.
|
| * @param name name of the histogram
|
| * @param sample sample to be recorded, either true or false
|
| */
|
| @@ -26,7 +31,8 @@ public class RecordHistogram {
|
|
|
| /**
|
| * Records a sample in an enumerated histogram of the given name and boundary. Note that
|
| - * |boundary| identifies the histogram - it should be the same at every invocation.
|
| + * |boundary| identifies the histogram - it should be the same at every invocation. This is the
|
| + * Java equivalent of the UMA_HISTOGRAM_ENUMERATION C++ macro.
|
| * @param name name of the histogram
|
| * @param sample sample to be recorded, at least 0 and at most |boundary| - 1
|
| * @param boundary upper bound for legal sample values - all sample values has to be strictly
|
| @@ -37,6 +43,64 @@ public class RecordHistogram {
|
| }
|
|
|
| /**
|
| + * Records a sample in a histogram of times. Useful for recording short durations. This is the
|
| + * Java equivalent of the UMA_HISTOGRAM_TIMES C++ macro.
|
| + * @param name name of the histogram
|
| + * @param duration duration to be recorded
|
| + * @param timeUnit the unit of the duration argument
|
| + */
|
| + public static void recordTimesHistogram(String name, long duration, TimeUnit timeUnit) {
|
| + recordCustomTimesHistogramMilliseconds(
|
| + name, timeUnit.toMillis(duration), 1, TimeUnit.SECONDS.toMillis(10), 50);
|
| + }
|
| +
|
| + /**
|
| + * Records a sample in a histogram of times. Useful for recording medium durations. This is the
|
| + * Java equivalent of the UMA_HISTOGRAM_MEDIUM_TIMES C++ macro.
|
| + * @param name name of the histogram
|
| + * @param duration duration to be recorded
|
| + * @param timeUnit the unit of the duration argument
|
| + */
|
| + public static void recordMediumTimesHistogram(String name, long duration, TimeUnit timeUnit) {
|
| + recordCustomTimesHistogramMilliseconds(
|
| + name, timeUnit.toMillis(duration), 10, TimeUnit.MINUTES.toMillis(3), 50);
|
| + }
|
| +
|
| + /**
|
| + * Records a sample in a histogram of times. Useful for recording long durations. This is the
|
| + * Java equivalent of the UMA_HISTOGRAM_LONG_TIMES C++ macro.
|
| + * @param name name of the histogram
|
| + * @param duration duration to be recorded
|
| + * @param timeUnit the unit of the duration argument
|
| + */
|
| + public static void recordLongTimesHistogram(String name, long duration, TimeUnit timeUnit) {
|
| + recordCustomTimesHistogramMilliseconds(
|
| + name, timeUnit.toMillis(duration), 1, TimeUnit.HOURS.toMillis(1), 50);
|
| + }
|
| +
|
| + /**
|
| + * Records a sample in a histogram of times with custom buckets. This is the Java equivalent of
|
| + * the UMA_HISTOGRAM_CUSTOM_TIMES C++ macro.
|
| + * @param name name of the histogram
|
| + * @param duration duration to be recorded
|
| + * @param min the minimum bucket value
|
| + * @param max the maximum bucket value
|
| + * @param timeUnit the unit of the duration, min, and max arguments
|
| + * @param numBuckets the number of buckets
|
| + */
|
| + public static void recordCustomTimesHistogram(
|
| + String name, long duration, long min, long max, TimeUnit timeUnit, int numBuckets) {
|
| + recordCustomTimesHistogramMilliseconds(name, timeUnit.toMillis(duration),
|
| + timeUnit.toMillis(min), timeUnit.toMillis(max), numBuckets);
|
| + }
|
| +
|
| + private static void recordCustomTimesHistogramMilliseconds(
|
| + String name, long duration, long min, long max, int numBuckets) {
|
| + nativeRecordCustomTimesHistogramMilliseconds(
|
| + name, System.identityHashCode(name), duration, min, max, numBuckets);
|
| + }
|
| +
|
| + /**
|
| * Returns the number of samples recorded in the given bucket of the given histogram.
|
| * @param name name of the histogram to look up
|
| * @param sample the bucket containing this sample value will be looked up
|
| @@ -53,6 +117,9 @@ public class RecordHistogram {
|
| nativeInitialize();
|
| }
|
|
|
| + private static native void nativeRecordCustomTimesHistogramMilliseconds(
|
| + String name, int key, long duration, long min, long max, int numBuckets);
|
| +
|
| private static native void nativeRecordBooleanHistogram(String name, int key, boolean sample);
|
| private static native void nativeRecordEnumeratedHistogram(
|
| String name, int key, int sample, int boundary);
|
|
|