Add memory heap checks for mediaserver and audioserver
Memory heap check updated and restored to mediaserver,
added as new option to audioserver.
Requires properties to be set (example for audioserver):
$ adb shell setprop libc.debug.malloc.program audioserver
$ adb shell setprop libc.debug.malloc.options backtrace=8
$ adb shell pkill audioserver
...
and to dump:
$ adb shell dumpsys media.audio_flinger -m
Bug: 28909124
Bug: 27500825
Change-Id: Ifa8c2c02b022daf1a799ee4a1d75282a3c921763
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 2b0d4c8..75998ef 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -58,7 +58,7 @@
#include <powermanager/PowerManager.h>
#include <media/IMediaLogService.h>
-
+#include <media/MemoryLeakTrackUtil.h>
#include <media/nbaio/Pipe.h>
#include <media/nbaio/PipeReader.h>
#include <media/AudioParameter.h>
@@ -471,17 +471,25 @@
}
// check for optional arguments
+ bool dumpMem = false;
bool unreachableMemory = false;
for (const auto &arg : args) {
- if (arg == String16("--unreachable")) {
+ if (arg == String16("-m")) {
+ dumpMem = true;
+ } else if (arg == String16("--unreachable")) {
unreachableMemory = true;
}
}
+ if (dumpMem) {
+ dprintf(fd, "\nDumping memory:\n");
+ std::string s = dumpMemoryAddresses(100 /* limit */);
+ write(fd, s.c_str(), s.size());
+ }
if (unreachableMemory) {
dprintf(fd, "\nDumping unreachable memory:\n");
// TODO - should limit be an argument parameter?
- std::string s = GetUnreachableMemoryString(true /* contents */, 10000 /* limit */);
+ std::string s = GetUnreachableMemoryString(true /* contents */, 100 /* limit */);
write(fd, s.c_str(), s.size());
}
}