summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewRootImpl.java
diff options
context:
space:
mode:
authorArthur Hung <arthurhung@google.com>2020-02-27 21:56:11 +0800
committerArthur Hung <arthurhung@google.com>2020-03-17 07:28:59 +0000
commit423346e7e295b61a699691e9f7690e3f228d7e35 (patch)
tree2ea628c76f449c9e073a20da92b361ca4bd7eb50 /core/java/android/view/ViewRootImpl.java
parent8888ec9144a5a79e8e877fb19cbbe6cc3cc4dc76 (diff)
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
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
-rw-r--r--core/java/android/view/ViewRootImpl.java32
1 files changed, 11 insertions, 21 deletions
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<InputEvent> 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;