summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wenhui Yang <wenhuiy@google.com> 2024-05-15 22:02:54 +0000
committer Wenhui Yang <wenhuiy@google.com> 2024-05-22 18:30:05 +0000
commitc40c077e51b4a821784543cb81d4f9af2f2d4fae (patch)
tree0a943d8aa52a3a6c5e1b522c909ded715a7198db
parentf1908787de81d89b97f11dc443eb607e227f0a99 (diff)
Capture transaction traces before system reboot
Bug: 299937754 Test: bugreport - data/misc/wmtrace/systemRestart_transactions.winscope Test: go/winscope Change-Id: I3dddb937005972f1a6878f72a7aedb8a9876eb3c
-rw-r--r--core/java/android/view/SurfaceControl.java8
-rw-r--r--core/jni/android_view_SurfaceControl.cpp6
-rw-r--r--services/core/java/com/android/server/power/ShutdownThread.java5
3 files changed, 19 insertions, 0 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 1cd7d349a9af..c3e045b305c6 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -302,6 +302,7 @@ public final class SurfaceControl implements Parcelable {
long desiredPresentTimeNanos);
private static native void nativeSetFrameTimeline(long transactionObj,
long vsyncId);
+ private static native void nativeNotifyShutdown();
/**
* Transforms that can be applied to buffers as they are displayed to a window.
@@ -4765,4 +4766,11 @@ public final class SurfaceControl implements Parcelable {
return nativeGetStalledTransactionInfo(pid);
}
+ /**
+ * Notify the SurfaceFlinger to capture transaction traces when shutdown.
+ * @hide
+ */
+ public static void notifyShutdown() {
+ nativeNotifyShutdown();
+ }
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 1aa635c6ceb7..23f78084d60c 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -2201,6 +2201,10 @@ static jobject nativeGetStalledTransactionInfo(JNIEnv* env, jclass clazz, jint p
return jStalledTransactionInfo;
}
+static void nativeNotifyShutdown() {
+ SurfaceComposerClient::notifyShutdown();
+}
+
// ----------------------------------------------------------------------------
SurfaceControl* android_view_SurfaceControl_getNativeSurfaceControl(JNIEnv* env,
@@ -2476,6 +2480,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
(void*) nativeGetStalledTransactionInfo },
{"nativeSetDesiredPresentTimeNanos", "(JJ)V",
(void*) nativeSetDesiredPresentTimeNanos },
+ {"nativeNotifyShutdown", "()V",
+ (void*)nativeNotifyShutdown },
// clang-format on
};
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index afcf49daf0c4..6b7f2fa1cf0d 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -54,6 +54,7 @@ import android.util.ArrayMap;
import android.util.Log;
import android.util.Slog;
import android.util.TimingsTraceLog;
+import android.view.SurfaceControl;
import android.view.WindowManager;
import com.android.internal.annotations.VisibleForTesting;
@@ -459,6 +460,10 @@ public final class ShutdownThread extends Thread {
metricShutdownStart();
metricStarted(METRIC_SYSTEM_SERVER);
+ // Notify SurfaceFlinger that the device is shutting down.
+ // Transaction traces should be captured at this stage.
+ SurfaceControl.notifyShutdown();
+
// Start dumping check points for this shutdown in a separate thread.
Thread dumpCheckPointsThread = ShutdownCheckPoints.newDumpThread(
new File(CHECK_POINTS_FILE_BASENAME));