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

Commit dbf3af83 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Handle UID state change on separate thread" into main

parents e19ba5ca f0ef15fd
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -2570,10 +2570,7 @@ void SensorService::UidPolicy::onUidActive(uid_t uid) {
        Mutex::Autolock _l(mUidLock);
        mActiveUids.insert(uid);
    }
    sp<SensorService> service = mService.promote();
    if (service != nullptr) {
        service->onUidStateChanged(uid, UID_STATE_ACTIVE);
    }
    postUidStateChanged(uid, UID_STATE_ACTIVE);
}

void SensorService::UidPolicy::onUidIdle(uid_t uid, __unused bool disabled) {
@@ -2585,10 +2582,7 @@ void SensorService::UidPolicy::onUidIdle(uid_t uid, __unused bool disabled) {
        }
    }
    if (deleted) {
        sp<SensorService> service = mService.promote();
        if (service != nullptr) {
            service->onUidStateChanged(uid, UID_STATE_IDLE);
        }
        postUidStateChanged(uid, UID_STATE_IDLE);
    }
}

@@ -2613,9 +2607,18 @@ void SensorService::UidPolicy::updateOverrideUid(uid_t uid, bool active, bool in
        isActive = isUidActiveLocked(uid);
    }
    if (wasActive != isActive) {
        postUidStateChanged(uid, isActive ? UID_STATE_ACTIVE : UID_STATE_IDLE);
    }
}

void SensorService::UidPolicy::postUidStateChanged(uid_t uid, UidState state) {
    sp<MessageHandler> handler = new UidStateChangeHandler(mService, uid, state);
    sp<SensorService> service = mService.promote();
    if (service != nullptr) {
            service->onUidStateChanged(uid, isActive ? UID_STATE_ACTIVE : UID_STATE_IDLE);
        if (sensorservice_flags::use_looper_for_uid_state_change()) {
            service->mLooper->sendMessage(handler, Message(0));
        } else {
            service->onUidStateChanged(uid, state);
        }
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -308,8 +308,24 @@ private:
            void addOverrideUid(uid_t uid, bool active);
            void removeOverrideUid(uid_t uid);
        private:
            class UidStateChangeHandler : public MessageHandler {
            public:
                UidStateChangeHandler(wp<SensorService> service, uid_t uid, UidState uidState)
                      : mService(service), mUid(uid), mUidState(uidState) {}
                void handleMessage(const Message& /*message*/) override {
                    sp<SensorService> service = mService.promote();
                    if (service != nullptr) {
                        service->onUidStateChanged(mUid, mUidState);
                    }
                }
            private:
                wp<SensorService> mService;
                uid_t mUid;
                UidState mUidState;
            };
            bool isUidActiveLocked(uid_t uid);
            void updateOverrideUid(uid_t uid, bool active, bool insert);
            void postUidStateChanged(uid_t uid, UidState state);

            Mutex mUidLock;
            wp<SensorService> mService;
+10 −0
Original line number Diff line number Diff line
@@ -48,3 +48,13 @@ flag {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "use_looper_for_uid_state_change"
  namespace: "sensors"
  description: "Processes UID state changes on the SensorEventAckReceiver thread instead of calling (UI) thread"
  bug: "399607981"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
 No newline at end of file