| Index: base/android/record_histogram.cc
 | 
| diff --git a/base/android/record_histogram.cc b/base/android/record_histogram.cc
 | 
| index 8b7f7bd1d96df21b94b6d36d705dc0647735a071..9a68deca54f420aa2136608dc9b097b2f08fb27a 100644
 | 
| --- a/base/android/record_histogram.cc
 | 
| +++ b/base/android/record_histogram.cc
 | 
| @@ -10,6 +10,7 @@
 | 
|  #include "base/android/jni_string.h"
 | 
|  #include "base/lazy_instance.h"
 | 
|  #include "base/metrics/histogram.h"
 | 
| +#include "base/metrics/sparse_histogram.h"
 | 
|  #include "base/metrics/statistics_recorder.h"
 | 
|  #include "base/synchronization/lock.h"
 | 
|  #include "base/time/time.h"
 | 
| @@ -60,28 +61,42 @@ 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;
 | 
| -
 | 
| +  HistogramBase* CustomCountHistogram(JNIEnv* env,
 | 
| +                                      jstring j_histogram_name,
 | 
| +                                      jint j_histogram_key,
 | 
| +                                      jint j_min,
 | 
| +                                      jint j_max,
 | 
| +                                      jint j_num_buckets) {
 | 
|      DCHECK(j_histogram_name);
 | 
|      DCHECK(j_histogram_key);
 | 
| +    int64 min = static_cast<int64>(j_min);
 | 
| +    int64 max = static_cast<int64>(j_max);
 | 
| +    int num_buckets = static_cast<int>(j_num_buckets);
 | 
|      HistogramBase* histogram = FindLocked(j_histogram_key);
 | 
|      if (histogram) {
 | 
| -      DCHECK(histogram->HasConstructionArguments(histogram_min, histogram_max,
 | 
| -                                                 histogram_num_buckets));
 | 
| +      DCHECK(histogram->HasConstructionArguments(min, max, 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);
 | 
| +    histogram =
 | 
| +        Histogram::FactoryGet(histogram_name, min, max, num_buckets,
 | 
| +                              HistogramBase::kUmaTargetedHistogramFlag);
 | 
| +    return InsertLocked(j_histogram_key, histogram);
 | 
| +  }
 | 
| +
 | 
| +  HistogramBase* SparseHistogram(JNIEnv* env,
 | 
| +                                 jstring j_histogram_name,
 | 
| +                                 jint j_histogram_key) {
 | 
| +    DCHECK(j_histogram_name);
 | 
| +    DCHECK(j_histogram_key);
 | 
| +    HistogramBase* histogram = FindLocked(j_histogram_key);
 | 
| +    if (histogram)
 | 
| +      return histogram;
 | 
| +
 | 
| +    std::string histogram_name = ConvertJavaStringToUTF8(env, j_histogram_name);
 | 
| +    histogram = SparseHistogram::FactoryGet(
 | 
| +        histogram_name, HistogramBase::kUmaTargetedHistogramFlag);
 | 
|      return InsertLocked(j_histogram_key, histogram);
 | 
|    }
 | 
|  
 | 
| @@ -158,18 +173,33 @@ void RecordEnumeratedHistogram(JNIEnv* env,
 | 
|        ->Add(sample);
 | 
|  }
 | 
|  
 | 
| -void RecordCountHistogram(JNIEnv* env,
 | 
| -                          jclass clazz,
 | 
| -                          jstring j_histogram_name,
 | 
| -                          jint j_histogram_key,
 | 
| -                          jint j_sample) {
 | 
| +void RecordCustomCountHistogram(JNIEnv* env,
 | 
| +                                jclass clazz,
 | 
| +                                jstring j_histogram_name,
 | 
| +                                jint j_histogram_key,
 | 
| +                                jint j_sample,
 | 
| +                                jint j_min,
 | 
| +                                jint j_max,
 | 
| +                                jint j_num_buckets) {
 | 
|    int sample = static_cast<int>(j_sample);
 | 
|  
 | 
|    g_histograms.Get()
 | 
| -      .CountHistogram(env, j_histogram_name, j_histogram_key)
 | 
| +      .CustomCountHistogram(env, j_histogram_name, j_histogram_key, j_min,
 | 
| +                            j_max, j_num_buckets)
 | 
|        ->Add(sample);
 | 
|  }
 | 
|  
 | 
| +void RecordSparseHistogram(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()
 | 
| +        .SparseHistogram(env, j_histogram_name, j_histogram_key)
 | 
| +        ->Add(sample);
 | 
| +}
 | 
| +
 | 
|  void RecordCustomTimesHistogramMilliseconds(JNIEnv* env,
 | 
|                                              jclass clazz,
 | 
|                                              jstring j_histogram_name,
 | 
| 
 |