diff options
| author | 2024-05-15 22:02:54 +0000 | |
|---|---|---|
| committer | 2024-05-22 18:30:05 +0000 | |
| commit | c40c077e51b4a821784543cb81d4f9af2f2d4fae (patch) | |
| tree | 0a943d8aa52a3a6c5e1b522c909ded715a7198db | |
| parent | f1908787de81d89b97f11dc443eb607e227f0a99 (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.java | 8 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/power/ShutdownThread.java | 5 |
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)); |