summaryrefslogtreecommitdiff
path: root/services/QualifiedNetworksService/src/com/android
diff options
context:
space:
mode:
authorSewook Seo <sewookseo@google.com>2023-04-21 21:06:04 +0000
committerSewook Seo <sewookseo@google.com>2023-04-29 22:59:21 +0000
commitb7bd89e4243984ac6a6a5656b89e4edfbe627d7c (patch)
tree945712d81f1532991af93ee16bd18d65eefd6566 /services/QualifiedNetworksService/src/com/android
parent36c04ff2807373ac6e41bfaa3f05beca5a503c73 (diff)
downloadTelephony-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.java35
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,