aaudio: name threads for easier debugging
Name them "AAudio_#" where # is an increasing index.
For example AAudio_1, AAudio_2, etc.
Also name threads that are used for sending timestamps.
Test: run write_sine_callback then dump the threads for that process.
Change-Id: Ibd8c7be1109f6c15a4601ef154038cdce2e65e11
diff --git a/media/libaaudio/src/core/AudioStream.cpp b/media/libaaudio/src/core/AudioStream.cpp
index 289e0db..4947e2b 100644
--- a/media/libaaudio/src/core/AudioStream.cpp
+++ b/media/libaaudio/src/core/AudioStream.cpp
@@ -234,6 +234,17 @@
if (err != 0) {
return AAudioConvert_androidToAAudioResult(-errno);
} else {
+ // Name the thread with an increasing index, "AAudio_#", for debugging.
+ static std::atomic<uint32_t> nextThreadIndex{1};
+ char name[16]; // max length for a pthread_name
+ uint32_t index = nextThreadIndex++;
+ // Wrap the index so that we do not hit the 16 char limit
+ // and to avoid hard-to-read large numbers.
+ index = index % 100000; // arbitrary
+ snprintf(name, sizeof(name), "AAudio_%u", index);
+ err = pthread_setname_np(mThread, name);
+ ALOGW_IF((err != 0), "Could not set name of AAudio thread. err = %d", err);
+
mHasThread = true;
return AAUDIO_OK;
}
diff --git a/services/oboeservice/AAudioServiceStreamBase.cpp b/services/oboeservice/AAudioServiceStreamBase.cpp
index 53d2860..864fc35 100644
--- a/services/oboeservice/AAudioServiceStreamBase.cpp
+++ b/services/oboeservice/AAudioServiceStreamBase.cpp
@@ -42,7 +42,7 @@
AAudioServiceStreamBase::AAudioServiceStreamBase(AAudioService &audioService)
: mUpMessageQueue(nullptr)
- , mTimestampThread()
+ , mTimestampThread("AATime")
, mAtomicTimestamp()
, mAudioService(audioService) {
mMmapClient.clientUid = -1;
diff --git a/services/oboeservice/AAudioThread.cpp b/services/oboeservice/AAudioThread.cpp
index fbb0da4..ed7895b 100644
--- a/services/oboeservice/AAudioThread.cpp
+++ b/services/oboeservice/AAudioThread.cpp
@@ -27,12 +27,26 @@
using namespace aaudio;
+std::atomic<uint32_t> AAudioThread::mNextThreadIndex{1};
-AAudioThread::AAudioThread()
- : mRunnable(nullptr)
- , mHasThread(false) {
+AAudioThread::AAudioThread(const char *prefix) {
+ setup(prefix);
+}
+
+AAudioThread::AAudioThread() {
+ setup("AAudio");
+}
+
+void AAudioThread::setup(const char *prefix) {
// mThread is a pthread_t of unknown size so we need memset().
memset(&mThread, 0, sizeof(mThread));
+
+ // Name the thread with an increasing index, "prefix_#", for debugging.
+ uint32_t index = mNextThreadIndex++;
+ // Wrap the index so that we do not hit the 16 char limit
+ // and to avoid hard-to-read large numbers.
+ index = index % 100000; // arbitrary
+ snprintf(mName, sizeof(mName), "%s_%u", prefix, index);
}
void AAudioThread::dispatch() {
@@ -64,6 +78,8 @@
ALOGE("start() - pthread_create() returned %d %s", err, strerror(err));
return AAudioConvert_androidToAAudioResult(-err);
} else {
+ int err = pthread_setname_np(mThread, mName);
+ ALOGW_IF((err != 0), "Could not set name of AAudioThread. err = %d", err);
mHasThread = true;
return AAUDIO_OK;
}
diff --git a/services/oboeservice/AAudioThread.h b/services/oboeservice/AAudioThread.h
index 02f1459..ffc9b7b 100644
--- a/services/oboeservice/AAudioThread.h
+++ b/services/oboeservice/AAudioThread.h
@@ -43,7 +43,9 @@
{
public:
AAudioThread();
- AAudioThread(Runnable *runnable);
+
+ AAudioThread(const char *prefix);
+
virtual ~AAudioThread() = default;
/**
@@ -66,10 +68,15 @@
void dispatch(); // called internally from 'C' thread wrapper
private:
- Runnable *mRunnable;
- bool mHasThread;
+
+ void setup(const char *prefix);
+
+ Runnable *mRunnable = nullptr;
+ bool mHasThread = false;
pthread_t mThread; // initialized in constructor
+ static std::atomic<uint32_t> mNextThreadIndex;
+ char mName[16]; // max length for a pthread_name
};
} /* namespace aaudio */