From 423346e7e295b61a699691e9f7690e3f228d7e35 Mon Sep 17 00:00:00 2001 From: Arthur Hung Date: Thu, 27 Feb 2020 21:56:11 +0800 Subject: Pass source to dispatchBatchedInputEventPending (1/2) The API requestUnbufferedDispatch allow View could receive the event in unbuffered way. But doing processUnbufferedRequest in onInputEvent is too late for the first event. Instead, we should pass the source of the input event up to onBatchedInputEventPending, and then we can use that to determine whether we could consume event immediately or not. Bug: 149715123 Test: atest ViewUnbufferedTest Change-Id: I4344a99de77d3758cc7d1df155394c89fa828f2e --- core/java/android/view/ViewRootImpl.java | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'core/java/android/view/ViewRootImpl.java') diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index dd34bcb018b9..95149deb41f6 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -504,7 +504,6 @@ public final class ViewRootImpl implements ViewParent, int mPendingInputEventCount; boolean mProcessInputEventsScheduled; boolean mUnbufferedInputDispatch; - boolean mUnbufferedInputDispatchBySource; @InputSourceClass int mUnbufferedInputSource = SOURCE_CLASS_NONE; @@ -1872,9 +1871,6 @@ public final class ViewRootImpl implements ViewParent, mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); - if (!mUnbufferedInputDispatch && !mUnbufferedInputDispatchBySource) { - scheduleConsumeBatchedInput(); - } notifyRendererOfFramePending(); pokeDrawLockIfNeeded(); } @@ -8147,7 +8143,6 @@ public final class ViewRootImpl implements ViewParent, @Override public void onInputEvent(InputEvent event) { Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility"); - processUnbufferedRequest(event); List processedEvents; try { processedEvents = @@ -8172,12 +8167,18 @@ public final class ViewRootImpl implements ViewParent, } @Override - public void onBatchedInputEventPending() { - if (mUnbufferedInputDispatch || mUnbufferedInputDispatchBySource) { - super.onBatchedInputEventPending(); - } else { - scheduleConsumeBatchedInput(); + public void onBatchedInputEventPending(int source) { + final boolean unbuffered = mUnbufferedInputDispatch + || (source & mUnbufferedInputSource) != SOURCE_CLASS_NONE; + if (unbuffered) { + if (mConsumeBatchedInputScheduled) { + unscheduleConsumeBatchedInput(); + } + // Consume event immediately if unbuffered input dispatch has been requested. + consumeBatchedInputEvents(-1); + return; } + scheduleConsumeBatchedInput(); } @Override @@ -8190,17 +8191,6 @@ public final class ViewRootImpl implements ViewParent, unscheduleConsumeBatchedInput(); super.dispose(); } - - private void processUnbufferedRequest(InputEvent event) { - if (!(event instanceof MotionEvent)) { - return; - } - mUnbufferedInputDispatchBySource = - (event.getSource() & mUnbufferedInputSource) != SOURCE_CLASS_NONE; - if (mUnbufferedInputDispatchBySource && mConsumeBatchedInputScheduled) { - scheduleConsumeBatchedInputImmediately(); - } - } } WindowInputEventReceiver mInputEventReceiver; -- cgit v1.2.3