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

Commit eae4f928 authored by Jeff Brown's avatar Jeff Brown Committed by Android Git Automerger
Browse files

am 1adee11b: Optimize dispatcher for back-to-back finished signals.

* commit '1adee11b':
  Optimize dispatcher for back-to-back finished signals.
parents 877f352b 1adee11b
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -2043,18 +2043,30 @@ int InputDispatcher::handleReceiveCallback(int fd, int events, void* data) {
                return 1;
            }

            bool handled = false;
            status_t status = connection->inputPublisher.receiveFinishedSignal(&handled);
            if (!status) {
            nsecs_t currentTime = now();
            bool gotOne = false;
            status_t status;
            for (;;) {
                bool handled = false;
                status = connection->inputPublisher.receiveFinishedSignal(&handled);
                if (status) {
                    break;
                }
                d->finishDispatchCycleLocked(currentTime, connection, handled);
                gotOne = true;
            }
            if (gotOne) {
                d->runCommandsLockedInterruptible();
                if (status == WOULD_BLOCK) {
                    return 1;
                }
            }

            notify = status != DEAD_OBJECT || !connection->monitor;
            if (notify) {
                ALOGE("channel '%s' ~ Failed to receive finished signal.  status=%d",
                        connection->getInputChannelName(), status);
            notify = true;
            }
        } else {
            // Monitor channels are never explicitly unregistered.
            // We do it automatically when the remote endpoint is closed so don't warn