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

Commit 9556ef4f authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Modify native ALooper to take an explicit ident." into gingerbread

parents dc3f1662 45e0acb4
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -111,12 +111,18 @@ public:
     * This method can be called on any thread.
     * This method may block briefly if it needs to wake the poll loop.
     */
    void setCallback(int fd, int ident, int events, Callback callback, void* data = NULL);

    /**
     * Convenience for above setCallback when ident is not used.  In this case
     * the ident is set to POLL_CALLBACK.
     */
    void setCallback(int fd, int events, Callback callback, void* data = NULL);
    
    /**
     * Like setCallback(), but for the NDK callback function.
     */
    void setLooperCallback(int fd, int events, ALooper_callbackFunc* callback,
    void setLooperCallback(int fd, int ident, int events, ALooper_callbackFunc* callback,
            void* data);
    
    /**
@@ -153,11 +159,13 @@ private:
    struct RequestedCallback {
        Callback callback;
        ALooper_callbackFunc* looperCallback;
        int ident;
        void* data;
    };

    struct PendingCallback {
        int fd;
        int ident;
        int events;
        Callback callback;
        ALooper_callbackFunc* looperCallback;
@@ -185,7 +193,7 @@ private:
    void openWakePipe();
    void closeWakePipe();

    void setCallbackCommon(int fd, int events, Callback callback,
    void setCallbackCommon(int fd, int ident, int events, Callback callback,
            ALooper_callbackFunc* looperCallback, void* data);
    ssize_t getRequestIndexLocked(int fd);
    void wakeAndLock();
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ sp<PollLoop> SensorEventQueue::getPollLoop() const
    Mutex::Autolock _l(mLock);
    if (mPollLoop == 0) {
        mPollLoop = new PollLoop(true);
        mPollLoop->setCallback(getFd(), POLLIN, NULL, NULL);
        mPollLoop->setCallback(getFd(), getFd(), POLLIN, NULL, NULL);
    }
    return mPollLoop;
}
+13 −6
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ void PollLoop::openWakePipe() {
    RequestedCallback requestedCallback;
    requestedCallback.callback = NULL;
    requestedCallback.looperCallback = NULL;
    requestedCallback.ident = 0;
    requestedCallback.data = NULL;
    mRequestedCallbacks.insertAt(requestedCallback, 0);
}
@@ -116,7 +117,7 @@ int32_t PollLoop::pollOnce(int timeoutMillis, int* outEvents, void** outData) {
        mPendingFdsPos++;
        if (outEvents != NULL) *outEvents = pending.events;
        if (outData != NULL) *outData = pending.data;
        return pending.fd;
        return pending.ident;
    }
    
    mLock.lock();
@@ -182,6 +183,7 @@ int32_t PollLoop::pollOnce(int timeoutMillis, int* outEvents, void** outData) {
            const RequestedCallback& requestedCallback = mRequestedCallbacks.itemAt(i);
            PendingCallback pending;
            pending.fd = requestedFd.fd;
            pending.ident = requestedCallback.ident;
            pending.events = revents;
            pending.callback = requestedCallback.callback;
            pending.looperCallback = requestedCallback.looperCallback;
@@ -191,7 +193,7 @@ int32_t PollLoop::pollOnce(int timeoutMillis, int* outEvents, void** outData) {
                mPendingCallbacks.push(pending);
            } else if (pending.fd != mWakeReadPipeFd) {
                if (result == POLL_CALLBACK) {
                    result = pending.fd;
                    result = pending.ident;
                    if (outEvents != NULL) *outEvents = pending.events;
                    if (outData != NULL) *outData = pending.data;
                } else {
@@ -268,16 +270,20 @@ bool PollLoop::getAllowNonCallbacks() const {
    return mAllowNonCallbacks;
}

void PollLoop::setCallback(int fd, int ident, int events, Callback callback, void* data) {
    setCallbackCommon(fd, ident, events, callback, NULL, data);
}

void PollLoop::setCallback(int fd, int events, Callback callback, void* data) {
    setCallbackCommon(fd, events, callback, NULL, data);
    setCallbackCommon(fd, POLL_CALLBACK, events, callback, NULL, data);
}

void PollLoop::setLooperCallback(int fd, int events, ALooper_callbackFunc* callback,
void PollLoop::setLooperCallback(int fd, int ident, int events, ALooper_callbackFunc* callback,
        void* data) {
    setCallbackCommon(fd, events, NULL, callback, data);
    setCallbackCommon(fd, ident, events, NULL, callback, data);
}

void PollLoop::setCallbackCommon(int fd, int events, Callback callback,
void PollLoop::setCallbackCommon(int fd, int ident, int events, Callback callback,
        ALooper_callbackFunc* looperCallback, void* data) {

#if DEBUG_CALLBACKS
@@ -305,6 +311,7 @@ void PollLoop::setCallbackCommon(int fd, int events, Callback callback,
    RequestedCallback requestedCallback;
    requestedCallback.callback = callback;
    requestedCallback.looperCallback = looperCallback;
    requestedCallback.ident = ident;
    requestedCallback.data = data;

    ssize_t index = getRequestIndexLocked(fd);