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

Commit b557f7b3 authored by Austin Borger's avatar Austin Borger
Browse files

UidObserver / Camera: Track the OOM adj of a uid via UidObserver.

Previously, onUidProcAdjChanged merely signaled that the OOM adj of a
uid changed, but did not provide the actual OOM adj score. Having this
information allows the camera service to cut out redundant calls to
onCameraAccessPrioritiesChanged and avoid overwhelming apps.

The number of calls to onCameraAccessPrioritiesChanged is reduced by
only signaling when it's likely the uid owning a camera would lose
access to it if another uid tried to open that camera. This is opposed
to the status quo, which signals every time a watched uid changes its
OOM adj, which is highly inefficient.

Bug: 274486653
Test: -- on physical device:
      -- testCamera2AccessCallbackInSplitMode x10
      -- ActivityManagerServiceTest
      -- ActivityManagerProcessStateTest
      -- ActivityManagerFgsBgStartTest
      -- UidObserverControllerTest
      -- Alternate focus in split screen between Camera2 + GCA x20
Change-Id: Ia8d36e7a49156d537ae4da3540a1046e3200d930
parent a8827e9c
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -67,9 +67,10 @@ public:
        remote()->transact(ON_UID_STATE_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
        remote()->transact(ON_UID_STATE_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
    }
    }


    virtual void onUidProcAdjChanged(uid_t uid) {
    virtual void onUidProcAdjChanged(uid_t uid, int32_t adj) {
        Parcel data, reply;
        Parcel data, reply;
        data.writeInt32((int32_t)uid);
        data.writeInt32((int32_t)uid);
        data.writeInt32((int32_t)adj);
        remote()->transact(ON_UID_PROC_ADJ_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
        remote()->transact(ON_UID_PROC_ADJ_CHANGED_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
    }
    }
};
};
@@ -121,7 +122,8 @@ status_t BnUidObserver::onTransact(
        case ON_UID_PROC_ADJ_CHANGED_TRANSACTION: {
        case ON_UID_PROC_ADJ_CHANGED_TRANSACTION: {
            CHECK_INTERFACE(IUidObserver, data, reply);
            CHECK_INTERFACE(IUidObserver, data, reply);
            uid_t uid = data.readInt32();
            uid_t uid = data.readInt32();
            onUidProcAdjChanged(uid);
            int32_t adj = data.readInt32();
            onUidProcAdjChanged(uid, adj);
            return NO_ERROR;
            return NO_ERROR;
        } break;
        } break;


+1 −1
Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ public:
    virtual void onUidIdle(uid_t uid, bool disabled) = 0;
    virtual void onUidIdle(uid_t uid, bool disabled) = 0;
    virtual void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq,
    virtual void onUidStateChanged(uid_t uid, int32_t procState, int64_t procStateSeq,
                                   int32_t capability) = 0;
                                   int32_t capability) = 0;
    virtual void onUidProcAdjChanged(uid_t uid) = 0;
    virtual void onUidProcAdjChanged(uid_t uid, int32_t adj) = 0;


    enum {
    enum {
        ON_UID_GONE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
        ON_UID_GONE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
+1 −1
Original line number Original line Diff line number Diff line
@@ -288,7 +288,7 @@ private:
            void onUidStateChanged(uid_t uid __unused, int32_t procState __unused,
            void onUidStateChanged(uid_t uid __unused, int32_t procState __unused,
                                   int64_t procStateSeq __unused,
                                   int64_t procStateSeq __unused,
                                   int32_t capability __unused) override {}
                                   int32_t capability __unused) override {}
            void onUidProcAdjChanged(uid_t uid __unused) override {}
            void onUidProcAdjChanged(uid_t uid __unused, int32_t adj __unused) override {}


            void addOverrideUid(uid_t uid, bool active);
            void addOverrideUid(uid_t uid, bool active);
            void removeOverrideUid(uid_t uid);
            void removeOverrideUid(uid_t uid);