Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 474c1674 authored by hongzuo liu's avatar hongzuo liu
Browse files

[Optimization] It's no need to start the dispatch cycle going if the outbound...

[Optimization] It's no need to start the dispatch cycle going if the outbound queue was not previously empty.

If the outbound queue was not previpusly empty, it indicates that the connection's pipe is full.We will try start the next dispatch cycle for this connection in "doDispatchCycleFinishedCommand".
This follows "enqueueDispatchEntriesLocked".

Change-Id: I7736c2bfdb13c35a51b74c46ada7b0f562fecfd9
Merged-In: I7736c2bfdb13c35a51b74c46ada7b0f562fecfd9
parent 887cda51
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -3640,6 +3640,8 @@ void InputDispatcher::synthesizeCancelationEventsForConnectionLocked(
    target.inputChannel = connection->inputChannel;
    target.flags = InputTarget::FLAG_DISPATCH_AS_IS;

    const bool wasEmpty = connection->outboundQueue.empty();

    for (size_t i = 0; i < cancelationEvents.size(); i++) {
        std::unique_ptr<EventEntry> cancelationEventEntry = std::move(cancelationEvents[i]);
        switch (cancelationEventEntry->type) {
@@ -3674,8 +3676,11 @@ void InputDispatcher::synthesizeCancelationEventsForConnectionLocked(
                                   InputTarget::FLAG_DISPATCH_AS_IS);
    }

    // If the outbound queue was previously empty, start the dispatch cycle going.
    if (wasEmpty && !connection->outboundQueue.empty()) {
        startDispatchCycleLocked(currentTime, connection);
    }
}

void InputDispatcher::synthesizePointerDownEventsForConnectionLocked(
        const sp<Connection>& connection) {
@@ -3708,6 +3713,8 @@ void InputDispatcher::synthesizePointerDownEventsForConnectionLocked(
    target.inputChannel = connection->inputChannel;
    target.flags = InputTarget::FLAG_DISPATCH_AS_IS;

    const bool wasEmpty = connection->outboundQueue.empty();

    for (std::unique_ptr<EventEntry>& downEventEntry : downEvents) {
        switch (downEventEntry->type) {
            case EventEntry::Type::MOTION: {
@@ -3733,9 +3740,11 @@ void InputDispatcher::synthesizePointerDownEventsForConnectionLocked(
        enqueueDispatchEntryLocked(connection, std::move(downEventEntry), target,
                                   InputTarget::FLAG_DISPATCH_AS_IS);
    }

    // If the outbound queue was previously empty, start the dispatch cycle going.
    if (wasEmpty && !connection->outboundQueue.empty()) {
        startDispatchCycleLocked(currentTime, connection);
    }
}

std::unique_ptr<MotionEntry> InputDispatcher::splitMotionEvent(
        const MotionEntry& originalMotionEntry, BitSet32 pointerIds) {