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

Unified Diff: components/cronet/android/java/src/org/chromium/net/HistogramManager.java

Issue 904033004: [Cronet] Make HistogramManager an abstract class to break dependency on native library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Helen's comments. Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/java/src/org/chromium/net/HistogramManager.java
diff --git a/components/cronet/android/java/src/org/chromium/net/HistogramManager.java b/components/cronet/android/java/src/org/chromium/net/HistogramManager.java
index 498392005142d8a89593c8e8e4ef701a19c07dbc..e2b18401e6e49b2b013d5495d5797c48c83dd44b 100644
--- a/components/cronet/android/java/src/org/chromium/net/HistogramManager.java
+++ b/components/cronet/android/java/src/org/chromium/net/HistogramManager.java
@@ -4,25 +4,41 @@
package org.chromium.net;
-import org.chromium.base.JNINamespace;
+import java.lang.reflect.Constructor;
+
/**
- * Controls UMA histograms.
+ * Controls UMA histograms in native library.
*/
-@JNINamespace("cronet")
-public final class HistogramManager {
- public HistogramManager() {
- nativeEnsureInitialized();
- }
+public abstract class HistogramManager {
+ private static final String CRONET_HISTOGRAM_MANAGER =
+ "org.chromium.net.CronetHistogramManager";
/**
* Get histogram deltas serialized as protobuf.
*/
- public byte[] getHistogramDeltas() {
- return nativeGetHistogramDeltas();
- }
-
- private native byte[] nativeGetHistogramDeltas();
+ public abstract byte[] getHistogramDeltas();
- private native void nativeEnsureInitialized();
+ /**
+ * Creates Histogram Manager if native library is loaded, returns null if not.
+ */
+ public static HistogramManager createHistogramManager() {
+ HistogramManager histogramManager = null;
+ try {
+ Class<? extends HistogramManager> histogramManagerClass =
+ HistogramManager.class.getClassLoader()
+ .loadClass(CRONET_HISTOGRAM_MANAGER)
+ .asSubclass(HistogramManager.class);
+ Constructor<? extends HistogramManager> constructor =
+ histogramManagerClass.getConstructor();
+ histogramManager = constructor.newInstance();
+ } catch (ClassNotFoundException e) {
+ // Leave as null.
+ } catch (Exception e) {
+ throw new IllegalStateException(
+ "Cannot instantiate: " + CRONET_HISTOGRAM_MANAGER,
+ e);
+ }
+ return histogramManager;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698