diff options
| author | 2024-04-17 18:07:48 +0000 | |
|---|---|---|
| committer | 2024-04-17 18:07:48 +0000 | |
| commit | 89d3bb5a1c910c795e3640bd2e42e1d379e751da (patch) | |
| tree | 217562b36240c7cd16829e0673298c204df68fb4 | |
| parent | b4ee2d3eb6d7df94681d834b966f1e3b4f6b9fc6 (diff) | |
| parent | e9e7e78f651b5a53b3fc65f155d4b1562703cc6f (diff) | |
Merge "MediaCas: Release cas resource only when all sessions are closed" into main am: e9e7e78f65
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3016424
Change-Id: Id8432aa07a3f72c23c11b0e90d07c022c5f65523
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/tv/tunerresourcemanager/CasResource.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java | 12 |
2 files changed, 35 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/CasResource.java b/services/core/java/com/android/server/tv/tunerresourcemanager/CasResource.java index 4a81c95f0b8f..440d2514537c 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/CasResource.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/CasResource.java @@ -89,8 +89,34 @@ public class CasResource { * @param ownerId the removing client id of the owner. */ public void removeOwner(int ownerId) { - mAvailableSessionNum += mOwnerClientIdsToSessionNum.get(ownerId); - mOwnerClientIdsToSessionNum.remove(ownerId); + if (mOwnerClientIdsToSessionNum.containsKey(ownerId)) { + mAvailableSessionNum += mOwnerClientIdsToSessionNum.get(ownerId); + mOwnerClientIdsToSessionNum.remove(ownerId); + } + } + + /** + * Remove a single session from resource + * + * @param ownerId the client Id of the owner of the session + */ + public void removeSession(int ownerId) { + if (mOwnerClientIdsToSessionNum.containsKey(ownerId)) { + int sessionNum = mOwnerClientIdsToSessionNum.get(ownerId); + if (sessionNum > 0) { + mOwnerClientIdsToSessionNum.put(ownerId, --sessionNum); + mAvailableSessionNum++; + } + } + } + + /** + * Check if there are any open sessions owned by a client + * + * @param ownerId the client Id of the owner of the sessions + */ + public boolean hasOpenSessions(int ownerId) { + return mOwnerClientIdsToSessionNum.get(ownerId) > 0; } public Set<Integer> getOwnerClientIds() { 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 cddc79db6106..0afb049d31c7 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java @@ -1924,11 +1924,13 @@ public class TunerResourceManagerService extends SystemService implements IBinde ownerProfile.useCiCam(grantingId); } - private void updateCasClientMappingOnRelease( - @NonNull CasResource releasingCas, int ownerClientId) { - ClientProfile ownerProfile = getClientProfile(ownerClientId); - releasingCas.removeOwner(ownerClientId); - ownerProfile.releaseCas(); + private void updateCasClientMappingOnRelease(@NonNull CasResource cas, int ownerClientId) { + cas.removeSession(ownerClientId); + if (!cas.hasOpenSessions(ownerClientId)) { + ClientProfile ownerProfile = getClientProfile(ownerClientId); + cas.removeOwner(ownerClientId); + ownerProfile.releaseCas(); + } } private void updateCiCamClientMappingOnRelease( |