AudioFlinger: Add Thread history to dumpsys
Test: Bluetooth + audioflinger dumpsys
Bug: 80155745
Change-Id: Icee723a9fe653395119dd639883be5b7d8f3f158
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index ed2b3c0..9e4d739 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -56,6 +56,7 @@
#include <system/audio_effects/effect_ns.h>
#include <system/audio_effects/effect_aec.h>
+#include <audio_utils/FdToString.h>
#include <audio_utils/primitives.h>
#include <json/json.h>
@@ -525,6 +526,12 @@
dumpLogger(mAppSetParameterLog, "App");
dumpLogger(mSystemSetParameterLog, "System");
+ // dump historical threads in the last 10 seconds
+ const std::string threadLog = mThreadLog.dumpToString(
+ "Historical Thread Log ", 0 /* lines */,
+ audio_utils_get_real_time_ns() - 10 * 60 * NANOS_PER_SECOND);
+ write(fd, threadLog.c_str(), threadLog.size());
+
BUFLOG_RESET;
if (locked) {
@@ -2291,6 +2298,16 @@
if (playbackThread != NULL) {
ALOGV("closeOutput() %d", output);
+ {
+ // Dump thread before deleting for history
+ audio_utils::FdToString fdToString;
+ const int fd = fdToString.fd();
+ if (fd >= 0) {
+ playbackThread->dump(fd, {} /* args */);
+ mThreadLog.logs(-1 /* time */, fdToString.getStringAndClose());
+ }
+ }
+
if (playbackThread->type() == ThreadBase::MIXER) {
for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
if (mPlaybackThreads.valueAt(i)->isDuplicating()) {