diff options
| author | fenglu <fenglu@google.com> | 2015-05-20 21:09:07 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-20 21:09:09 +0000 |
| commit | 22c228f20360e1eb37f156182f3f0c3cac39589a (patch) | |
| tree | a4142c4a5ab099d85a19f375e09f916d5de5bde5 | |
| parent | f082bb2a7f6ad064bbd608d079851c9df18ef0f4 (diff) | |
| parent | 95ce803da7f3b9cc9e0f4c1d67d783e4fc9187c9 (diff) | |
| download | frameworks_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.java | 20 |
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)); |
