diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 1ff625d39249..0df26b2592ec 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1193,8 +1193,7 @@ public final class ViewRootImpl implements ViewParent, Looper.myLooper()); if (mAttachInfo.mThreadedRenderer != null) { - InputMetricsListener listener = - new InputMetricsListener(mInputEventReceiver); + InputMetricsListener listener = new InputMetricsListener(); mHardwareRendererObserver = new HardwareRendererObserver( listener, listener.data, mHandler, true /*waitForPresentTime*/); mAttachInfo.mThreadedRenderer.addObserver(mHardwareRendererObserver); @@ -1390,6 +1389,9 @@ public final class ViewRootImpl implements ViewParent, if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mHardwareAccelerated = mAttachInfo.mHardwareAccelerationRequested = true; + if (mHardwareRendererObserver != null) { + mAttachInfo.mThreadedRenderer.addObserver(mHardwareRendererObserver); + } } } } @@ -8075,6 +8077,9 @@ public final class ViewRootImpl implements ViewParent, ThreadedRenderer hardwareRenderer = mAttachInfo.mThreadedRenderer; if (hardwareRenderer != null) { + if (mHardwareRendererObserver != null) { + hardwareRenderer.removeObserver(mHardwareRendererObserver); + } if (mView != null) { hardwareRenderer.destroyHardwareResources(mView); } @@ -8576,18 +8581,12 @@ public final class ViewRootImpl implements ViewParent, super.dispose(); } } - WindowInputEventReceiver mInputEventReceiver; + private WindowInputEventReceiver mInputEventReceiver; final class InputMetricsListener implements HardwareRendererObserver.OnFrameMetricsAvailableListener { public long[] data = new long[FrameMetrics.Index.FRAME_STATS_COUNT]; - private InputEventReceiver mReceiver; - - InputMetricsListener(InputEventReceiver receiver) { - mReceiver = receiver; - } - @Override public void onFrameMetricsAvailable(int dropCountSinceLastInvocation) { final int inputEventId = (int) data[FrameMetrics.Index.INPUT_EVENT_ID]; @@ -8600,6 +8599,11 @@ public final class ViewRootImpl implements ViewParent, // available, we cannot compute end-to-end input latency metrics. return; } + final long gpuCompletedTime = data[FrameMetrics.Index.GPU_COMPLETED]; + if (mInputEventReceiver == null) { + return; + } + mInputEventReceiver.reportTimeline(inputEventId, gpuCompletedTime, presentTime); } } HardwareRendererObserver mHardwareRendererObserver; |