diff options
author | Sewook Seo <sewookseo@google.com> | 2023-04-21 21:06:04 +0000 |
---|---|---|
committer | Sewook Seo <sewookseo@google.com> | 2023-04-29 22:59:21 +0000 |
commit | b7bd89e4243984ac6a6a5656b89e4edfbe627d7c (patch) | |
tree | 945712d81f1532991af93ee16bd18d65eefd6566 /services/QualifiedNetworksService/src/com/android | |
parent | 36c04ff2807373ac6e41bfaa3f05beca5a503c73 (diff) | |
download | Telephony-b7bd89e4243984ac6a6a5656b89e4edfbe627d7c.tar.gz |
[QNS]check restrtict time expired.
QNS T has some restriction timers using handler thread, and it's delayed
while device is in sleep state. For Android U, we change them to use
AlarmManager in smart way. But for T QPR we don't have enough time to
verify power consumption effect & related operations. So we will check the
expected expiration time is passed or not based on elapsed real time,
whenever Evaluator needs to evalutate qualified RAT.
Ignore throttling restriction at single RAT, let FWK control throttling.
(CherryPick of ag/21590039)
Bug: 269109599
Test: atest QualfiedNetworksServiceTests, device test b/270939081
Change-Id: Ibc7541b9faadd71364ca9f49c50f8ff39b2b1e48
Diffstat (limited to 'services/QualifiedNetworksService/src/com/android')
-rw-r--r-- | services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java index 21eaf7c..52ed5b6 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/RestrictManager.java @@ -139,6 +139,8 @@ class RestrictManager { private static final int[] ignorableRestrictionsOnSingleRat = new int[] { RESTRICT_TYPE_GUARDING, + //Ignore throttling restriction at single RAT, let FWK control throttling. + RESTRICT_TYPE_THROTTLING, RESTRICT_TYPE_RTP_LOW_QUALITY, RESTRICT_TYPE_RESTRICT_IWLAN_IN_CALL, RESTRICT_TYPE_FALLBACK_TO_WWAN_IMS_REGI_FAIL, @@ -373,6 +375,15 @@ class RestrictManager { } } + boolean isRestrictionExpired(long elapsedRealTime) { + if (mReleaseTime != 0 && (mReleaseTime - elapsedRealTime < 0)) { + Log.d(mLogTag, restrictTypeToString(mRestrictType) + " was expired." + + "release time:" + mReleaseTime + ", now:" + elapsedRealTime); + return true; + } + return false; + } + @Override public String toString() { StringBuilder builder = new StringBuilder(); @@ -397,20 +408,28 @@ class RestrictManager { class RestrictInfo { private int mTransportMode; // AccessNetworkConstants.TRANSPORT_TYPE_WWAN; - private HashMap<Integer, Restriction> mRestrictionMap = new HashMap<>(); + private Map<Integer, Restriction> mRestrictionMap = new ConcurrentHashMap<>(); RestrictInfo(int transportMode) { mTransportMode = transportMode; } - HashMap<Integer, Restriction> getRestrictionMap() { + Map<Integer, Restriction> getRestrictionMap() { return mRestrictionMap; } boolean isRestricted() { + checkUpExpirationTime(); return mRestrictionMap.size() != 0; } + private void checkUpExpirationTime() { + if (mRestrictionMap.size() > 0) { + long now = QnsUtils.getSystemElapsedRealTime(); + mRestrictionMap.entrySet().removeIf(e -> e.getValue().isRestrictionExpired(now)); + } + } + /** * This method returns if the restriction info has given restriction type. * @@ -673,7 +692,7 @@ class RestrictManager { if ((reason & 1 << QnsConstants.RTP_LOW_QUALITY_REASON_NO_RTP) != 0) { releaseRestriction(QnsUtils.getOtherTransportType(mTransportType), RESTRICT_TYPE_GUARDING, true); - HashMap<Integer, Restriction> restrictionMap = mRestrictInfos + Map<Integer, Restriction> restrictionMap = mRestrictInfos .get(QnsUtils.getOtherTransportType(mTransportType)) .getRestrictionMap(); Restriction restrictionOtherSide = restrictionMap.get( @@ -1133,7 +1152,7 @@ class RestrictManager { int currGuardingTransport = QnsUtils.getOtherTransportType(mTransportType); if (mRestrictInfos.get(currGuardingTransport) == null) return; - HashMap<Integer, Restriction> restrictionMap = + Map<Integer, Restriction> restrictionMap = mRestrictInfos.get(currGuardingTransport).getRestrictionMap(); Restriction restriction = restrictionMap.get(RESTRICT_TYPE_GUARDING); @@ -1191,7 +1210,7 @@ class RestrictManager { void addRestriction(int transport, Restriction restrictObj, long timeMillis) { boolean needNotify = false; - HashMap<Integer, Restriction> restrictionMap = + Map<Integer, Restriction> restrictionMap = mRestrictInfos.get(transport).getRestrictionMap(); Restriction restriction = restrictionMap.get(restrictObj.mRestrictType); Log.d( @@ -1235,7 +1254,7 @@ class RestrictManager { void addRestriction(int transport, int type, int[] releaseEvents, long timeMillis) { boolean needNotify = false; - HashMap<Integer, Restriction> restrictionMap = + Map<Integer, Restriction> restrictionMap = mRestrictInfos.get(transport).getRestrictionMap(); Restriction restriction = restrictionMap.get(type); Log.d( @@ -1283,7 +1302,7 @@ class RestrictManager { void releaseRestriction(int transport, int type, boolean skipNotify) { boolean needNotify = false; - HashMap<Integer, Restriction> restrictionMap = + Map<Integer, Restriction> restrictionMap = mRestrictInfos.get(transport).getRestrictionMap(); Restriction restriction = restrictionMap.get(type); Log.d( @@ -1311,7 +1330,7 @@ class RestrictManager { void processReleaseEvent(int transportType, int event) { ArrayList<Integer> releaseList = new ArrayList<>(); - HashMap<Integer, Restriction> restrictMap = + Map<Integer, Restriction> restrictMap = mRestrictInfos.get(transportType).getRestrictionMap(); Log.d( mLogTag, |