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

Commit 18b6ea1a authored by Austin Borger's avatar Austin Borger Committed by Android (Google) Code Review
Browse files

Merge "Add new onUidProcAdjChanged callback to be consumed by the camera service." into tm-dev

parents 50bc3119 6557768d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);
}
+2 −1
Original line number Diff line number Diff line
@@ -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); }
+30 −11
Original line number Diff line number Diff line
@@ -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) {
@@ -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;
        }
    }
@@ -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));
    }
}

@@ -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 {
@@ -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;
}
+13 −6
Original line number Diff line number Diff line
@@ -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);
@@ -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