Loading services/audiopolicy/service/AudioPolicyService.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1629,6 +1629,9 @@ void AudioPolicyService::UidPolicy::onUidStateChanged(uid_t uid, } } void AudioPolicyService::UidPolicy::onUidProcAdjChanged(uid_t uid __unused) { } void AudioPolicyService::UidPolicy::updateOverrideUid(uid_t uid, bool active, bool insert) { updateUid(&mOverrideUids, uid, active, ActivityManager::PROCESS_STATE_UNKNOWN, insert); } Loading services/audiopolicy/service/AudioPolicyService.h +2 −1 Original line number Diff line number Diff line Loading @@ -450,7 +450,8 @@ private: void onUidGone(uid_t uid, bool disabled) override; void onUidIdle(uid_t uid, bool disabled) override; void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq, int32_t capability); int32_t capability) override; void onUidProcAdjChanged(uid_t uid) override; void addOverrideUid(uid_t uid, bool active) { updateOverrideUid(uid, active, true); } void removeOverrideUid(uid_t uid) { updateOverrideUid(uid, false, false); } Loading services/camera/libcameraservice/CameraService.cpp +30 −11 Original line number Diff line number Diff line Loading @@ -3670,7 +3670,8 @@ void CameraService::UidPolicy::registerSelf() { status_t res = mAm.linkToDeath(this); mAm.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE | ActivityManager::UID_OBSERVER_IDLE | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE, | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE | ActivityManager::UID_OBSERVER_PROC_OOM_ADJ, ActivityManager::PROCESS_STATE_UNKNOWN, String16("cameraserver")); if (res == OK) { Loading Loading @@ -3719,9 +3720,9 @@ void CameraService::UidPolicy::onUidStateChanged(uid_t uid, int32_t procState, bool procStateChange = false; { Mutex::Autolock _l(mUidLock); if ((mMonitoredUids.find(uid) != mMonitoredUids.end()) && (mMonitoredUids[uid].first != procState)) { mMonitoredUids[uid].first = procState; if (mMonitoredUids.find(uid) != mMonitoredUids.end() && mMonitoredUids[uid].procState != procState) { mMonitoredUids[uid].procState = procState; procStateChange = true; } } Loading @@ -3734,15 +3735,33 @@ void CameraService::UidPolicy::onUidStateChanged(uid_t uid, int32_t procState, } } void CameraService::UidPolicy::onUidProcAdjChanged(uid_t uid) { bool procAdjChange = false; { Mutex::Autolock _l(mUidLock); if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procAdjChange = true; } } if (procAdjChange) { sp<CameraService> service = mService.promote(); if (service != nullptr) { service->notifyMonitoredUids(); } } } void CameraService::UidPolicy::registerMonitorUid(uid_t uid) { Mutex::Autolock _l(mUidLock); auto it = mMonitoredUids.find(uid); if (it != mMonitoredUids.end()) { it->second.second++; it->second.refCount++; } else { mMonitoredUids.emplace( std::pair<uid_t, std::pair<int32_t, size_t>> (uid, std::pair<int32_t, size_t> (ActivityManager::PROCESS_STATE_NONEXISTENT, 1))); MonitoredUid monitoredUid; monitoredUid.procState = ActivityManager::PROCESS_STATE_NONEXISTENT; monitoredUid.refCount = 1; mMonitoredUids.emplace(std::pair<uid_t, MonitoredUid>(uid, monitoredUid)); } } Loading @@ -3750,8 +3769,8 @@ void CameraService::UidPolicy::unregisterMonitorUid(uid_t uid) { Mutex::Autolock _l(mUidLock); auto it = mMonitoredUids.find(uid); if (it != mMonitoredUids.end()) { it->second.second--; if (it->second.second == 0) { it->second.refCount--; if (it->second.refCount == 0) { mMonitoredUids.erase(it); } } else { Loading Loading @@ -3829,7 +3848,7 @@ int32_t CameraService::UidPolicy::getProcState(uid_t uid) { int32_t CameraService::UidPolicy::getProcStateLocked(uid_t uid) { int32_t procState = ActivityManager::PROCESS_STATE_UNKNOWN; if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procState = mMonitoredUids[uid].first; procState = mMonitoredUids[uid].procState; } return procState; } Loading services/camera/libcameraservice/CameraService.h +13 −6 Original line number Diff line number Diff line Loading @@ -698,11 +698,13 @@ private: bool isUidActive(uid_t uid, String16 callingPackage); int32_t getProcState(uid_t uid); void onUidGone(uid_t uid, bool disabled); void onUidActive(uid_t uid); void onUidIdle(uid_t uid, bool disabled); // IUidObserver void onUidGone(uid_t uid, bool disabled) override; void onUidActive(uid_t uid) override; void onUidIdle(uid_t uid, bool disabled) override; void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq, int32_t capability); int32_t capability) override; void onUidProcAdjChanged(uid_t uid) override; void addOverrideUid(uid_t uid, String16 callingPackage, bool active); void removeOverrideUid(uid_t uid, String16 callingPackage); Loading @@ -717,13 +719,18 @@ private: int32_t getProcStateLocked(uid_t uid); void updateOverrideUid(uid_t uid, String16 callingPackage, bool active, bool insert); struct MonitoredUid { int32_t procState; size_t refCount; }; Mutex mUidLock; bool mRegistered; ActivityManager mAm; wp<CameraService> mService; std::unordered_set<uid_t> mActiveUids; // Monitored uid map to cached procState and refCount pair std::unordered_map<uid_t, std::pair<int32_t, size_t>> mMonitoredUids; // Monitored uid map std::unordered_map<uid_t, MonitoredUid> mMonitoredUids; std::unordered_map<uid_t, bool> mOverrideUids; }; // class UidPolicy Loading Loading
services/audiopolicy/service/AudioPolicyService.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -1629,6 +1629,9 @@ void AudioPolicyService::UidPolicy::onUidStateChanged(uid_t uid, } } void AudioPolicyService::UidPolicy::onUidProcAdjChanged(uid_t uid __unused) { } void AudioPolicyService::UidPolicy::updateOverrideUid(uid_t uid, bool active, bool insert) { updateUid(&mOverrideUids, uid, active, ActivityManager::PROCESS_STATE_UNKNOWN, insert); } Loading
services/audiopolicy/service/AudioPolicyService.h +2 −1 Original line number Diff line number Diff line Loading @@ -450,7 +450,8 @@ private: void onUidGone(uid_t uid, bool disabled) override; void onUidIdle(uid_t uid, bool disabled) override; void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq, int32_t capability); int32_t capability) override; void onUidProcAdjChanged(uid_t uid) override; void addOverrideUid(uid_t uid, bool active) { updateOverrideUid(uid, active, true); } void removeOverrideUid(uid_t uid) { updateOverrideUid(uid, false, false); } Loading
services/camera/libcameraservice/CameraService.cpp +30 −11 Original line number Diff line number Diff line Loading @@ -3670,7 +3670,8 @@ void CameraService::UidPolicy::registerSelf() { status_t res = mAm.linkToDeath(this); mAm.registerUidObserver(this, ActivityManager::UID_OBSERVER_GONE | ActivityManager::UID_OBSERVER_IDLE | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE, | ActivityManager::UID_OBSERVER_ACTIVE | ActivityManager::UID_OBSERVER_PROCSTATE | ActivityManager::UID_OBSERVER_PROC_OOM_ADJ, ActivityManager::PROCESS_STATE_UNKNOWN, String16("cameraserver")); if (res == OK) { Loading Loading @@ -3719,9 +3720,9 @@ void CameraService::UidPolicy::onUidStateChanged(uid_t uid, int32_t procState, bool procStateChange = false; { Mutex::Autolock _l(mUidLock); if ((mMonitoredUids.find(uid) != mMonitoredUids.end()) && (mMonitoredUids[uid].first != procState)) { mMonitoredUids[uid].first = procState; if (mMonitoredUids.find(uid) != mMonitoredUids.end() && mMonitoredUids[uid].procState != procState) { mMonitoredUids[uid].procState = procState; procStateChange = true; } } Loading @@ -3734,15 +3735,33 @@ void CameraService::UidPolicy::onUidStateChanged(uid_t uid, int32_t procState, } } void CameraService::UidPolicy::onUidProcAdjChanged(uid_t uid) { bool procAdjChange = false; { Mutex::Autolock _l(mUidLock); if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procAdjChange = true; } } if (procAdjChange) { sp<CameraService> service = mService.promote(); if (service != nullptr) { service->notifyMonitoredUids(); } } } void CameraService::UidPolicy::registerMonitorUid(uid_t uid) { Mutex::Autolock _l(mUidLock); auto it = mMonitoredUids.find(uid); if (it != mMonitoredUids.end()) { it->second.second++; it->second.refCount++; } else { mMonitoredUids.emplace( std::pair<uid_t, std::pair<int32_t, size_t>> (uid, std::pair<int32_t, size_t> (ActivityManager::PROCESS_STATE_NONEXISTENT, 1))); MonitoredUid monitoredUid; monitoredUid.procState = ActivityManager::PROCESS_STATE_NONEXISTENT; monitoredUid.refCount = 1; mMonitoredUids.emplace(std::pair<uid_t, MonitoredUid>(uid, monitoredUid)); } } Loading @@ -3750,8 +3769,8 @@ void CameraService::UidPolicy::unregisterMonitorUid(uid_t uid) { Mutex::Autolock _l(mUidLock); auto it = mMonitoredUids.find(uid); if (it != mMonitoredUids.end()) { it->second.second--; if (it->second.second == 0) { it->second.refCount--; if (it->second.refCount == 0) { mMonitoredUids.erase(it); } } else { Loading Loading @@ -3829,7 +3848,7 @@ int32_t CameraService::UidPolicy::getProcState(uid_t uid) { int32_t CameraService::UidPolicy::getProcStateLocked(uid_t uid) { int32_t procState = ActivityManager::PROCESS_STATE_UNKNOWN; if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procState = mMonitoredUids[uid].first; procState = mMonitoredUids[uid].procState; } return procState; } Loading
services/camera/libcameraservice/CameraService.h +13 −6 Original line number Diff line number Diff line Loading @@ -698,11 +698,13 @@ private: bool isUidActive(uid_t uid, String16 callingPackage); int32_t getProcState(uid_t uid); void onUidGone(uid_t uid, bool disabled); void onUidActive(uid_t uid); void onUidIdle(uid_t uid, bool disabled); // IUidObserver void onUidGone(uid_t uid, bool disabled) override; void onUidActive(uid_t uid) override; void onUidIdle(uid_t uid, bool disabled) override; void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq, int32_t capability); int32_t capability) override; void onUidProcAdjChanged(uid_t uid) override; void addOverrideUid(uid_t uid, String16 callingPackage, bool active); void removeOverrideUid(uid_t uid, String16 callingPackage); Loading @@ -717,13 +719,18 @@ private: int32_t getProcStateLocked(uid_t uid); void updateOverrideUid(uid_t uid, String16 callingPackage, bool active, bool insert); struct MonitoredUid { int32_t procState; size_t refCount; }; Mutex mUidLock; bool mRegistered; ActivityManager mAm; wp<CameraService> mService; std::unordered_set<uid_t> mActiveUids; // Monitored uid map to cached procState and refCount pair std::unordered_map<uid_t, std::pair<int32_t, size_t>> mMonitoredUids; // Monitored uid map std::unordered_map<uid_t, MonitoredUid> mMonitoredUids; std::unordered_map<uid_t, bool> mOverrideUids; }; // class UidPolicy Loading