Index: net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java |
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java |
index 470c2a434b15fa8c0a96ecfa2cbfff5045b1e32a..4654866319ba90ed62a983febd0447da8dc0affb 100644 |
--- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java |
+++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java |
@@ -30,6 +30,7 @@ import android.util.Log; |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.VisibleForTesting; |
+import org.chromium.base.metrics.RecordHistogram; |
import java.io.IOException; |
import java.util.Arrays; |
@@ -87,13 +88,32 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver { |
return getNetworkState(mConnectivityManager.getActiveNetworkInfo()); |
} |
+ // Fetch NetworkInfo and record UMA for NPEs. |
xunjieli
2016/06/14 13:55:06
nit: s/Fetch/Fetches. Maybe also spell out NPE.
pauljensen
2016/06/14 13:59:03
Done.
|
+ private NetworkInfo getNetworkInfo(Network network) { |
+ try { |
+ NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network); |
+ RecordHistogram.recordBooleanHistogram("NCN.getNetInfo1stSuccess", true); |
+ return networkInfo; |
+ } catch (NullPointerException firstException) { |
+ RecordHistogram.recordBooleanHistogram("NCN.getNetInfo1stSuccess", false); |
+ try { |
+ NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network); |
xunjieli
2016/06/14 13:55:06
Why do we do getNetworkInfo twice?
pauljensen
2016/06/14 13:59:03
To see if trying again might be a viable solution.
xunjieli
2016/06/14 14:10:50
I see. Could you make a quick comment here and bel
pauljensen
2016/06/14 14:59:41
Done.
|
+ RecordHistogram.recordBooleanHistogram("NCN.getNetInfo2ndSuccess", true); |
+ return networkInfo; |
+ } catch (NullPointerException secondException) { |
+ RecordHistogram.recordBooleanHistogram("NCN.getNetInfo2ndSuccess", false); |
+ throw secondException; |
+ } |
+ } |
+ } |
+ |
/** |
* Returns connection type and status information about |network|. |
* Only callable on Lollipop and newer releases. |
*/ |
@TargetApi(Build.VERSION_CODES.LOLLIPOP) |
NetworkState getNetworkState(Network network) { |
- final NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network); |
+ final NetworkInfo networkInfo = getNetworkInfo(network); |
if (networkInfo != null && networkInfo.getType() == TYPE_VPN) { |
// When a VPN is in place the underlying network type can be queried via |
// getActiveNeworkInfo() thanks to |
@@ -191,7 +211,7 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver { |
final Network[] networks = getAllNetworksFiltered(this, null); |
int defaultNetId = NetId.INVALID; |
for (Network network : networks) { |
- final NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network); |
+ final NetworkInfo networkInfo = getNetworkInfo(network); |
if (networkInfo != null |
&& (networkInfo.getType() == defaultNetworkInfo.getType() |
// getActiveNetworkInfo() will not return TYPE_VPN types due to |
@@ -255,13 +275,32 @@ public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver { |
return ""; |
} |
+ // Fetch WifiInfo and record UMA for NPEs. |
+ private WifiInfo getWifiInfo() { |
+ try { |
+ WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); |
+ RecordHistogram.recordBooleanHistogram("NCN.getWifiInfo1stSuccess", true); |
+ return wifiInfo; |
+ } catch (NullPointerException firstException) { |
+ RecordHistogram.recordBooleanHistogram("NCN.getWifiInfo1stSuccess", false); |
+ try { |
+ WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); |
+ RecordHistogram.recordBooleanHistogram("NCN.getWifiInfo2ndSuccess", true); |
+ return wifiInfo; |
+ } catch (NullPointerException secondException) { |
+ RecordHistogram.recordBooleanHistogram("NCN.getWifiInfo2ndSuccess", false); |
+ throw secondException; |
+ } |
+ } |
+ } |
+ |
/* |
* Requires ACCESS_WIFI_STATE permission to get the real link speed, else returns |
* UNKNOWN_LINK_SPEED. |
*/ |
int getLinkSpeedInMbps() { |
if (!mHasWifiPermission || mWifiManager == null) return UNKNOWN_LINK_SPEED; |
- final WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); |
+ final WifiInfo wifiInfo = getWifiInfo(); |
if (wifiInfo == null) return UNKNOWN_LINK_SPEED; |
// wifiInfo.getLinkSpeed returns the current wifi linkspeed, which can change even |