diff options
| author | 2021-06-03 09:43:37 +0000 | |
|---|---|---|
| committer | 2021-06-03 09:43:37 +0000 | |
| commit | 8b366b9b8ef95ddd97b734bc44a534adda066049 (patch) | |
| tree | 6e58d3303c28202588f172e6662226fd0783f7a3 | |
| parent | 822d0b7f7750c88f74c22e11257547b1d4425798 (diff) | |
| parent | 5a53d8c1721950e4e8f4b5157215e187dd3a79b6 (diff) | |
Merge "Add a unique id to Perfetto trace and Watchdog dropbox header." into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/Watchdog.java | 26 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/TraceErrorLogger.java | 2 |
2 files changed, 22 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index 6644b28f1c4d..0f9a6fa2a8da 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -45,6 +45,7 @@ import com.android.internal.os.ProcessCpuTracker; import com.android.internal.os.ZygoteConnectionConstants; import com.android.internal.util.FrameworkStatsLog; import com.android.server.am.ActivityManagerService; +import com.android.server.am.TraceErrorLogger; import com.android.server.wm.SurfaceAnimationThread; import java.io.BufferedReader; @@ -59,6 +60,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.UUID; import java.util.concurrent.TimeUnit; /** This class calls its monitor every minute. Killing this process if they don't return **/ @@ -159,6 +161,8 @@ public class Watchdog { private boolean mAllowRestart = true; private final List<Integer> mInterestingJavaPids = new ArrayList<>(); + private final TraceErrorLogger mTraceErrorLogger; + /** * Used for checking status of handle threads and scheduling monitor callbacks. */ @@ -367,6 +371,8 @@ public class Watchdog { // See the notes on DEFAULT_TIMEOUT. assert DB || DEFAULT_TIMEOUT > ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS; + + mTraceErrorLogger = new TraceErrorLogger(); } /** @@ -667,6 +673,19 @@ public class Watchdog { // Then kill this process so that the system will restart. EventLog.writeEvent(EventLogTags.WATCHDOG, subject); + final UUID errorId; + if (mTraceErrorLogger.isAddErrorIdEnabled()) { + errorId = mTraceErrorLogger.generateErrorId(); + mTraceErrorLogger.addErrorIdToTrace(errorId); + } else { + errorId = null; + } + + // Log the atom as early as possible since it is used as a mechanism to trigger + // Perfetto. Ideally, the Perfetto trace capture should happen as close to the + // point in time when the Watchdog happens as possible. + FrameworkStatsLog.write(FrameworkStatsLog.SYSTEM_SERVER_WATCHDOG_OCCURRED, subject); + long anrTime = SystemClock.uptimeMillis(); StringBuilder report = new StringBuilder(); report.append(MemoryPressureUtil.currentPsiState()); @@ -691,7 +710,6 @@ public class Watchdog { // Try to add the error to the dropbox, but assuming that the ActivityManager // itself may be deadlocked. (which has happened, causing this statement to // deadlock and the watchdog as a whole to be ineffective) - final String localSubject = subject; Thread dropboxThread = new Thread("watchdogWriteToDropbox") { public void run() { // If a watched thread hangs before init() is called, we don't have a @@ -699,11 +717,9 @@ public class Watchdog { if (mActivity != null) { mActivity.addErrorToDropBox( "watchdog", null, "system_server", null, null, null, - null, report.toString(), stack, null, null, null, null); - + null, report.toString(), stack, null, null, null, + errorId); } - FrameworkStatsLog.write(FrameworkStatsLog.SYSTEM_SERVER_WATCHDOG_OCCURRED, - localSubject); } }; dropboxThread.start(); diff --git a/services/core/java/com/android/server/am/TraceErrorLogger.java b/services/core/java/com/android/server/am/TraceErrorLogger.java index f055be235716..02e5f6dc5d8c 100644 --- a/services/core/java/com/android/server/am/TraceErrorLogger.java +++ b/services/core/java/com/android/server/am/TraceErrorLogger.java @@ -26,7 +26,7 @@ import java.util.UUID; * * @hide */ -class TraceErrorLogger { +public class TraceErrorLogger { private static final String COUNTER_PREFIX = "ErrorId:"; private static final String ADD_ERROR_ID = "add_error_id"; private static final int PLACEHOLDER_VALUE = 1; |