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

Commit 1dc39b66 authored by sc.heo's avatar sc.heo
Browse files

Audiopolicy : skipDelays in registerPolicyMixes

A lot of time is spent in applyStreamVolumes() during registerPolicyMixes() updateCallAndOutputRouting()
Test: atest audiopolicy_tests

Bug: 381957270
Change-Id: I0de2111d8c4b9dbffe1346c59e4321917de1ef26
parent 7d64724b
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -3885,6 +3885,7 @@ status_t AudioPolicyManager::registerPolicyMixes(const Vector<AudioMix>& mixes)
    bool checkOutputs = false;
    sp<HwModule> rSubmixModule;
    Vector<AudioMix> registeredMixes;
    AudioDeviceTypeAddrVector devices;
    // examine each mix's route type
    for (size_t i = 0; i < mixes.size(); i++) {
        AudioMix mix = mixes[i];
@@ -4008,6 +4009,7 @@ status_t AudioPolicyManager::registerPolicyMixes(const Vector<AudioMix>& mixes)
                break;
            } else {
                checkOutputs = true;
                devices.push_back(AudioDeviceTypeAddr(mix.mDeviceType, mix.mDeviceAddress.c_str()));
                registeredMixes.add(mix);
            }
        }
@@ -4023,7 +4025,10 @@ status_t AudioPolicyManager::registerPolicyMixes(const Vector<AudioMix>& mixes)
        }
    } else if (checkOutputs) {
        checkForDeviceAndOutputChanges();
        updateCallAndOutputRouting();
        changeOutputDevicesMuteState(devices);
        updateCallAndOutputRouting(false /* forceVolumeReeval */, 0 /* delayMs */,
            true /* skipDelays */);
        changeOutputDevicesMuteState(devices);
    }
    return res;
}
@@ -4034,6 +4039,7 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)
    status_t res = NO_ERROR;
    bool checkOutputs = false;
    sp<HwModule> rSubmixModule;
    AudioDeviceTypeAddrVector devices;
    // examine each mix's route type
    for (const auto& mix : mixes) {
        if ((mix.mRouteFlags & MIX_ROUTE_FLAG_LOOP_BACK) == MIX_ROUTE_FLAG_LOOP_BACK) {
@@ -4081,6 +4087,7 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)
                res = INVALID_OPERATION;
                continue;
            } else {
                devices.push_back(AudioDeviceTypeAddr(mix.mDeviceType, mix.mDeviceAddress.c_str()));
                checkOutputs = true;
            }
        }
@@ -4088,7 +4095,10 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)

    if (res == NO_ERROR && checkOutputs) {
        checkForDeviceAndOutputChanges();
        updateCallAndOutputRouting();
        changeOutputDevicesMuteState(devices);
        updateCallAndOutputRouting(false /* forceVolumeReeval */, 0 /* delayMs */,
            true /* skipDelays */);
        changeOutputDevicesMuteState(devices);
    }
    return res;
}