Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c573bc5d authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent d4d802be
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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);
                }
            }
        }
    }