Loading core/java/android/view/BatchedInputEventReceiver.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class BatchedInputEventReceiver extends InputEventReceiver { } } @Override @Override public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { scheduleBatchedInput(); scheduleBatchedInput(); } } Loading core/java/android/view/InputEventReceiver.java +2 −8 Original line number Original line Diff line number Diff line Loading @@ -147,8 +147,9 @@ public abstract class InputEventReceiver { * samples until the recipient calls {@link #consumeBatchedInputEvents} or * samples until the recipient calls {@link #consumeBatchedInputEvents} or * an event is received that ends the batch and causes it to be consumed * an event is received that ends the batch and causes it to be consumed * immediately (such as a pointer up event). * immediately (such as a pointer up event). * @param source The source of the batched event. */ */ public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { consumeBatchedInputEvents(-1); consumeBatchedInputEvents(-1); } } Loading Loading @@ -219,13 +220,6 @@ public abstract class InputEventReceiver { onInputEvent(event); onInputEvent(event); } } // Called from native code. @SuppressWarnings("unused") @UnsupportedAppUsage private void dispatchBatchedInputEventPending() { onBatchedInputEventPending(); } /** /** * Factory for InputEventReceiver * Factory for InputEventReceiver */ */ Loading core/java/android/view/ViewRootImpl.java +11 −21 Original line number Original line Diff line number Diff line Loading @@ -504,7 +504,6 @@ public final class ViewRootImpl implements ViewParent, int mPendingInputEventCount; int mPendingInputEventCount; boolean mProcessInputEventsScheduled; boolean mProcessInputEventsScheduled; boolean mUnbufferedInputDispatch; boolean mUnbufferedInputDispatch; boolean mUnbufferedInputDispatchBySource; @InputSourceClass @InputSourceClass int mUnbufferedInputSource = SOURCE_CLASS_NONE; int mUnbufferedInputSource = SOURCE_CLASS_NONE; Loading Loading @@ -1872,9 +1871,6 @@ public final class ViewRootImpl implements ViewParent, mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mChoreographer.postCallback( mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); if (!mUnbufferedInputDispatch && !mUnbufferedInputDispatchBySource) { scheduleConsumeBatchedInput(); } notifyRendererOfFramePending(); notifyRendererOfFramePending(); pokeDrawLockIfNeeded(); pokeDrawLockIfNeeded(); } } Loading Loading @@ -8156,7 +8152,6 @@ public final class ViewRootImpl implements ViewParent, @Override @Override public void onInputEvent(InputEvent event) { public void onInputEvent(InputEvent event) { Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility"); Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility"); processUnbufferedRequest(event); List<InputEvent> processedEvents; List<InputEvent> processedEvents; try { try { processedEvents = processedEvents = Loading @@ -8181,12 +8176,18 @@ public final class ViewRootImpl implements ViewParent, } } @Override @Override public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { if (mUnbufferedInputDispatch || mUnbufferedInputDispatchBySource) { final boolean unbuffered = mUnbufferedInputDispatch super.onBatchedInputEventPending(); || (source & mUnbufferedInputSource) != SOURCE_CLASS_NONE; } else { if (unbuffered) { scheduleConsumeBatchedInput(); if (mConsumeBatchedInputScheduled) { unscheduleConsumeBatchedInput(); } } // Consume event immediately if unbuffered input dispatch has been requested. consumeBatchedInputEvents(-1); return; } scheduleConsumeBatchedInput(); } } @Override @Override Loading @@ -8199,17 +8200,6 @@ public final class ViewRootImpl implements ViewParent, unscheduleConsumeBatchedInput(); unscheduleConsumeBatchedInput(); super.dispose(); 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; WindowInputEventReceiver mInputEventReceiver; Loading core/jni/android_view_InputEventReceiver.cpp +33 −29 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ static struct { jmethodID dispatchInputEvent; jmethodID dispatchInputEvent; jmethodID onFocusEvent; jmethodID onFocusEvent; jmethodID dispatchBatchedInputEventPending; jmethodID onBatchedInputEventPending; } gInputEventReceiverClassInfo; } gInputEventReceiverClassInfo; Loading Loading @@ -242,16 +242,21 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, status_t status = mInputConsumer.consume(&mInputEventFactory, status_t status = mInputConsumer.consume(&mInputEventFactory, consumeBatches, frameTime, &seq, &inputEvent); consumeBatches, frameTime, &seq, &inputEvent); if (status) { if (status != OK && status != WOULD_BLOCK) { ALOGE("channel '%s' ~ Failed to consume input event. status=%d", getInputChannelName().c_str(), status); return status; } if (status == WOULD_BLOCK) { if (status == WOULD_BLOCK) { if (!skipCallbacks && !mBatchedInputEventPending if (!skipCallbacks && !mBatchedInputEventPending && mInputConsumer.hasPendingBatch()) { && mInputConsumer.hasPendingBatch()) { // There is a pending batch. Come back later. // There is a pending batch. Come back later. if (!receiverObj.get()) { if (!receiverObj.get()) { receiverObj.reset(jniGetReferent(env, mReceiverWeakGlobal)); receiverObj.reset(jniGetReferent(env, mReceiverWeakGlobal)); if (!receiverObj.get()) { if (!receiverObj.get()) { ALOGW("channel '%s' ~ Receiver object was finalized " ALOGW("channel '%s' ~ Receiver object was finalized " "without being disposed.", getInputChannelName().c_str()); "without being disposed.", getInputChannelName().c_str()); return DEAD_OBJECT; return DEAD_OBJECT; } } } } Loading @@ -261,8 +266,10 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", getInputChannelName().c_str()); getInputChannelName().c_str()); } } env->CallVoidMethod(receiverObj.get(), env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.dispatchBatchedInputEventPending); gInputEventReceiverClassInfo.onBatchedInputEventPending, mInputConsumer.getPendingBatchSource()); if (env->ExceptionCheck()) { if (env->ExceptionCheck()) { ALOGE("Exception dispatching batched input events."); ALOGE("Exception dispatching batched input events."); mBatchedInputEventPending = false; // try again later mBatchedInputEventPending = false; // try again later Loading @@ -270,10 +277,6 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, } } return OK; return OK; } } ALOGE("channel '%s' ~ Failed to consume input event. status=%d", getInputChannelName().c_str(), status); return status; } assert(inputEvent); assert(inputEvent); if (!skipCallbacks) { if (!skipCallbacks) { Loading Loading @@ -441,8 +444,9 @@ int register_android_view_InputEventReceiver(JNIEnv* env) { "dispatchInputEvent", "(ILandroid/view/InputEvent;)V"); "dispatchInputEvent", "(ILandroid/view/InputEvent;)V"); gInputEventReceiverClassInfo.onFocusEvent = gInputEventReceiverClassInfo.onFocusEvent = GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onFocusEvent", "(ZZ)V"); GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onFocusEvent", "(ZZ)V"); gInputEventReceiverClassInfo.dispatchBatchedInputEventPending = GetMethodIDOrDie(env, gInputEventReceiverClassInfo.onBatchedInputEventPending = gInputEventReceiverClassInfo.clazz, "dispatchBatchedInputEventPending", "()V"); GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onBatchedInputEventPending", "(I)V"); return res; return res; } } Loading Loading
core/java/android/view/BatchedInputEventReceiver.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class BatchedInputEventReceiver extends InputEventReceiver { } } @Override @Override public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { scheduleBatchedInput(); scheduleBatchedInput(); } } Loading
core/java/android/view/InputEventReceiver.java +2 −8 Original line number Original line Diff line number Diff line Loading @@ -147,8 +147,9 @@ public abstract class InputEventReceiver { * samples until the recipient calls {@link #consumeBatchedInputEvents} or * samples until the recipient calls {@link #consumeBatchedInputEvents} or * an event is received that ends the batch and causes it to be consumed * an event is received that ends the batch and causes it to be consumed * immediately (such as a pointer up event). * immediately (such as a pointer up event). * @param source The source of the batched event. */ */ public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { consumeBatchedInputEvents(-1); consumeBatchedInputEvents(-1); } } Loading Loading @@ -219,13 +220,6 @@ public abstract class InputEventReceiver { onInputEvent(event); onInputEvent(event); } } // Called from native code. @SuppressWarnings("unused") @UnsupportedAppUsage private void dispatchBatchedInputEventPending() { onBatchedInputEventPending(); } /** /** * Factory for InputEventReceiver * Factory for InputEventReceiver */ */ Loading
core/java/android/view/ViewRootImpl.java +11 −21 Original line number Original line Diff line number Diff line Loading @@ -504,7 +504,6 @@ public final class ViewRootImpl implements ViewParent, int mPendingInputEventCount; int mPendingInputEventCount; boolean mProcessInputEventsScheduled; boolean mProcessInputEventsScheduled; boolean mUnbufferedInputDispatch; boolean mUnbufferedInputDispatch; boolean mUnbufferedInputDispatchBySource; @InputSourceClass @InputSourceClass int mUnbufferedInputSource = SOURCE_CLASS_NONE; int mUnbufferedInputSource = SOURCE_CLASS_NONE; Loading Loading @@ -1872,9 +1871,6 @@ public final class ViewRootImpl implements ViewParent, mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mChoreographer.postCallback( mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); if (!mUnbufferedInputDispatch && !mUnbufferedInputDispatchBySource) { scheduleConsumeBatchedInput(); } notifyRendererOfFramePending(); notifyRendererOfFramePending(); pokeDrawLockIfNeeded(); pokeDrawLockIfNeeded(); } } Loading Loading @@ -8156,7 +8152,6 @@ public final class ViewRootImpl implements ViewParent, @Override @Override public void onInputEvent(InputEvent event) { public void onInputEvent(InputEvent event) { Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility"); Trace.traceBegin(Trace.TRACE_TAG_VIEW, "processInputEventForCompatibility"); processUnbufferedRequest(event); List<InputEvent> processedEvents; List<InputEvent> processedEvents; try { try { processedEvents = processedEvents = Loading @@ -8181,12 +8176,18 @@ public final class ViewRootImpl implements ViewParent, } } @Override @Override public void onBatchedInputEventPending() { public void onBatchedInputEventPending(int source) { if (mUnbufferedInputDispatch || mUnbufferedInputDispatchBySource) { final boolean unbuffered = mUnbufferedInputDispatch super.onBatchedInputEventPending(); || (source & mUnbufferedInputSource) != SOURCE_CLASS_NONE; } else { if (unbuffered) { scheduleConsumeBatchedInput(); if (mConsumeBatchedInputScheduled) { unscheduleConsumeBatchedInput(); } } // Consume event immediately if unbuffered input dispatch has been requested. consumeBatchedInputEvents(-1); return; } scheduleConsumeBatchedInput(); } } @Override @Override Loading @@ -8199,17 +8200,6 @@ public final class ViewRootImpl implements ViewParent, unscheduleConsumeBatchedInput(); unscheduleConsumeBatchedInput(); super.dispose(); 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; WindowInputEventReceiver mInputEventReceiver; Loading
core/jni/android_view_InputEventReceiver.cpp +33 −29 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ static struct { jmethodID dispatchInputEvent; jmethodID dispatchInputEvent; jmethodID onFocusEvent; jmethodID onFocusEvent; jmethodID dispatchBatchedInputEventPending; jmethodID onBatchedInputEventPending; } gInputEventReceiverClassInfo; } gInputEventReceiverClassInfo; Loading Loading @@ -242,16 +242,21 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, status_t status = mInputConsumer.consume(&mInputEventFactory, status_t status = mInputConsumer.consume(&mInputEventFactory, consumeBatches, frameTime, &seq, &inputEvent); consumeBatches, frameTime, &seq, &inputEvent); if (status) { if (status != OK && status != WOULD_BLOCK) { ALOGE("channel '%s' ~ Failed to consume input event. status=%d", getInputChannelName().c_str(), status); return status; } if (status == WOULD_BLOCK) { if (status == WOULD_BLOCK) { if (!skipCallbacks && !mBatchedInputEventPending if (!skipCallbacks && !mBatchedInputEventPending && mInputConsumer.hasPendingBatch()) { && mInputConsumer.hasPendingBatch()) { // There is a pending batch. Come back later. // There is a pending batch. Come back later. if (!receiverObj.get()) { if (!receiverObj.get()) { receiverObj.reset(jniGetReferent(env, mReceiverWeakGlobal)); receiverObj.reset(jniGetReferent(env, mReceiverWeakGlobal)); if (!receiverObj.get()) { if (!receiverObj.get()) { ALOGW("channel '%s' ~ Receiver object was finalized " ALOGW("channel '%s' ~ Receiver object was finalized " "without being disposed.", getInputChannelName().c_str()); "without being disposed.", getInputChannelName().c_str()); return DEAD_OBJECT; return DEAD_OBJECT; } } } } Loading @@ -261,8 +266,10 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", getInputChannelName().c_str()); getInputChannelName().c_str()); } } env->CallVoidMethod(receiverObj.get(), env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.dispatchBatchedInputEventPending); gInputEventReceiverClassInfo.onBatchedInputEventPending, mInputConsumer.getPendingBatchSource()); if (env->ExceptionCheck()) { if (env->ExceptionCheck()) { ALOGE("Exception dispatching batched input events."); ALOGE("Exception dispatching batched input events."); mBatchedInputEventPending = false; // try again later mBatchedInputEventPending = false; // try again later Loading @@ -270,10 +277,6 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, } } return OK; return OK; } } ALOGE("channel '%s' ~ Failed to consume input event. status=%d", getInputChannelName().c_str(), status); return status; } assert(inputEvent); assert(inputEvent); if (!skipCallbacks) { if (!skipCallbacks) { Loading Loading @@ -441,8 +444,9 @@ int register_android_view_InputEventReceiver(JNIEnv* env) { "dispatchInputEvent", "(ILandroid/view/InputEvent;)V"); "dispatchInputEvent", "(ILandroid/view/InputEvent;)V"); gInputEventReceiverClassInfo.onFocusEvent = gInputEventReceiverClassInfo.onFocusEvent = GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onFocusEvent", "(ZZ)V"); GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onFocusEvent", "(ZZ)V"); gInputEventReceiverClassInfo.dispatchBatchedInputEventPending = GetMethodIDOrDie(env, gInputEventReceiverClassInfo.onBatchedInputEventPending = gInputEventReceiverClassInfo.clazz, "dispatchBatchedInputEventPending", "()V"); GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "onBatchedInputEventPending", "(I)V"); return res; return res; } } Loading