Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/NetworkQualityProviderHelper.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/NetworkQualityProviderHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/NetworkQualityProviderHelper.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ba41612c71218b77ff8c18df7ca4cd4b5b36670f |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/NetworkQualityProviderHelper.java |
| @@ -0,0 +1,98 @@ |
| +// 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. |
| + |
| +package org.chromium.chrome.browser.net.qualityprovider; |
| + |
| +import android.content.Context; |
| + |
| +import org.chromium.base.CalledByNative; |
| +import org.chromium.chrome.browser.ChromeApplication; |
| +import org.chromium.chrome.browser.util.NonThreadSafe; |
| + |
| +/** |
| + * This class is responsible for helping the native code communicate with the APIs provided by |
| + * the operating system through NetworkQualityProvider. |
| + */ |
| +public class NetworkQualityProviderHelper { |
|
nyquist
2015/07/22 14:47:00
This class can not be instantiated externally, and
tbansal1
2015/07/22 21:11:30
Done.
|
| + private static Context sContext = null; |
| + private static NonThreadSafe sThreadCheck = null; |
| + |
| + private NetworkQualityProviderHelper() {} |
| + |
| + @CalledByNative |
| + private static NetworkQualityProviderHelper create(Context context) { |
|
nyquist
2015/07/22 14:47:00
Why is this class here instead of just using the N
tbansal1
2015/07/22 21:11:30
OK, seems like my understanding is incorrect. I th
nyquist
2015/07/22 21:42:44
I don't know what your plan was for who should own
|
| + assert sThreadCheck == null; |
| + assert sContext == null; |
| + assert context != null; |
| + sThreadCheck = new NonThreadSafe(); |
| + sContext = context; |
| + return new NetworkQualityProviderHelper(); |
| + } |
| + |
| + @CalledByNative |
| + private static boolean isEstimateAvailable() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + if (sContext == null) return false; |
| + |
| + final NetworkQualityProvider networkQualityProvider = |
|
nyquist
2015/07/22 14:47:00
Why not store this reference in the constructor in
tbansal1
2015/07/22 21:11:29
Good idea, Done.
|
| + ((ChromeApplication) sContext).getNetworkQualityProvider(); |
| + return networkQualityProvider.isEstimateAvailable(); |
| + } |
| + |
| + @CalledByNative |
| + private static int getRTTMilliseconds() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + if (sContext == null) return NetworkQualityProvider.NO_VALUE; |
| + |
| + final NetworkQualityProvider networkQualityProvider = |
|
nyquist
2015/07/22 14:47:00
Nit: Unnecessary final throughout this class.
tbansal1
2015/07/22 21:11:30
Done.
|
| + ((ChromeApplication) sContext).getNetworkQualityProvider(); |
| + return networkQualityProvider.getRTTMilliseconds(); |
| + } |
| + |
| + @CalledByNative |
| + private static int getDownstreamThroughputKbps() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + if (sContext == null) return NetworkQualityProvider.NO_VALUE; |
| + |
| + final NetworkQualityProvider networkQualityProvider = |
| + ((ChromeApplication) sContext).getNetworkQualityProvider(); |
| + return convertLongToInt(networkQualityProvider.getDownstreamThroughputKbps()); |
| + } |
| + |
| + @CalledByNative |
| + private static int getUpstreamThroughputKbps() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + if (sContext == null) return NetworkQualityProvider.NO_VALUE; |
| + |
| + final NetworkQualityProvider networkQualityProvider = |
| + ((ChromeApplication) sContext).getNetworkQualityProvider(); |
| + return convertLongToInt(networkQualityProvider.getUpstreamThroughputKbps()); |
| + } |
| + |
| + @CalledByNative |
| + private static int getTimeSinceLastUpdateSeconds() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + if (sContext == null) return NetworkQualityProvider.NO_VALUE; |
| + |
| + final NetworkQualityProvider networkQualityProvider = |
| + ((ChromeApplication) sContext).getNetworkQualityProvider(); |
| + return convertLongToInt(networkQualityProvider.getTimeSinceLastUpdateSeconds()); |
| + } |
| + |
| + @CalledByNative |
| + private static int getNoValue() { |
| + assert sThreadCheck.calledOnValidThread(); |
| + return NetworkQualityProvider.NO_VALUE; |
| + } |
| + |
| + private static int convertLongToInt(long value) { |
| + if (value > Integer.MAX_VALUE) { |
| + return Integer.MAX_VALUE; |
| + } |
| + if (value < Integer.MIN_VALUE) { |
| + return Integer.MIN_VALUE; |
| + } |
| + return (int) value; |
| + } |
| +} |