Loading core/java/com/android/internal/jank/FrameTracker.java +11 −2 Original line number Original line Diff line number Diff line Loading @@ -102,6 +102,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener private boolean mMetricsFinalized; private boolean mMetricsFinalized; private boolean mCancelled = false; private boolean mCancelled = false; private FrameTrackerListener mListener; private FrameTrackerListener mListener; private boolean mTracingStarted = false; private static class JankInfo { private static class JankInfo { long frameVsyncId; long frameVsyncId; Loading Loading @@ -207,7 +208,15 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener public synchronized void begin() { public synchronized void begin() { mBeginVsyncId = mChoreographer.getVsyncId() + 1; mBeginVsyncId = mChoreographer.getVsyncId() + 1; mSession.setTimeStamp(System.nanoTime()); mSession.setTimeStamp(System.nanoTime()); mChoreographer.mChoreographer.postCallback(Choreographer.CALLBACK_INPUT, () -> { synchronized (FrameTracker.this) { if (mCancelled || mEndVsyncId != INVALID_ID) { return; } mTracingStarted = true; Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId); Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId); } }, null); mRendererWrapper.addObserver(mObserver); mRendererWrapper.addObserver(mObserver); if (DEBUG) { if (DEBUG) { Log.d(TAG, "begin: " + mSession.getName() + ", begin=" + mBeginVsyncId); Log.d(TAG, "begin: " + mSession.getName() + ", begin=" + mBeginVsyncId); Loading Loading @@ -255,7 +264,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener */ */ public synchronized void cancel(@Reasons int reason) { public synchronized void cancel(@Reasons int reason) { // We don't need to end the trace section if it never begun. // We don't need to end the trace section if it never begun. if (mBeginVsyncId != INVALID_ID) { if (mTracingStarted) { Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId); Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId); } } mCancelled = true; mCancelled = true; Loading core/java/com/android/internal/jank/InteractionJankMonitor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -79,6 +79,12 @@ import java.util.concurrent.TimeUnit; /** /** * This class let users to begin and end the always on tracing mechanism. * This class let users to begin and end the always on tracing mechanism. * * Enabling for local development: * * adb shell device_config put interaction_jank_monitor enabled true * adb shell device_config put interaction_jank_monitor sampling_interval 1 * * @hide * @hide */ */ public class InteractionJankMonitor { public class InteractionJankMonitor { Loading Loading
core/java/com/android/internal/jank/FrameTracker.java +11 −2 Original line number Original line Diff line number Diff line Loading @@ -102,6 +102,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener private boolean mMetricsFinalized; private boolean mMetricsFinalized; private boolean mCancelled = false; private boolean mCancelled = false; private FrameTrackerListener mListener; private FrameTrackerListener mListener; private boolean mTracingStarted = false; private static class JankInfo { private static class JankInfo { long frameVsyncId; long frameVsyncId; Loading Loading @@ -207,7 +208,15 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener public synchronized void begin() { public synchronized void begin() { mBeginVsyncId = mChoreographer.getVsyncId() + 1; mBeginVsyncId = mChoreographer.getVsyncId() + 1; mSession.setTimeStamp(System.nanoTime()); mSession.setTimeStamp(System.nanoTime()); mChoreographer.mChoreographer.postCallback(Choreographer.CALLBACK_INPUT, () -> { synchronized (FrameTracker.this) { if (mCancelled || mEndVsyncId != INVALID_ID) { return; } mTracingStarted = true; Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId); Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId); } }, null); mRendererWrapper.addObserver(mObserver); mRendererWrapper.addObserver(mObserver); if (DEBUG) { if (DEBUG) { Log.d(TAG, "begin: " + mSession.getName() + ", begin=" + mBeginVsyncId); Log.d(TAG, "begin: " + mSession.getName() + ", begin=" + mBeginVsyncId); Loading Loading @@ -255,7 +264,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener */ */ public synchronized void cancel(@Reasons int reason) { public synchronized void cancel(@Reasons int reason) { // We don't need to end the trace section if it never begun. // We don't need to end the trace section if it never begun. if (mBeginVsyncId != INVALID_ID) { if (mTracingStarted) { Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId); Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId); } } mCancelled = true; mCancelled = true; Loading
core/java/com/android/internal/jank/InteractionJankMonitor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -79,6 +79,12 @@ import java.util.concurrent.TimeUnit; /** /** * This class let users to begin and end the always on tracing mechanism. * This class let users to begin and end the always on tracing mechanism. * * Enabling for local development: * * adb shell device_config put interaction_jank_monitor enabled true * adb shell device_config put interaction_jank_monitor sampling_interval 1 * * @hide * @hide */ */ public class InteractionJankMonitor { public class InteractionJankMonitor { Loading