From a7cb994b6f463b316d481ed890d3109d3595d9d7 Mon Sep 17 00:00:00 2001 From: duguowei Date: Thu, 26 May 2022 17:42:24 +0800 Subject: [PATCH] Add runtime crash information to sysprops - sys.system_server.crash_java How many times the system server has crashed within Java layer. sys.system_server.start_count is the time that system_server has started. Normally, (start_count - 1 - crash_java) is the count of native crash or the other native processes triggered system_server restart. We expect the start_count is 1, and the crash_java is 0. $ getprop | grep system_server [sys.system_server.start_count]: [5] [sys.system_server.crash_java]: [2] ... Signed-off-by: duguowei Change-Id: I14af2025def1ad8cb937b9e0dbd6d3a9d34c8558 --- core/java/com/android/internal/os/RuntimeInit.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java index 44c7f5406713e..28b98d6fab068 100644 --- a/core/java/com/android/internal/os/RuntimeInit.java +++ b/core/java/com/android/internal/os/RuntimeInit.java @@ -62,6 +62,8 @@ public class RuntimeInit { private static IBinder mApplicationObject; private static volatile boolean mCrashing = false; + private static final String SYSPROP_CRASH_COUNT = "sys.system_server.crash_java"; + private static int mCrashCount; private static volatile ApplicationWtfHandler sDefaultApplicationWtfHandler; @@ -105,6 +107,8 @@ public class RuntimeInit { // first clause in either of these two cases, only for system_server. if (mApplicationObject == null && (Process.SYSTEM_UID == Process.myUid())) { Clog_e(TAG, "*** FATAL EXCEPTION IN SYSTEM PROCESS: " + t.getName(), e); + mCrashCount = SystemProperties.getInt(SYSPROP_CRASH_COUNT, 0) + 1; + SystemProperties.set(SYSPROP_CRASH_COUNT, String.valueOf(mCrashCount)); } else { logUncaught(t.getName(), ActivityThread.currentProcessName(), Process.myPid(), e); }