Loading services/sensorservice/SensorService.cpp +14 −11 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } } Loading @@ -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); } } } Loading services/sensorservice/SensorService.h +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading services/sensorservice/sensorservice_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/sensorservice/SensorService.cpp +14 −11 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } } Loading @@ -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); } } } Loading
services/sensorservice/SensorService.h +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
services/sensorservice/sensorservice_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -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