diff options
author | 2022-01-17 16:58:45 +0800 | |
---|---|---|
committer | 2022-01-17 16:58:45 +0800 | |
commit | 063dec5e4d2f0c9cd60e6e24e7956ea48ef184cc (patch) | |
tree | 2921489d24312e35f4fd74d3df0235980f5be5a6 | |
parent | d15c37c0e0e93563a14db1ef546560235047b562 (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.java | 11 |
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); |