From b7bd89e4243984ac6a6a5656b89e4edfbe627d7c Mon Sep 17 00:00:00 2001 From: Sewook Seo Date: Fri, 21 Apr 2023 21:06:04 +0000 Subject: [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 --- .../com/android/telephony/qns/RestrictManager.java | 35 +++++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'services/QualifiedNetworksService/src/com/android') 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 mRestrictionMap = new HashMap<>(); + private Map mRestrictionMap = new ConcurrentHashMap<>(); RestrictInfo(int transportMode) { mTransportMode = transportMode; } - HashMap getRestrictionMap() { + Map 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 restrictionMap = mRestrictInfos + Map 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 restrictionMap = + Map 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 restrictionMap = + Map 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 restrictionMap = + Map 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 restrictionMap = + Map 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 releaseList = new ArrayList<>(); - HashMap restrictMap = + Map restrictMap = mRestrictInfos.get(transportType).getRestrictionMap(); Log.d( mLogTag, -- cgit v1.2.3