diff options
author | Eric Laurent <elaurent@google.com> | 2015-06-26 10:01:12 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-06-26 10:01:12 -0700 |
commit | c573bc5d3da12b52b0c45416f884d8d21b0ef500 (patch) | |
tree | 1fd36ed117f3223cfd79b3944ba7d75a7075bbc9 /media | |
parent | d4d802be39c67bf207bbb693d32c6a59c78ed3bb (diff) | |
download | frameworks_base-c573bc5d3da12b52b0c45416f884d8d21b0ef500.zip frameworks_base-c573bc5d3da12b52b0c45416f884d8d21b0ef500.tar.gz frameworks_base-c573bc5d3da12b52b0c45416f884d8d21b0ef500.tar.bz2 |
AudioManager: optimize audio port listener registration
In order to reduce the number of binder calls, only install an
audio port callback in a client process if either:
- an audio port related API has been called once
- an audio port listenr has been registered.
Bug: 22045560.
Change-Id: I0e5cf31bec0c986d6f7761891b860ba6fadd2f4c
Diffstat (limited to 'media')
-rw-r--r-- | media/java/android/media/AudioManager.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index a806440..b3b2b97 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -619,10 +619,6 @@ public class AudioManager { com.android.internal.R.bool.config_useVolumeKeySounds); mUseFixedVolume = getContext().getResources().getBoolean( com.android.internal.R.bool.config_useFixedVolume); - sAudioPortEventHandler.init(); - - mPortListener = new OnAmPortUpdateListener(); - registerAudioPortUpdateListener(mPortListener); } private Context getContext() { @@ -3554,6 +3550,7 @@ public class AudioManager { * @hide */ public void registerAudioPortUpdateListener(OnAudioPortUpdateListener l) { + sAudioPortEventHandler.init(); sAudioPortEventHandler.registerListener(l); } @@ -3586,6 +3583,7 @@ public class AudioManager { static int updateAudioPortCache(ArrayList<AudioPort> ports, ArrayList<AudioPatch> patches, ArrayList<AudioPort> previousPorts) { + sAudioPortEventHandler.init(); synchronized (sAudioPortGeneration) { if (sAudioPortGeneration == AUDIOPORT_GENERATION_INIT) { @@ -3849,6 +3847,12 @@ public class AudioManager { android.os.Handler handler) { if (callback != null && !mDeviceCallbacks.containsKey(callback)) { synchronized (mDeviceCallbacks) { + if (mDeviceCallbacks.size() == 0) { + if (mPortListener == null) { + mPortListener = new OnAmPortUpdateListener(); + } + registerAudioPortUpdateListener(mPortListener); + } NativeEventHandlerDelegate delegate = new NativeEventHandlerDelegate(callback, handler); mDeviceCallbacks.put(callback, delegate); @@ -3867,6 +3871,9 @@ public class AudioManager { synchronized (mDeviceCallbacks) { if (mDeviceCallbacks.containsKey(callback)) { mDeviceCallbacks.remove(callback); + if (mDeviceCallbacks.size() == 0) { + unregisterAudioPortUpdateListener(mPortListener); + } } } } |