TimeCheck: Track audio Hidl hwbinder calls
DeviceHalHidl, StreamInHalHidl, StreamOutHalHidl
Test: adb shell dumpsys media.audio_flinger
Bug: 219958414
Change-Id: I3ff630983bdca6c8fd9ba9868e831cb063afdadc
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 8cafdfd..2813f72 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -917,13 +917,33 @@
}
{
std::string timeCheckStats = getIAudioFlingerStatistics().dump();
- dprintf(fd, "\nIAudioFlinger binder call profile\n");
+ dprintf(fd, "\nIAudioFlinger binder call profile:\n");
write(fd, timeCheckStats.c_str(), timeCheckStats.size());
extern mediautils::MethodStatistics<int>& getIEffectStatistics();
timeCheckStats = getIEffectStatistics().dump();
- dprintf(fd, "\nIEffect binder call profile\n");
+ dprintf(fd, "\nIEffect binder call profile:\n");
write(fd, timeCheckStats.c_str(), timeCheckStats.size());
+
+ // Automatically fetch HIDL statistics.
+ std::shared_ptr<std::vector<std::string>> hidlClassNames =
+ mediautils::getStatisticsClassesForModule(
+ METHOD_STATISTICS_MODULE_NAME_AUDIO_HIDL);
+ if (hidlClassNames) {
+ for (const auto& className : *hidlClassNames) {
+ auto stats = mediautils::getStatisticsForClass(className);
+ if (stats) {
+ timeCheckStats = stats->dump();
+ dprintf(fd, "\n%s binder call profile:\n", className.c_str());
+ write(fd, timeCheckStats.c_str(), timeCheckStats.size());
+ }
+ }
+ }
+
+ timeCheckStats = mediautils::TimeCheck::toString();
+ dprintf(fd, "\nTimeCheck:\n");
+ write(fd, timeCheckStats.c_str(), timeCheckStats.size());
+ dprintf(fd, "\n");
}
}
return NO_ERROR;