Commit 6ecf654f authored by mef's avatar mef Committed by Commit bot

[Cronet] Make HistogramManager an abstract class to break dependency on native library.

BUG=441466

Review URL: https://codereview.chromium.org/904033004

Cr-Commit-Position: refs/heads/master@{#315108}
parent a8c6b4b4
......@@ -11,11 +11,11 @@
'target_name': 'cronet_jni_headers',
'type': 'none',
'sources': [
'cronet/android/java/src/org/chromium/net/CronetHistogramManager.java',
'cronet/android/java/src/org/chromium/net/CronetUrlRequest.java',
'cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java',
'cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java',
'cronet/android/java/src/org/chromium/net/ChromiumUrlRequestContext.java',
'cronet/android/java/src/org/chromium/net/HistogramManager.java',
],
'variables': {
'jni_gen_package': 'cronet',
......@@ -122,6 +122,8 @@
'cronet/android/chromium_url_request_priority_list.h',
'cronet/android/chromium_url_request_context.cc',
'cronet/android/chromium_url_request_context.h',
'cronet/android/cronet_histogram_manager.cc',
'cronet/android/cronet_histogram_manager.h',
'cronet/android/cronet_loader.cc',
'cronet/android/cronet_loader.h',
'cronet/android/cronet_url_request.cc',
......@@ -132,8 +134,6 @@
'cronet/android/cronet_url_request_context.h',
'cronet/android/cronet_url_request_context_adapter.cc',
'cronet/android/cronet_url_request_context_adapter.h',
'cronet/android/histogram_manager.cc',
'cronet/android/histogram_manager.h',
'cronet/android/url_request_adapter.cc',
'cronet/android/url_request_adapter.h',
'cronet/android/url_request_context_adapter.cc',
......@@ -194,6 +194,7 @@
'javac_includes': [
'**/ChunkedWritableByteChannel.java',
'**/ExtendedResponseInfo.java',
'**/HistogramManager.java',
'**/HttpUrlConnection*.java',
'**/HttpUrlRequest*.java',
'**/ResponseInfo.java',
......@@ -230,11 +231,11 @@
'**/ChromiumUrlRequestError.java',
'**/ChromiumUrlRequestFactory.java',
'**/ChromiumUrlRequestPriority.java',
'**/CronetHistogramManager.java',
'**/CronetResponseInfo.java',
'**/CronetUrlRequest.java',
'**/CronetUrlRequestContext.java',
'**/CronetUrlRequestFactory.java',
'**/HistogramManager.java',
'**/RequestPriority.java',
'**/urlconnection/CronetInputStream.java',
'**/urlconnection/CronetHttpURLConnection.java',
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cronet/android/histogram_manager.h"
#include "components/cronet/android/cronet_histogram_manager.h"
#include <string>
#include <vector>
......@@ -11,12 +11,12 @@
#include "base/metrics/statistics_recorder.h"
#include "components/metrics/histogram_manager.h"
#include "jni/HistogramManager_jni.h"
#include "jni/CronetHistogramManager_jni.h"
namespace cronet {
// Explicitly register static JNI functions.
bool HistogramManagerRegisterJni(JNIEnv* env) {
bool CronetHistogramManagerRegisterJni(JNIEnv* env) {
return RegisterNativesImpl(env);
}
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
......@@ -9,7 +9,7 @@
namespace cronet {
bool HistogramManagerRegisterJni(JNIEnv* env);
bool CronetHistogramManagerRegisterJni(JNIEnv* env);
} // namespace cronet
......
......@@ -8,9 +8,9 @@
#include "base/at_exit.h"
#include "components/cronet/android/chromium_url_request.h"
#include "components/cronet/android/chromium_url_request_context.h"
#include "components/cronet/android/cronet_histogram_manager.h"
#include "components/cronet/android/cronet_url_request.h"
#include "components/cronet/android/cronet_url_request_context.h"
#include "components/cronet/android/histogram_manager.h"
#include "net/android/net_jni_registrar.h"
#include "url/android/url_jni_registrar.h"
#include "url/url_util.h"
......@@ -24,11 +24,11 @@ namespace {
const base::android::RegistrationMethod kCronetRegisteredMethods[] = {
{"BaseAndroid", base::android::RegisterJni},
{"ChromiumUrlRequest", cronet::ChromiumUrlRequestRegisterJni},
{"ChromiumUrlRequestContext", cronet::ChromiumUrlRequestContextRegisterJni},
{"CronetUrlRequest", cronet::CronetUrlRequestRegisterJni},
{"CronetUrlRequestContext", cronet::CronetUrlRequestContextRegisterJni},
{"HistogramManager", cronet::HistogramManagerRegisterJni},
{"ChromiumUrlRequest", ChromiumUrlRequestRegisterJni},
{"ChromiumUrlRequestContext", ChromiumUrlRequestContextRegisterJni},
{"CronetHistogramManager", CronetHistogramManagerRegisterJni},
{"CronetUrlRequest", CronetUrlRequestRegisterJni},
{"CronetUrlRequestContext", CronetUrlRequestContextRegisterJni},
{"NetAndroid", net::android::RegisterJni},
{"UrlAndroid", url::android::RegisterJni},
};
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net;
import org.chromium.base.JNINamespace;
/**
* Controls UMA histograms.
*/
@JNINamespace("cronet")
public final class CronetHistogramManager extends HistogramManager {
public CronetHistogramManager() {
nativeEnsureInitialized();
}
/**
* Get histogram deltas serialized as protobuf.
*/
public byte[] getHistogramDeltas() {
return nativeGetHistogramDeltas();
}
private native byte[] nativeGetHistogramDeltas();
private native void nativeEnsureInitialized();
}
......@@ -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;
}
}
......@@ -74,8 +74,6 @@ public class CronetTestActivity extends Activity {
return;
}
mHistogramManager = new HistogramManager();
String skipInitString = getCommandLineArg(SKIP_FACTORY_INIT_KEY);
if (skipInitString != null) {
return;
......@@ -121,6 +119,8 @@ public class CronetTestActivity extends Activity {
mUrlRequestContext = UrlRequestContext.createContext(
getApplicationContext(), config);
mHistogramManager = HistogramManager.createHistogramManager();
return HttpUrlRequestFactory.createFactory(getApplicationContext(),
config);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment