Loading core/jni/android_os_MessageQueue.cpp +35 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,21 @@ public: virtual int handleEvent(int fd, int events, void* data); /** * A simple proxy that holds a weak reference to a looper callback. */ class WeakLooperCallback : public LooperCallback { protected: virtual ~WeakLooperCallback(); public: WeakLooperCallback(const wp<LooperCallback>& callback); virtual int handleEvent(int fd, int events, void* data); private: wp<LooperCallback> mCallback; }; private: JNIEnv* mPollEnv; jobject mPollObj; Loading Loading @@ -131,7 +146,8 @@ void NativeMessageQueue::setFileDescriptorEvents(int fd, int events) { if (events & CALLBACK_EVENT_OUTPUT) { looperEvents |= Looper::EVENT_OUTPUT; } mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents, this, mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents, sp<WeakLooperCallback>::make(this), reinterpret_cast<void*>(events)); } else { mLooper->removeFd(fd); Loading Loading @@ -162,6 +178,24 @@ int NativeMessageQueue::handleEvent(int fd, int looperEvents, void* data) { } // --- NativeMessageQueue::WeakLooperCallback --- NativeMessageQueue::WeakLooperCallback::WeakLooperCallback(const wp<LooperCallback>& callback) : mCallback(callback) { } NativeMessageQueue::WeakLooperCallback::~WeakLooperCallback() { } int NativeMessageQueue::WeakLooperCallback::handleEvent(int fd, int events, void* data) { sp<LooperCallback> callback = mCallback.promote(); if (callback != nullptr) { return callback->handleEvent(fd, events, data); } return 0; } // ---------------------------------------------------------------------------- sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) { Loading Loading
core/jni/android_os_MessageQueue.cpp +35 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,21 @@ public: virtual int handleEvent(int fd, int events, void* data); /** * A simple proxy that holds a weak reference to a looper callback. */ class WeakLooperCallback : public LooperCallback { protected: virtual ~WeakLooperCallback(); public: WeakLooperCallback(const wp<LooperCallback>& callback); virtual int handleEvent(int fd, int events, void* data); private: wp<LooperCallback> mCallback; }; private: JNIEnv* mPollEnv; jobject mPollObj; Loading Loading @@ -131,7 +146,8 @@ void NativeMessageQueue::setFileDescriptorEvents(int fd, int events) { if (events & CALLBACK_EVENT_OUTPUT) { looperEvents |= Looper::EVENT_OUTPUT; } mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents, this, mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents, sp<WeakLooperCallback>::make(this), reinterpret_cast<void*>(events)); } else { mLooper->removeFd(fd); Loading Loading @@ -162,6 +178,24 @@ int NativeMessageQueue::handleEvent(int fd, int looperEvents, void* data) { } // --- NativeMessageQueue::WeakLooperCallback --- NativeMessageQueue::WeakLooperCallback::WeakLooperCallback(const wp<LooperCallback>& callback) : mCallback(callback) { } NativeMessageQueue::WeakLooperCallback::~WeakLooperCallback() { } int NativeMessageQueue::WeakLooperCallback::handleEvent(int fd, int events, void* data) { sp<LooperCallback> callback = mCallback.promote(); if (callback != nullptr) { return callback->handleEvent(fd, events, data); } return 0; } // ---------------------------------------------------------------------------- sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) { Loading