diff options
| author | Siarhei Vishniakou <svv@google.com> | 2021-05-17 17:35:24 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-05-17 17:35:24 +0000 |
| commit | 234adf7cb22cf20d4a04631e26c262d931357b12 (patch) | |
| tree | 471b02bcccbe663be0ec4f82e5b457bec96c771f /core/java/android/view/ViewRootImpl.java | |
| parent | bc8505c42b5aba7bed4c48406bc65ff48fc0d9da (diff) | |
| parent | b3ea67fa4214c28d64edd788c0618e50b39f553e (diff) | |
Merge "Check mInputEventReceiver before sending timeline -- 2" into sc-dev
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 89562dc494e9..9bbd5dde2d4f 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1201,8 +1201,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); @@ -1414,6 +1413,9 @@ public final class ViewRootImpl implements ViewParent, if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mHardwareAccelerated = mAttachInfo.mHardwareAccelerationRequested = true; + if (mHardwareRendererObserver != null) { + mAttachInfo.mThreadedRenderer.addObserver(mHardwareRendererObserver); + } } } } @@ -8118,6 +8120,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); } @@ -8619,18 +8624,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]; @@ -8643,6 +8642,20 @@ 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; + } + if (gpuCompletedTime >= presentTime) { + final double discrepancyMs = (gpuCompletedTime - presentTime) * 1E-6; + final long vsyncId = data[FrameMetrics.Index.FRAME_TIMELINE_VSYNC_ID]; + Log.w(TAG, "Not reporting timeline because gpuCompletedTime is " + discrepancyMs + + "ms ahead of presentTime. FRAME_TIMELINE_VSYNC_ID=" + vsyncId + + ", INPUT_EVENT_ID=" + inputEventId); + // TODO(b/186664409): figure out why this sometimes happens + return; + } + mInputEventReceiver.reportTimeline(inputEventId, gpuCompletedTime, presentTime); } } HardwareRendererObserver mHardwareRendererObserver; |
