summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kensuke Miyagi <kemiyagi@google.com> 2023-09-12 15:55:59 -0700
committer Kensuke Miyagi <kemiyagi@google.com> 2023-09-18 11:14:32 -0700
commit251f22a33d48554cf11510b1027b7a590ce47a0b (patch)
treea76d27b6fa23277e3a171093de915af4483481dd
parentd20d16da880d2354150c16846944f7c00e6f67a9 (diff)
Fix bug in DemuxResource allocation logic
The intended logic is to find demux resource for the requested capability that has the least number of capabilities. This CL fixes: - the issue where non-used resource won't be found if it has more number of capabilities than what is currently used - the issue where smallestNumOfSupportedCapsInUse was not reset when the lower priority resource is found Bug: 299858762 Test: atest TunerTest Change-Id: I5fd1c85046b2dbe0e2d2039a7b08a5fe214c4200
-rw-r--r--services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
index c526016544a6..a5c0fb3c46af 100644
--- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
+++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
@@ -1454,6 +1454,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
boolean hasDesiredDemuxCap = request.desiredFilterTypes
!= DemuxFilterMainType.UNDEFINED;
int smallestNumOfSupportedCaps = Integer.SIZE + 1;
+ int smallestNumOfSupportedCapsInUse = Integer.SIZE + 1;
for (DemuxResource dr : getDemuxResources().values()) {
if (!hasDesiredDemuxCap || dr.hasSufficientCaps(request.desiredFilterTypes)) {
if (!dr.isInUse()) {
@@ -1476,12 +1477,18 @@ public class TunerResourceManagerService extends SystemService implements IBinde
currentLowestPriority = priority;
isRequestFromSameProcess = (requestClient.getProcessId()
== (getClientProfile(dr.getOwnerClientId())).getProcessId());
+
+ // reset the smallest caps when lower priority resource is found
+ smallestNumOfSupportedCapsInUse = numOfSupportedCaps;
+
shouldUpdate = true;
- }
- // update smallest caps
- if (smallestNumOfSupportedCaps > numOfSupportedCaps) {
- smallestNumOfSupportedCaps = numOfSupportedCaps;
- shouldUpdate = true;
+ } else {
+ // This is the case when the priority is the same as previously found
+ // one. Update smallest caps when priority.
+ if (smallestNumOfSupportedCapsInUse > numOfSupportedCaps) {
+ smallestNumOfSupportedCapsInUse = numOfSupportedCaps;
+ shouldUpdate = true;
+ }
}
if (shouldUpdate) {
inUseLowestPriorityDrHandle = dr.getHandle();