summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author junyulai <junyulai@google.com> 2022-01-17 16:58:45 +0800
committer junyulai <junyulai@google.com> 2022-01-17 16:58:45 +0800
commit063dec5e4d2f0c9cd60e6e24e7956ea48ef184cc (patch)
tree2921489d24312e35f4fd74d3df0235980f5be5a6
parentd15c37c0e0e93563a14db1ef546560235047b562 (diff)
Fix multipathPolicyTracker query-update loop
Query stats from NetworkStatsService will trigger a poll by default. But since MultipathPolicyTracker listens NPMS events that triggered by stats updated event, and will query stats after the event. A polling -> updated -> query -> polling loop will be introduced if polls on open. Hence, set flag to false to prevent a polling loop. Test: 1. Boot up device with SIM card. 2. atest FrameworksNetTests Bug: 214638058 Change-Id: I60f2a4d08783575933602523dcca73d45a2caae5
-rw-r--r--services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java11
1 files changed, 9 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
index cc9efbc64c02..fce673765020 100644
--- a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
+++ b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java
@@ -199,6 +199,7 @@ public class MultipathPolicyTracker {
private final NetworkTemplate mNetworkTemplate;
private final UsageCallback mUsageCallback;
private NetworkCapabilities mNetworkCapabilities;
+ private final NetworkStatsManager mStatsManager;
public MultipathTracker(Network network, NetworkCapabilities nc) {
this.network = network;
@@ -238,6 +239,13 @@ public class MultipathPolicyTracker {
updateMultipathBudget();
}
};
+ mStatsManager = mContext.getSystemService(NetworkStatsManager.class);
+ // Query stats from NetworkStatsService will trigger a poll by default.
+ // But since MultipathPolicyTracker listens NPMS events that triggered by
+ // stats updated event, and will query stats
+ // after the event. A polling -> updated -> query -> polling loop will be introduced
+ // if polls on open. Hence, set flag to false to prevent a polling loop.
+ mStatsManager.setPollOnOpen(false);
updateMultipathBudget();
}
@@ -262,8 +270,7 @@ public class MultipathPolicyTracker {
private long getNetworkTotalBytes(long start, long end) {
try {
final android.app.usage.NetworkStats.Bucket ret =
- mContext.getSystemService(NetworkStatsManager.class)
- .querySummaryForDevice(mNetworkTemplate, start, end);
+ mStatsManager.querySummaryForDevice(mNetworkTemplate, start, end);
return ret.getRxBytes() + ret.getTxBytes();
} catch (RuntimeException e) {
Log.w(TAG, "Failed to get data usage: " + e);