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

Side by Side Diff: base/android/java/src/org/chromium/base/metrics/RecordHistogram.java

Issue 1597273005: Move ChromiumMultiDex to BuildConfig. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Prevent jni exception in release. Created 4 years, 11 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium 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 package org.chromium.base.metrics; 5 package org.chromium.base.metrics;
6 6
7 import org.chromium.base.ChromiumBuildConfig;
8 import org.chromium.base.Log;
7 import org.chromium.base.VisibleForTesting; 9 import org.chromium.base.VisibleForTesting;
8 import org.chromium.base.annotations.JNINamespace; 10 import org.chromium.base.annotations.JNINamespace;
11 import org.chromium.base.annotations.RemovableInRelease;
9 12
10 import java.util.concurrent.TimeUnit; 13 import java.util.concurrent.TimeUnit;
11 14
12 /** 15 /**
13 * Java API for recording UMA histograms. Internally, the histogram will be cach ed by 16 * Java API for recording UMA histograms. Internally, the histogram will be cach ed by
14 * System.identityHashCode(name). 17 * System.identityHashCode(name).
15 * 18 *
16 * Note: the JNI calls are relatively costly - avoid calling these methods in pe rformance-critical 19 * Note: the JNI calls are relatively costly - avoid calling these methods in pe rformance-critical
17 * code. 20 * code.
18 */ 21 */
19 @JNINamespace("base::android") 22 @JNINamespace("base::android")
20 public class RecordHistogram { 23 public class RecordHistogram {
24 private static final String TAG = "RecordHistogram";
25
26 private static boolean sNativeInitialized = false;
27
28 @RemovableInRelease
29 private static void raiseExceptionInDebug(String name) {
jbudorick 2016/01/21 01:51:15 This no longer appears to be called.
30 throw new RuntimeException("Calling RecordHistogram for " + name + " bef ore initialized.");
31 }
32
33 /**
34 * Ensures that no jni exception is thrown in release builds when histograms are used before
35 * initialization. Just log a warning instead.
36 * @param name Name of the histogram.
37 * @return Whether histograms have been initialized.
38 */
39 private static boolean isNativeInitialized(String name) {
40 if (!sNativeInitialized) {
41 if (!ChromiumBuildConfig.sIsDebug) {
42 Log.w(TAG, "Calling RecordHistogram for %s before initialized.", name);
43 }
44 }
45 return sNativeInitialized;
46 }
47
21 /** 48 /**
22 * Records a sample in a boolean UMA histogram of the given name. Boolean hi stogram has two 49 * Records a sample in a boolean UMA histogram of the given name. Boolean hi stogram has two
23 * buckets, corresponding to success (true) and failure (false). This is the Java equivalent of 50 * buckets, corresponding to success (true) and failure (false). This is the Java equivalent of
24 * the UMA_HISTOGRAM_BOOLEAN C++ macro. 51 * the UMA_HISTOGRAM_BOOLEAN C++ macro.
25 * @param name name of the histogram 52 * @param name name of the histogram
26 * @param sample sample to be recorded, either true or false 53 * @param sample sample to be recorded, either true or false
27 */ 54 */
28 public static void recordBooleanHistogram(String name, boolean sample) { 55 public static void recordBooleanHistogram(String name, boolean sample) {
29 nativeRecordBooleanHistogram(name, System.identityHashCode(name), sample ); 56 if (isNativeInitialized(name)) {
57 nativeRecordBooleanHistogram(name, System.identityHashCode(name), sa mple);
58 }
30 } 59 }
31 60
32 /** 61 /**
33 * Records a sample in an enumerated histogram of the given name and boundar y. Note that 62 * Records a sample in an enumerated histogram of the given name and boundar y. Note that
34 * |boundary| identifies the histogram - it should be the same at every invo cation. This is the 63 * |boundary| identifies the histogram - it should be the same at every invo cation. This is the
35 * Java equivalent of the UMA_HISTOGRAM_ENUMERATION C++ macro. 64 * Java equivalent of the UMA_HISTOGRAM_ENUMERATION C++ macro.
36 * @param name name of the histogram 65 * @param name name of the histogram
37 * @param sample sample to be recorded, at least 0 and at most |boundary| - 1 66 * @param sample sample to be recorded, at least 0 and at most |boundary| - 1
38 * @param boundary upper bound for legal sample values - all sample values h ave to be strictly 67 * @param boundary upper bound for legal sample values - all sample values h ave to be strictly
39 * lower than |boundary| 68 * lower than |boundary|
40 */ 69 */
41 public static void recordEnumeratedHistogram(String name, int sample, int bo undary) { 70 public static void recordEnumeratedHistogram(String name, int sample, int bo undary) {
42 nativeRecordEnumeratedHistogram(name, System.identityHashCode(name), sam ple, boundary); 71 if (isNativeInitialized(name)) {
72 nativeRecordEnumeratedHistogram(name, System.identityHashCode(name), sample, boundary);
73 }
43 } 74 }
44 75
45 /** 76 /**
46 * Records a sample in a count histogram. This is the Java equivalent of the 77 * Records a sample in a count histogram. This is the Java equivalent of the
47 * UMA_HISTOGRAM_COUNTS C++ macro. 78 * UMA_HISTOGRAM_COUNTS C++ macro.
48 * @param name name of the histogram 79 * @param name name of the histogram
49 * @param sample sample to be recorded, at least 1 and at most 999999 80 * @param sample sample to be recorded, at least 1 and at most 999999
50 */ 81 */
51 public static void recordCountHistogram(String name, int sample) { 82 public static void recordCountHistogram(String name, int sample) {
52 recordCustomCountHistogram(name, sample, 1, 1000000, 50); 83 recordCustomCountHistogram(name, sample, 1, 1000000, 50);
(...skipping 23 matching lines...) Expand all
76 * Records a sample in a count histogram. This is the Java equivalent of the 107 * Records a sample in a count histogram. This is the Java equivalent of the
77 * UMA_HISTOGRAM_CUSTOM_COUNTS C++ macro. 108 * UMA_HISTOGRAM_CUSTOM_COUNTS C++ macro.
78 * @param name name of the histogram 109 * @param name name of the histogram
79 * @param sample sample to be recorded, at least |min| and at most |max| - 1 110 * @param sample sample to be recorded, at least |min| and at most |max| - 1
80 * @param min lower bound for expected sample values 111 * @param min lower bound for expected sample values
81 * @param max upper bounds for expected sample values 112 * @param max upper bounds for expected sample values
82 * @param numBuckets the number of buckets 113 * @param numBuckets the number of buckets
83 */ 114 */
84 public static void recordCustomCountHistogram( 115 public static void recordCustomCountHistogram(
85 String name, int sample, int min, int max, int numBuckets) { 116 String name, int sample, int min, int max, int numBuckets) {
86 nativeRecordCustomCountHistogram( 117 if (isNativeInitialized(name)) {
87 name, System.identityHashCode(name), sample, min, max, numBucket s); 118 nativeRecordCustomCountHistogram(
119 name, System.identityHashCode(name), sample, min, max, numBu ckets);
120 }
88 } 121 }
89 122
90 /** 123 /**
91 * Records a sample in a linear histogram. This is the Java equivalent for u sing 124 * Records a sample in a linear histogram. This is the Java equivalent for u sing
92 * base::LinearHistogram. 125 * base::LinearHistogram.
93 * @param name name of the histogram 126 * @param name name of the histogram
94 * @param sample sample to be recorded, at least |min| and at most |max| - 1 . 127 * @param sample sample to be recorded, at least |min| and at most |max| - 1 .
95 * @param min lower bound for expected sample values, should be at least 1. 128 * @param min lower bound for expected sample values, should be at least 1.
96 * @param max upper bounds for expected sample values 129 * @param max upper bounds for expected sample values
97 * @param numBuckets the number of buckets 130 * @param numBuckets the number of buckets
98 */ 131 */
99 public static void recordLinearCountHistogram( 132 public static void recordLinearCountHistogram(
100 String name, int sample, int min, int max, int numBuckets) { 133 String name, int sample, int min, int max, int numBuckets) {
101 nativeRecordLinearCountHistogram( 134 if (isNativeInitialized(name)) {
102 name, System.identityHashCode(name), sample, min, max, numBucket s); 135 nativeRecordLinearCountHistogram(
136 name, System.identityHashCode(name), sample, min, max, numBu ckets);
137 }
103 } 138 }
104 139
105 /** 140 /**
106 * Records a sample in a percentage histogram. This is the Java equivalent o f the 141 * Records a sample in a percentage histogram. This is the Java equivalent o f the
107 * UMA_HISTOGRAM_PERCENTAGE C++ macro. 142 * UMA_HISTOGRAM_PERCENTAGE C++ macro.
108 * @param name name of the histogram 143 * @param name name of the histogram
109 * @param sample sample to be recorded, at least 0 and at most 100. 144 * @param sample sample to be recorded, at least 0 and at most 100.
110 */ 145 */
111 public static void recordPercentageHistogram(String name, int sample) { 146 public static void recordPercentageHistogram(String name, int sample) {
112 nativeRecordEnumeratedHistogram(name, System.identityHashCode(name), sam ple, 101); 147 if (isNativeInitialized(name)) {
148 nativeRecordEnumeratedHistogram(name, System.identityHashCode(name), sample, 101);
149 }
113 } 150 }
114 151
115 /** 152 /**
116 * Records a sparse histogram. This is the Java equivalent of UMA_HISTOGRAM_S PARSE_SLOWLY. 153 * Records a sparse histogram. This is the Java equivalent of UMA_HISTOGRAM_S PARSE_SLOWLY.
117 * @param name name of the histogram 154 * @param name name of the histogram
118 * @param sample sample to be recorded. All values of |sample| are valid, inc luding negative 155 * @param sample sample to be recorded. All values of |sample| are valid, inc luding negative
119 * values. 156 * values.
120 */ 157 */
121 public static void recordSparseSlowlyHistogram(String name, int sample) { 158 public static void recordSparseSlowlyHistogram(String name, int sample) {
122 nativeRecordSparseHistogram(name, System.identityHashCode(name), sample) ; 159 if (isNativeInitialized(name)) {
160 nativeRecordSparseHistogram(name, System.identityHashCode(name), sam ple);
161 }
123 } 162 }
124 163
125 /** 164 /**
126 * Records a sample in a histogram of times. Useful for recording short dura tions. This is the 165 * Records a sample in a histogram of times. Useful for recording short dura tions. This is the
127 * Java equivalent of the UMA_HISTOGRAM_TIMES C++ macro. 166 * Java equivalent of the UMA_HISTOGRAM_TIMES C++ macro.
128 * @param name name of the histogram 167 * @param name name of the histogram
129 * @param duration duration to be recorded 168 * @param duration duration to be recorded
130 * @param timeUnit the unit of the duration argument 169 * @param timeUnit the unit of the duration argument
131 */ 170 */
132 public static void recordTimesHistogram(String name, long duration, TimeUnit timeUnit) { 171 public static void recordTimesHistogram(String name, long duration, TimeUnit timeUnit) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 * @param numBuckets the number of buckets 208 * @param numBuckets the number of buckets
170 */ 209 */
171 public static void recordCustomTimesHistogram( 210 public static void recordCustomTimesHistogram(
172 String name, long duration, long min, long max, TimeUnit timeUnit, i nt numBuckets) { 211 String name, long duration, long min, long max, TimeUnit timeUnit, i nt numBuckets) {
173 recordCustomTimesHistogramMilliseconds(name, timeUnit.toMillis(duration) , 212 recordCustomTimesHistogramMilliseconds(name, timeUnit.toMillis(duration) ,
174 timeUnit.toMillis(min), timeUnit.toMillis(max), numBuckets); 213 timeUnit.toMillis(min), timeUnit.toMillis(max), numBuckets);
175 } 214 }
176 215
177 private static void recordCustomTimesHistogramMilliseconds( 216 private static void recordCustomTimesHistogramMilliseconds(
178 String name, long duration, long min, long max, int numBuckets) { 217 String name, long duration, long min, long max, int numBuckets) {
179 nativeRecordCustomTimesHistogramMilliseconds( 218 if (isNativeInitialized(name)) {
180 name, System.identityHashCode(name), duration, min, max, numBuck ets); 219 nativeRecordCustomTimesHistogramMilliseconds(
220 name, System.identityHashCode(name), duration, min, max, num Buckets);
221 }
181 } 222 }
182 223
183 /** 224 /**
184 * Returns the number of samples recorded in the given bucket of the given h istogram. 225 * Returns the number of samples recorded in the given bucket of the given h istogram.
185 * @param name name of the histogram to look up 226 * @param name name of the histogram to look up
186 * @param sample the bucket containing this sample value will be looked up 227 * @param sample the bucket containing this sample value will be looked up
187 */ 228 */
188 @VisibleForTesting 229 @VisibleForTesting
189 public static int getHistogramValueCountForTesting(String name, int sample) { 230 public static int getHistogramValueCountForTesting(String name, int sample) {
231 // Should fail if native is not loaded since this is testing-only.
190 return nativeGetHistogramValueCountForTesting(name, sample); 232 return nativeGetHistogramValueCountForTesting(name, sample);
191 } 233 }
192 234
193 /** 235 /**
194 * Initializes the metrics system. 236 * Initializes the metrics system.
195 */ 237 */
196 public static void initialize() { 238 public static void initialize() {
197 nativeInitialize(); 239 nativeInitialize();
240 sNativeInitialized = true;
198 } 241 }
199 242
200 private static native void nativeRecordCustomTimesHistogramMilliseconds( 243 private static native void nativeRecordCustomTimesHistogramMilliseconds(
201 String name, int key, long duration, long min, long max, int numBuck ets); 244 String name, int key, long duration, long min, long max, int numBuck ets);
202 245
203 private static native void nativeRecordBooleanHistogram(String name, int key , boolean sample); 246 private static native void nativeRecordBooleanHistogram(String name, int key , boolean sample);
204 private static native void nativeRecordEnumeratedHistogram( 247 private static native void nativeRecordEnumeratedHistogram(
205 String name, int key, int sample, int boundary); 248 String name, int key, int sample, int boundary);
206 private static native void nativeRecordCustomCountHistogram( 249 private static native void nativeRecordCustomCountHistogram(
207 String name, int key, int sample, int min, int max, int numBuckets); 250 String name, int key, int sample, int min, int max, int numBuckets);
208 private static native void nativeRecordLinearCountHistogram( 251 private static native void nativeRecordLinearCountHistogram(
209 String name, int key, int sample, int min, int max, int numBuckets); 252 String name, int key, int sample, int min, int max, int numBuckets);
210 private static native void nativeRecordSparseHistogram(String name, int key, int sample); 253 private static native void nativeRecordSparseHistogram(String name, int key, int sample);
211 254
212 private static native int nativeGetHistogramValueCountForTesting(String name , int sample); 255 private static native int nativeGetHistogramValueCountForTesting(String name , int sample);
213 private static native void nativeInitialize(); 256 private static native void nativeInitialize();
214 } 257 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698