Merge "lmkd: Add ability to trace lmkd kills"
diff --git a/lmkd/Android.bp b/lmkd/Android.bp
index 3f8a503..2731596 100644
--- a/lmkd/Android.bp
+++ b/lmkd/Android.bp
@@ -10,4 +10,12 @@
cflags: ["-Werror"],
init_rc: ["lmkd.rc"],
+
+ product_variables: {
+ debuggable: {
+ cflags: [
+ "-DLMKD_TRACE_KILLS"
+ ],
+ },
+ },
}
diff --git a/lmkd/lmkd.c b/lmkd/lmkd.c
index fb7cc00..c78461c 100644
--- a/lmkd/lmkd.c
+++ b/lmkd/lmkd.c
@@ -37,6 +37,25 @@
#include <log/log.h>
#include <processgroup/processgroup.h>
+/*
+ * Define LMKD_TRACE_KILLS to record lmkd kills in kernel traces
+ * to profile and correlate with OOM kills
+ */
+#ifdef LMKD_TRACE_KILLS
+
+#define ATRACE_TAG ATRACE_TAG_ALWAYS
+#include <cutils/trace.h>
+
+#define TRACE_KILL_START(pid) ATRACE_INT(__FUNCTION__, pid);
+#define TRACE_KILL_END() ATRACE_INT(__FUNCTION__, 0);
+
+#else /* LMKD_TRACE_KILLS */
+
+#define TRACE_KILL_START(pid)
+#define TRACE_KILL_END()
+
+#endif /* LMKD_TRACE_KILLS */
+
#ifndef __unused
#define __unused __attribute__((__unused__))
#endif
@@ -638,6 +657,8 @@
return -1;
}
+ TRACE_KILL_START(pid);
+
r = kill(pid, SIGKILL);
ALOGI(
"Killing '%s' (%d), uid %d, adj %d\n"
@@ -646,6 +667,8 @@
level_name[level], min_score_adj);
pid_remove(pid);
+ TRACE_KILL_END();
+
if (r) {
ALOGE("kill(%d): errno=%d", procp->pid, errno);
return -1;