summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Remi NGUYEN VAN <reminv@google.com> 2018-04-10 20:46:55 -0700
committer android-build-merger <android-build-merger@google.com> 2018-04-10 20:46:55 -0700
commit448cf3b116db2e0fca4af3f727c034e0ffd74df6 (patch)
tree7b82af4b12787bea55db7eb7a55277629026e172
parent85eac92ecbd9078d1c84c5fcd57e36adbbbdda3c (diff)
parent788f87dab63338c0a964c3c70fee2c3544efe1a8 (diff)
Merge "Do not register callback for < MIN_THRESHOLD_BYTES" into pi-dev
am: 788f87dab6 Change-Id: I7aab9434ab9b11fe588c057a4c2b774b09ad71d2
-rw-r--r--core/java/android/app/usage/NetworkStatsManager.java10
-rw-r--r--services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java19
-rw-r--r--services/core/java/com/android/server/net/NetworkStatsObservers.java4
3 files changed, 26 insertions, 7 deletions
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index 85f4efc3f735..0b21196f5d0f 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -35,6 +35,7 @@ import android.os.Messenger;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
+import android.util.DataUnit;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -95,6 +96,15 @@ public class NetworkStatsManager {
/** @hide */
public static final int CALLBACK_RELEASED = 1;
+ /**
+ * Minimum data usage threshold for registering usage callbacks.
+ *
+ * Requests registered with a threshold lower than this will only be triggered once this minimum
+ * is reached.
+ * @hide
+ */
+ public static final long MIN_THRESHOLD_BYTES = DataUnit.MEBIBYTES.toBytes(2);
+
private final Context mContext;
private final INetworkStatsService mService;
diff --git a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
index 4bad5aaeafaf..6fa999cb039a 100644
--- a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
+++ b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
@@ -56,6 +56,7 @@ import android.net.Uri;
import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
+import android.util.DataUnit;
import android.util.DebugUtils;
import android.util.Pair;
import android.util.Range;
@@ -333,11 +334,11 @@ public class MultipathPolicyTracker {
if (DBG) Slog.d(TAG, "Setting quota: " + quota + " bytes");
}
+ // TODO: re-register if day changed: budget may have run out but should be refreshed.
if (haveMultipathBudget() && quota == mQuota) {
- // If we already have a usage callback pending , there's no need to re-register it
+ // If there is already a usage callback pending , there's no need to re-register it
// if the quota hasn't changed. The callback will simply fire as expected when the
- // budget is spent. Also: if we re-register the callback when we're below the
- // UsageCallback's minimum value of 2MB, we'll overshoot the budget.
+ // budget is spent.
if (DBG) Slog.d(TAG, "Quota still " + quota + ", not updating.");
return;
}
@@ -347,7 +348,17 @@ public class MultipathPolicyTracker {
// ourselves any budget to work with.
final long usage = getDailyNonDefaultDataUsage();
final long budget = (usage == -1) ? 0 : Math.max(0, quota - usage);
- if (budget > 0) {
+
+ // Only consider budgets greater than MIN_THRESHOLD_BYTES, otherwise the callback will
+ // fire late, after data usage went over budget. Also budget should be 0 if remaining
+ // data is close to 0.
+ // This is necessary because the usage callback does not accept smaller thresholds.
+ // Because it snaps everything to MIN_THRESHOLD_BYTES, the lesser of the two evils is
+ // to snap to 0 here.
+ // This will only be called if the total quota for the day changed, not if usage changed
+ // since last time, so even if this is called very often the budget will not snap to 0
+ // as soon as there are less than 2MB left for today.
+ if (budget > NetworkStatsManager.MIN_THRESHOLD_BYTES) {
if (DBG) Slog.d(TAG, "Setting callback for " + budget +
" bytes on network " + network);
registerUsageCallback(budget);
diff --git a/services/core/java/com/android/server/net/NetworkStatsObservers.java b/services/core/java/com/android/server/net/NetworkStatsObservers.java
index 741c2062bd57..d8408730dd25 100644
--- a/services/core/java/com/android/server/net/NetworkStatsObservers.java
+++ b/services/core/java/com/android/server/net/NetworkStatsObservers.java
@@ -16,7 +16,7 @@
package com.android.server.net;
-import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.app.usage.NetworkStatsManager.MIN_THRESHOLD_BYTES;
import static com.android.internal.util.Preconditions.checkArgument;
@@ -52,8 +52,6 @@ class NetworkStatsObservers {
private static final String TAG = "NetworkStatsObservers";
private static final boolean LOGV = false;
- private static final long MIN_THRESHOLD_BYTES = 2 * MB_IN_BYTES;
-
private static final int MSG_REGISTER = 1;
private static final int MSG_UNREGISTER = 2;
private static final int MSG_UPDATE_STATS = 3;