diff options
| author | 2023-09-12 15:55:59 -0700 | |
|---|---|---|
| committer | 2023-09-18 11:14:32 -0700 | |
| commit | 251f22a33d48554cf11510b1027b7a590ce47a0b (patch) | |
| tree | a76d27b6fa23277e3a171093de915af4483481dd | |
| parent | d20d16da880d2354150c16846944f7c00e6f67a9 (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.java | 17 |
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(); |