summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfenglu <fenglu@google.com>2015-05-20 21:09:07 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-20 21:09:09 +0000
commit22c228f20360e1eb37f156182f3f0c3cac39589a (patch)
treea4142c4a5ab099d85a19f375e09f916d5de5bde5
parentf082bb2a7f6ad064bbd608d079851c9df18ef0f4 (diff)
parent95ce803da7f3b9cc9e0f4c1d67d783e4fc9187c9 (diff)
downloadframeworks_base-22c228f20360e1eb37f156182f3f0c3cac39589a.zip
frameworks_base-22c228f20360e1eb37f156182f3f0c3cac39589a.tar.gz
frameworks_base-22c228f20360e1eb37f156182f3f0c3cac39589a.tar.bz2
Merge "LCE feature enhancement" into mnc-dev
-rw-r--r--core/java/android/net/NetworkAgent.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java
index 9c3a623..e6fc1ea 100644
--- a/core/java/android/net/NetworkAgent.java
+++ b/core/java/android/net/NetworkAgent.java
@@ -27,6 +27,7 @@ import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* A Utility class for handling for communicating between bearer-specific
@@ -51,6 +52,8 @@ public abstract class NetworkAgent extends Handler {
private final ArrayList<Message>mPreConnectedQueue = new ArrayList<Message>();
private volatile long mLastBwRefreshTime = 0;
private static final long BW_REFRESH_MIN_WIN_MS = 500;
+ private boolean mPollLceScheduled = false;
+ private AtomicBoolean mPollLcePending = new AtomicBoolean(false);
private static final int BASE = Protocol.BASE_NETWORK_AGENT;
@@ -207,11 +210,23 @@ public abstract class NetworkAgent extends Handler {
break;
}
case CMD_REQUEST_BANDWIDTH_UPDATE: {
+ long currentTimeMs = System.currentTimeMillis();
if (VDBG) {
log("CMD_REQUEST_BANDWIDTH_UPDATE request received.");
}
- if (System.currentTimeMillis() > (mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS)) {
- pollLceData();
+ if (currentTimeMs >= (mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS)) {
+ mPollLceScheduled = false;
+ if (mPollLcePending.getAndSet(true) == false) {
+ pollLceData();
+ }
+ } else {
+ // deliver the request at a later time rather than discard it completely.
+ if (!mPollLceScheduled) {
+ long waitTime = mLastBwRefreshTime + BW_REFRESH_MIN_WIN_MS -
+ currentTimeMs + 1;
+ mPollLceScheduled = sendEmptyMessageDelayed(
+ CMD_REQUEST_BANDWIDTH_UPDATE, waitTime);
+ }
}
break;
}
@@ -260,6 +275,7 @@ public abstract class NetworkAgent extends Handler {
* Called by the bearer code when it has new NetworkCapabilities data.
*/
public void sendNetworkCapabilities(NetworkCapabilities networkCapabilities) {
+ mPollLcePending.set(false);
mLastBwRefreshTime = System.currentTimeMillis();
queueOrSendMessage(EVENT_NETWORK_CAPABILITIES_CHANGED,
new NetworkCapabilities(networkCapabilities));