Index: chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java |
index f74cf9b8a97c9ea2463afbf74047f2db9ac37b78..ad58bb1a954194773eff9d105fe75756fca1eb21 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java |
@@ -7,11 +7,14 @@ |
import android.util.Pair; |
import org.chromium.base.annotations.JNINamespace; |
-import org.chromium.base.metrics.CachedMetrics; |
+import org.chromium.base.library_loader.LibraryLoader; |
+import org.chromium.base.metrics.RecordHistogram; |
+import org.chromium.base.metrics.RecordUserAction; |
import org.chromium.content_public.browser.WebContents; |
import java.util.ArrayList; |
import java.util.List; |
+import java.util.concurrent.TimeUnit; |
/** |
* Used for recording metrics about Chrome launches that need to be recorded before the native |
@@ -20,6 +23,150 @@ |
*/ |
@JNINamespace("metrics") |
public class LaunchMetrics { |
+ |
+ /** |
+ * Creating an instance of a subclass of this class automatically adds it to a list of objects |
+ * that are committed when the native library is available. |
+ */ |
+ private abstract static class CachedHistogram { |
+ private static final List<CachedHistogram> sEvents = new ArrayList<CachedHistogram>(); |
+ |
+ protected final String mHistogramName; |
+ |
+ /** |
+ * @param histogramName Name of the histogram to record. |
+ */ |
+ protected CachedHistogram(String histogramName) { |
+ mHistogramName = histogramName; |
+ sEvents.add(this); |
+ } |
+ |
+ /** Commits the histogram. Expects the native library to be loaded. */ |
+ protected abstract void commitAndClear(); |
+ } |
+ |
+ /** |
+ * Caches an action that will be recorded after native side is loaded. |
+ */ |
+ public static class ActionEvent extends CachedHistogram { |
+ private int mCount; |
+ |
+ public ActionEvent(String actionName) { |
+ super(actionName); |
+ } |
+ |
+ public void record() { |
+ if (LibraryLoader.isInitialized()) { |
+ recordWithNative(); |
+ } else { |
+ mCount++; |
+ } |
+ } |
+ |
+ private void recordWithNative() { |
+ RecordUserAction.record(mHistogramName); |
+ } |
+ |
+ @Override |
+ protected void commitAndClear() { |
+ while (mCount > 0) { |
+ recordWithNative(); |
+ mCount--; |
+ } |
+ } |
+ } |
+ |
+ /** Caches a set of integer histogram samples. */ |
+ public static class SparseHistogramSample extends CachedHistogram { |
+ private final List<Integer> mSamples = new ArrayList<Integer>(); |
+ |
+ public SparseHistogramSample(String histogramName) { |
+ super(histogramName); |
+ } |
+ |
+ public void record(int sample) { |
+ if (LibraryLoader.isInitialized()) { |
+ recordWithNative(sample); |
+ } else { |
+ mSamples.add(sample); |
+ } |
+ } |
+ |
+ private void recordWithNative(int sample) { |
+ RecordHistogram.recordSparseSlowlyHistogram(mHistogramName, sample); |
+ } |
+ |
+ @Override |
+ protected void commitAndClear() { |
+ for (Integer sample : mSamples) { |
+ recordWithNative(sample); |
+ } |
+ mSamples.clear(); |
+ } |
+ } |
+ |
+ /** Caches a set of enumerated histogram samples. */ |
+ public static class EnumeratedHistogramSample extends CachedHistogram { |
+ private final List<Integer> mSamples = new ArrayList<Integer>(); |
+ private final int mMaxValue; |
+ |
+ public EnumeratedHistogramSample(String histogramName, int maxValue) { |
+ super(histogramName); |
+ mMaxValue = maxValue; |
+ } |
+ |
+ public void record(int sample) { |
+ if (LibraryLoader.isInitialized()) { |
+ recordWithNative(sample); |
+ } else { |
+ mSamples.add(sample); |
+ } |
+ } |
+ |
+ private void recordWithNative(int sample) { |
+ RecordHistogram.recordEnumeratedHistogram(mHistogramName, sample, mMaxValue); |
+ } |
+ |
+ @Override |
+ protected void commitAndClear() { |
+ for (Integer sample : mSamples) { |
+ recordWithNative(sample); |
+ } |
+ mSamples.clear(); |
+ } |
+ } |
+ |
+ /** Caches a set of times histogram samples. */ |
+ public static class TimesHistogramSample extends CachedHistogram { |
+ private final List<Long> mSamples = new ArrayList<Long>(); |
+ private final TimeUnit mTimeUnit; |
+ |
+ public TimesHistogramSample(String histogramName, TimeUnit timeUnit) { |
+ super(histogramName); |
+ mTimeUnit = timeUnit; |
+ } |
+ |
+ public void record(long sample) { |
+ if (LibraryLoader.isInitialized()) { |
+ recordWithNative(sample); |
+ } else { |
+ mSamples.add(sample); |
+ } |
+ } |
+ |
+ private void recordWithNative(long sample) { |
+ RecordHistogram.recordTimesHistogram(mHistogramName, sample, mTimeUnit); |
+ } |
+ |
+ @Override |
+ protected void commitAndClear() { |
+ for (Long sample : mSamples) { |
+ recordWithNative(sample); |
+ } |
+ mSamples.clear(); |
+ } |
+ } |
+ |
// Each list item is a pair of the url and where it was added from e.g. from the add to |
// homescreen menu item, an app banner, or unknown. The mapping of int source values to |
// their string names is found in the C++ ShortcutInfo struct. |
@@ -75,7 +222,7 @@ |
sTabUrls.clear(); |
// Record generic cached events. |
- CachedMetrics.commitCachedMetrics(); |
+ for (CachedHistogram event : CachedHistogram.sEvents) event.commitAndClear(); |
} |
/** |