Chromium Code Reviews| 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 |