From 2088e5096757e63363b0ed7b9c66e072786ba6e1 Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Thu, 28 Apr 2022 15:58:21 -0400 Subject: [PATCH] Adds perfetto tracing to ScrollCaptureConnection Change-Id: I7d018fa7c4e4eb3261a75165713303756b271520 --- .../android/view/ScrollCaptureConnection.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/java/android/view/ScrollCaptureConnection.java b/core/java/android/view/ScrollCaptureConnection.java index cba0e970d3894..0f27989642a91 100644 --- a/core/java/android/view/ScrollCaptureConnection.java +++ b/core/java/android/view/ScrollCaptureConnection.java @@ -16,6 +16,8 @@ package android.view; +import static android.os.Trace.TRACE_TAG_GRAPHICS; + import static java.util.Objects.requireNonNull; import android.annotation.BinderThread; @@ -27,6 +29,7 @@ import android.os.CancellationSignal; import android.os.IBinder; import android.os.ICancellationSignal; import android.os.RemoteException; +import android.os.Trace; import android.util.CloseGuard; import android.util.Log; @@ -48,6 +51,12 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple IBinder.DeathRecipient { private static final String TAG = "ScrollCaptureConnection"; + private static final String TRACE_TRACK = "Scroll Capture"; + private static final String START_CAPTURE = "startCapture"; + private static final String REQUEST_IMAGE = "requestImage"; + + private static final String END_CAPTURE = "endCapture"; + private static final String SESSION = "Session"; private final Object mLock = new Object(); private final Rect mScrollBounds; @@ -62,6 +71,7 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple private volatile boolean mActive; private volatile boolean mConnected; + private int mTraceId; /** * Constructs a ScrollCaptureConnection. @@ -86,6 +96,9 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple @Override public ICancellationSignal startCapture(@NonNull Surface surface, @NonNull IScrollCaptureCallbacks remote) throws RemoteException { + mTraceId = System.identityHashCode(surface); + Trace.asyncTraceForTrackBegin(TRACE_TAG_GRAPHICS, TRACE_TRACK, SESSION, mTraceId); + Trace.asyncTraceForTrackBegin(TRACE_TAG_GRAPHICS, TRACE_TRACK, START_CAPTURE, mTraceId); mCloseGuard.open("ScrollCaptureConnection.close"); if (!surface.isValid()) { @@ -116,11 +129,13 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple close(); } mCancellation = null; + Trace.asyncTraceForTrackEnd(TRACE_TAG_GRAPHICS, TRACE_TRACK, START_CAPTURE, mTraceId); } @BinderThread @Override public ICancellationSignal requestImage(Rect requestRect) throws RemoteException { + Trace.asyncTraceForTrackBegin(TRACE_TAG_GRAPHICS, TRACE_TRACK, REQUEST_IMAGE, mTraceId); checkActive(); cancelPendingAction(); ICancellationSignal cancellation = CancellationSignal.createTransport(); @@ -144,11 +159,13 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple } finally { mCancellation = null; } + Trace.asyncTraceForTrackEnd(TRACE_TAG_GRAPHICS, TRACE_TRACK, REQUEST_IMAGE, mTraceId); } @BinderThread @Override public ICancellationSignal endCapture() throws RemoteException { + Trace.asyncTraceForTrackBegin(TRACE_TAG_GRAPHICS, TRACE_TRACK, END_CAPTURE, mTraceId); checkActive(); cancelPendingAction(); ICancellationSignal cancellation = CancellationSignal.createTransport(); @@ -174,17 +191,22 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple mCancellation = null; close(); } + Trace.asyncTraceForTrackEnd(TRACE_TAG_GRAPHICS, TRACE_TRACK, END_CAPTURE, mTraceId); + Trace.asyncTraceForTrackEnd(TRACE_TAG_GRAPHICS, TRACE_TRACK, SESSION, mTraceId); } @Override public void binderDied() { + Trace.instantForTrack(TRACE_TAG_GRAPHICS, TRACE_TRACK, "binderDied"); Log.e(TAG, "Controlling process just died."); close(); + } @BinderThread @Override public void close() { + Trace.instantForTrack(TRACE_TAG_GRAPHICS, TRACE_TRACK, "close"); if (mActive) { Log.w(TAG, "close(): capture session still active! Ending now."); cancelPendingAction(); @@ -201,11 +223,13 @@ public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub imple mRemote = null; mLocal = null; mCloseGuard.close(); + Trace.endSection(); Reference.reachabilityFence(this); } private void cancelPendingAction() { if (mCancellation != null) { + Trace.instantForTrack(TRACE_TAG_GRAPHICS, TRACE_TRACK, "CancellationSignal.cancel"); Log.w(TAG, "cancelling pending operation."); mCancellation.cancel(); mCancellation = null;