Merge "Add an API to query audio server death count."
diff --git a/media/libaaudio/include/aaudio/AAudioTesting.h b/media/libaaudio/include/aaudio/AAudioTesting.h
index 0f2d7a2..edda6d0 100644
--- a/media/libaaudio/include/aaudio/AAudioTesting.h
+++ b/media/libaaudio/include/aaudio/AAudioTesting.h
@@ -91,6 +91,13 @@
*/
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
diff --git a/media/libaaudio/src/core/AAudioAudio.cpp b/media/libaaudio/src/core/AAudioAudio.cpp
index 90ff4a5..b0504c9 100644
--- a/media/libaaudio/src/core/AAudioAudio.cpp
+++ b/media/libaaudio/src/core/AAudioAudio.cpp
@@ -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 @@
// 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();
+}
diff --git a/media/libaaudio/src/libaaudio.map.txt b/media/libaaudio/src/libaaudio.map.txt
index f45b816..f0cb595 100644
--- a/media/libaaudio/src/libaaudio.map.txt
+++ b/media/libaaudio/src/libaaudio.map.txt
@@ -3,6 +3,7 @@
AAudio_convertResultToText;
AAudio_convertStreamStateToText;
AAudio_createStreamBuilder;
+ AAudio_getAudioServerDeathCount; # introduced=33
AAudio_getMMapPolicy;
AAudio_setMMapPolicy;
AAudioStreamBuilder_setPerformanceMode;
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index a7b10b2..fe6a24a 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -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 @@
// 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 @@
reportError(DEAD_OBJECT);
+ gAudioFlingerDeathCount += 1;
+
ALOGW("AudioFlinger server died!");
}
@@ -2410,6 +2416,10 @@
return af->getAAudioHardwareBurstMinUsec();
}
+int32_t AudioSystem::getAudioFlingerDeathCount() {
+ return gAudioFlingerDeathCount.load();
+}
+
// ---------------------------------------------------------------------------
int AudioSystem::AudioPolicyServiceClient::addAudioPortCallback(
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index e89ce15..01f22a8 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -565,6 +565,11 @@
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: