diff options
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 4c234a0839e2..7e9c253f622e 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -146,6 +146,7 @@ import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.ResultReceiver; +import android.os.ServiceDebugInfo; import android.os.ServiceManager; import android.os.ShellCallback; import android.os.SystemClock; @@ -12322,12 +12323,25 @@ public class AudioService extends IAudioService.Stub private static final String AUDIO_HAL_SERVICE_PREFIX = "android.hardware.audio"; - private Set<Integer> getAudioHalPids() { + private void getAudioAidlHalPids(HashSet<Integer> pids) { + try { + ServiceDebugInfo[] infos = ServiceManager.getServiceDebugInfo(); + if (infos == null) return; + for (ServiceDebugInfo info : infos) { + if (info.debugPid > 0 && info.name.startsWith(AUDIO_HAL_SERVICE_PREFIX)) { + pids.add(info.debugPid); + } + } + } catch (RuntimeException e) { + // ignored, pid hashset does not change + } + } + + private void getAudioHalHidlPids(HashSet<Integer> pids) { try { IServiceManager serviceManager = IServiceManager.getService(); ArrayList<IServiceManager.InstanceDebugInfo> dump = serviceManager.debugDump(); - HashSet<Integer> pids = new HashSet<>(); for (IServiceManager.InstanceDebugInfo info : dump) { if (info.pid != IServiceManager.PidConstant.NO_PID && info.interfaceName != null @@ -12335,12 +12349,18 @@ public class AudioService extends IAudioService.Stub pids.add(info.pid); } } - return pids; } catch (RemoteException | RuntimeException e) { - return new HashSet<Integer>(); + // ignored, pid hashset does not change } } + private Set<Integer> getAudioHalPids() { + HashSet<Integer> pids = new HashSet<>(); + getAudioAidlHalPids(pids); + getAudioHalHidlPids(pids); + return pids; + } + private void updateAudioHalPids() { Set<Integer> pidsSet = getAudioHalPids(); if (pidsSet.isEmpty()) { |