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

Commit d1b5f0c4 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am 2d3739d4: Merge "Modify native ALooper to take an explicit ident." into gingerbread

Merge commit '2d3739d479d67ba736cefbdd6087a11eadfb14ea' into gingerbread-plus-aosp

* commit '2d3739d479d67ba736cefbdd6087a11eadfb14ea':
  Modify native ALooper to take an explicit ident.
parents 1e947e36 9556ef4f
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);