Merge "Make sure the removeObservers be called correctly" into sc-v2-dev
This commit is contained in:
@@ -51,6 +51,7 @@ import com.android.internal.util.FrameworkStatsLog;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that allows the app to get the frame metrics from HardwareRendererObserver.
|
* A class that allows the app to get the frame metrics from HardwareRendererObserver.
|
||||||
@@ -108,6 +109,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
private boolean mCancelled = false;
|
private boolean mCancelled = false;
|
||||||
private FrameTrackerListener mListener;
|
private FrameTrackerListener mListener;
|
||||||
private boolean mTracingStarted = false;
|
private boolean mTracingStarted = false;
|
||||||
|
private Runnable mWaitForFinishTimedOut;
|
||||||
|
|
||||||
private static class JankInfo {
|
private static class JankInfo {
|
||||||
long frameVsyncId;
|
long frameVsyncId;
|
||||||
@@ -174,8 +176,8 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
// If the surface isn't valid yet, wait until it's created.
|
// If the surface isn't valid yet, wait until it's created.
|
||||||
if (mViewRoot.getSurfaceControl().isValid()) {
|
if (mViewRoot.getSurfaceControl().isValid()) {
|
||||||
mSurfaceControl = mViewRoot.getSurfaceControl();
|
mSurfaceControl = mViewRoot.getSurfaceControl();
|
||||||
mSurfaceChangedCallback = null;
|
}
|
||||||
} else {
|
|
||||||
mSurfaceChangedCallback = new ViewRootImpl.SurfaceChangedCallback() {
|
mSurfaceChangedCallback = new ViewRootImpl.SurfaceChangedCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void surfaceCreated(SurfaceControl.Transaction t) {
|
public void surfaceCreated(SurfaceControl.Transaction t) {
|
||||||
@@ -221,7 +223,6 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
mViewRoot.addSurfaceChangedCallback(mSurfaceChangedCallback);
|
mViewRoot.addSurfaceChangedCallback(mSurfaceChangedCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Begin a trace session of the CUJ.
|
* Begin a trace session of the CUJ.
|
||||||
@@ -283,10 +284,17 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
if (mListener != null) {
|
if (mListener != null) {
|
||||||
mListener.onCujEvents(mSession, ACTION_SESSION_END);
|
mListener.onCujEvents(mSession, ACTION_SESSION_END);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// We don't remove observer here,
|
// We don't remove observer here,
|
||||||
// will remove it when all the frame metrics in this duration are called back.
|
// will remove it when all the frame metrics in this duration are called back.
|
||||||
// See onFrameMetricsAvailable for the logic of removing the observer.
|
// See onFrameMetricsAvailable for the logic of removing the observer.
|
||||||
|
// Let's wait for all callbacks to finish for at most a minute.
|
||||||
|
mWaitForFinishTimedOut = () -> {
|
||||||
|
Log.e(TAG, "force finish cuj because of time out:" + mSession.getName());
|
||||||
|
finish(mJankInfos.size() - 1);
|
||||||
|
};
|
||||||
|
mHandler.postDelayed(mWaitForFinishTimedOut, TimeUnit.MINUTES.toMillis(1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -423,7 +431,8 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void finish(int indexOnOrAfterEnd) {
|
private void finish(int indexOnOrAfterEnd) {
|
||||||
|
mHandler.removeCallbacks(mWaitForFinishTimedOut);
|
||||||
|
mWaitForFinishTimedOut = null;
|
||||||
mMetricsFinalized = true;
|
mMetricsFinalized = true;
|
||||||
|
|
||||||
// The tracing has been ended, remove the observer, see if need to trigger perfetto.
|
// The tracing has been ended, remove the observer, see if need to trigger perfetto.
|
||||||
@@ -509,7 +518,7 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.i(TAG, "FrameTracker: CUJ=" + mSession.getName()
|
Log.i(TAG, "finish: CUJ=" + mSession.getName()
|
||||||
+ " (" + mBeginVsyncId + "," + mEndVsyncId + ")"
|
+ " (" + mBeginVsyncId + "," + mEndVsyncId + ")"
|
||||||
+ " totalFrames=" + totalFramesCount
|
+ " totalFrames=" + totalFramesCount
|
||||||
+ " missedAppFrames=" + missedAppFramesCount
|
+ " missedAppFrames=" + missedAppFramesCount
|
||||||
|
|||||||
Reference in New Issue
Block a user