Index: base/android/record_histogram.cc |
diff --git a/base/android/record_histogram.cc b/base/android/record_histogram.cc |
index 0df0487ce8eaef337f6f2df2b62a5b4fad005e1a..8b7f7bd1d96df21b94b6d36d705dc0647735a071 100644 |
--- a/base/android/record_histogram.cc |
+++ b/base/android/record_histogram.cc |
@@ -60,6 +60,31 @@ class HistogramCache { |
return InsertLocked(j_histogram_key, histogram); |
} |
+ HistogramBase* CountHistogram(JNIEnv* env, |
+ jstring j_histogram_name, |
+ jint j_histogram_key) { |
+ // These values are based on the hard-coded constants in the |
+ // UMA_HISTOGRAM_COUNTS macro from base/metrics/histogram_macros.h. |
+ const int histogram_min = 1; |
+ const int histogram_max = 1000000; |
+ const int histogram_num_buckets = 50; |
+ |
+ DCHECK(j_histogram_name); |
+ DCHECK(j_histogram_key); |
+ HistogramBase* histogram = FindLocked(j_histogram_key); |
+ if (histogram) { |
+ DCHECK(histogram->HasConstructionArguments(histogram_min, histogram_max, |
+ histogram_num_buckets)); |
+ return histogram; |
+ } |
+ |
+ std::string histogram_name = ConvertJavaStringToUTF8(env, j_histogram_name); |
+ histogram = Histogram::FactoryGet(histogram_name, histogram_min, |
+ histogram_max, histogram_num_buckets, |
+ HistogramBase::kUmaTargetedHistogramFlag); |
+ return InsertLocked(j_histogram_key, histogram); |
+ } |
+ |
HistogramBase* CustomTimesHistogram(JNIEnv* env, |
jstring j_histogram_name, |
jint j_histogram_key, |
@@ -133,6 +158,18 @@ void RecordEnumeratedHistogram(JNIEnv* env, |
->Add(sample); |
} |
+void RecordCountHistogram(JNIEnv* env, |
+ jclass clazz, |
+ jstring j_histogram_name, |
+ jint j_histogram_key, |
+ jint j_sample) { |
+ int sample = static_cast<int>(j_sample); |
+ |
+ g_histograms.Get() |
+ .CountHistogram(env, j_histogram_name, j_histogram_key) |
+ ->Add(sample); |
+} |
+ |
void RecordCustomTimesHistogramMilliseconds(JNIEnv* env, |
jclass clazz, |
jstring j_histogram_name, |