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

Commit 351e288d authored by jiabin's avatar jiabin
Browse files

Add an API to query audio server death count.

When running AAudio CTS test, there is failure shown recently due to
audio server crash. In that case, adding such an API can help detect
audio server crash in tests.

Bug: 223404165
Test: make
Change-Id: Idca2443d094fa8c57a9f76c02fd880baca4021cb
parent 14d0ae53
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -91,6 +91,13 @@ AAUDIO_API aaudio_policy_t AAudio_getMMapPolicy();
 */
AAUDIO_API bool AAudioStream_isMMapUsed(AAudioStream* stream);

/**
 * Returns the count of audio server death.
 *
 * @return audio server death count.
 */
AAUDIO_API int AAudio_getAudioServerDeathCount();

#ifdef __cplusplus
}
#endif
+5 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@

#include <aaudio/AAudio.h>
#include <aaudio/AAudioTesting.h>
#include <media/AudioSystem.h>
#include "AudioClock.h"
#include "AudioGlobal.h"
#include "AudioStreamBuilder.h"
@@ -604,3 +605,7 @@ AAUDIO_API aaudio_channel_mask_t AAudioStream_getChannelMask(AAudioStream* strea
    // Do not return channel index masks as they are not public.
    return AAudio_isChannelIndexMask(channelMask) ? AAUDIO_UNSPECIFIED : channelMask;
}

AAUDIO_API int AAudio_getAudioServerDeathCount() {
    return android::AudioSystem::getAudioFlingerDeathCount();
}
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ LIBAAUDIO {
    AAudio_convertResultToText;
    AAudio_convertStreamStateToText;
    AAudio_createStreamBuilder;
    AAudio_getAudioServerDeathCount;    # introduced=33
    AAudio_getMMapPolicy;
    AAudio_setMMapPolicy;
    AAudioStreamBuilder_setPerformanceMode;
+10 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#define LOG_TAG "AudioSystem"
//#define LOG_NDEBUG 0

#include <atomic>

#include <utils/Log.h>

#include <android/media/IAudioPolicyService.h>
@@ -82,6 +84,8 @@ sp<CaptureStateListenerImpl> gSoundTriggerCaptureStateListener = nullptr;
// HotwordDetectionService.
sp<IBinder> gAudioFlingerBinder = nullptr;

std::atomic<int> gAudioFlingerDeathCount{0};

void AudioSystem::setAudioFlingerBinder(const sp<IBinder>& audioFlinger) {
    if (audioFlinger->getInterfaceDescriptor() != media::IAudioFlingerService::descriptor) {
        ALOGE("setAudioFlingerBinder: received a binder of type %s",
@@ -535,6 +539,8 @@ void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who __unused

    reportError(DEAD_OBJECT);

    gAudioFlingerDeathCount += 1;

    ALOGW("AudioFlinger server died!");
}

@@ -2426,6 +2432,10 @@ int32_t AudioSystem::getAAudioHardwareBurstMinUsec() {
    return af->getAAudioHardwareBurstMinUsec();
}

int32_t AudioSystem::getAudioFlingerDeathCount() {
    return gAudioFlingerDeathCount.load();
}

// ---------------------------------------------------------------------------

int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
+5 −0
Original line number Diff line number Diff line
@@ -564,6 +564,11 @@ public:
    static status_t getDirectProfilesForAttributes(const audio_attributes_t* attr,
                                            std::vector<audio_profile>* audioProfiles);

    /**
     * @return count of AudioFlinger death.
     */
    static int32_t getAudioFlingerDeathCount();

    // A listener for capture state changes.
    class CaptureStateListener : public virtual RefBase {
    public: