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

Commit 225aef65 authored by Andy Hung's avatar Andy Hung
Browse files

audioserver: Ensure minimum binder priority set

Prevents binder threads from waiting as runnable and
helps priority inversion on mutexes.  Those issues
can cause sporadic audio glitches.

Test: instrumeted logging
Bug: 261646227
Change-Id: Ic96f8c2f35fc1096d560b16a702392c807f0504e
parent 7fb4bf6a
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -22,10 +22,10 @@

#include <stdint.h>
#include <sys/types.h>

#include "IAudioFlinger.h"
#include <binder/IPCThreadState.h>
#include <binder/Parcel.h>
#include "IAudioFlinger.h"
#include <system/thread_defs.h>

namespace android {

@@ -840,7 +840,9 @@ status_t AudioFlingerClientAdapter::getSupportedLatencyModes(
////////////////////////////////////////////////////////////////////////////////////////////////////
// AudioFlingerServerAdapter
AudioFlingerServerAdapter::AudioFlingerServerAdapter(
        const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {}
        const sp<AudioFlingerServerAdapter::Delegate>& delegate) : mDelegate(delegate) {
    setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
}

status_t AudioFlingerServerAdapter::onTransact(uint32_t code,
                                               const Parcel& data,
+1 −0
Original line number Diff line number Diff line
@@ -1730,6 +1730,7 @@ AudioFlinger::EffectHandle::EffectHandle(const sp<EffectBase>& effect,
    mNotifyFramesProcessed(notifyFramesProcessed)
{
    ALOGV("constructor %p client %p", this, client.get());
    setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);

    if (client == 0) {
        return;
+2 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ AudioFlinger::TrackHandle::TrackHandle(const sp<AudioFlinger::PlaybackThread::Tr
    : BnAudioTrack(),
      mTrack(track)
{
    setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
}

AudioFlinger::TrackHandle::~TrackHandle() {
@@ -2329,6 +2330,7 @@ AudioFlinger::RecordHandle::RecordHandle(
    : BnAudioRecord(),
    mRecordTrack(recordTrack)
{
    setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
}

AudioFlinger::RecordHandle::~RecordHandle() {
+1 −0
Original line number Diff line number Diff line
@@ -202,6 +202,7 @@ AudioPolicyService::AudioPolicyService()
      mCaptureStateNotifier(false),
      mCreateAudioPolicyManager(createAudioPolicyManager),
      mDestroyAudioPolicyManager(destroyAudioPolicyManager) {
      setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
}

void AudioPolicyService::loadAudioPolicyManager()
+1 −0
Original line number Diff line number Diff line
@@ -255,6 +255,7 @@ Spatializer::Spatializer(effect_descriptor_t engineDescriptor, SpatializerPolicy
    : mEngineDescriptor(engineDescriptor),
      mPolicyCallback(callback) {
    ALOGV("%s", __func__);
    setMinSchedulerPolicy(SCHED_NORMAL, ANDROID_PRIORITY_AUDIO);
}

void Spatializer::onFirstRef() {