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

Commit 35786c34 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Allow bound processes to go PROCESS_STATE_TOP." into klp-dev

parents 583ed765 d9545a91
Loading
Loading
Loading
Loading
+29 −9
Original line number Original line Diff line number Diff line
@@ -13830,7 +13830,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        for (int is = app.services.size()-1;
        for (int is = app.services.size()-1;
                is >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                is >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                        || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                        || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                        || procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
                        || procState > ActivityManager.PROCESS_STATE_TOP);
                is--) {
                is--) {
            ServiceRecord s = app.services.valueAt(is);
            ServiceRecord s = app.services.valueAt(is);
            if (s.startRequested) {
            if (s.startRequested) {
@@ -13871,13 +13871,13 @@ public final class ActivityManagerService extends ActivityManagerNative
            for (int conni = s.connections.size()-1;
            for (int conni = s.connections.size()-1;
                    conni >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                    conni >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                            || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                            || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                            || procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
                            || procState > ActivityManager.PROCESS_STATE_TOP);
                    conni--) {
                    conni--) {
                ArrayList<ConnectionRecord> clist = s.connections.valueAt(conni);
                ArrayList<ConnectionRecord> clist = s.connections.valueAt(conni);
                for (int i = 0;
                for (int i = 0;
                        i < clist.size() && (adj > ProcessList.FOREGROUND_APP_ADJ
                        i < clist.size() && (adj > ProcessList.FOREGROUND_APP_ADJ
                                || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                                || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                                || procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
                                || procState > ActivityManager.PROCESS_STATE_TOP);
                        i++) {
                        i++) {
                    // XXX should compute this based on the max of
                    // XXX should compute this based on the max of
                    // all connected clients.
                    // all connected clients.
@@ -13987,8 +13987,16 @@ public final class ActivityManagerService extends ActivityManagerNative
                            if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
                            if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
                                schedGroup = Process.THREAD_GROUP_DEFAULT;
                                schedGroup = Process.THREAD_GROUP_DEFAULT;
                            }
                            }
                            if (clientProcState <
                            if (clientProcState <=
                                    ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
                                    ActivityManager.PROCESS_STATE_PERSISTENT_UI &&
                                    clientProcState >=
                                            ActivityManager.PROCESS_STATE_PERSISTENT) {
                                // Persistent processes don't allow us to become top.
                                // However the top process DOES allow us to become top,
                                // because in that case we are running because the current
                                // top process wants us, so we should be counted as part
                                // of the top set and not just running for some random
                                // unknown reason in the background.
                                clientProcState =
                                clientProcState =
                                        ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
                                        ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
                            }
                            }
@@ -14040,13 +14048,13 @@ public final class ActivityManagerService extends ActivityManagerNative
        for (int provi = app.pubProviders.size()-1;
        for (int provi = app.pubProviders.size()-1;
                provi >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                provi >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                        || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                        || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                        || procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
                        || procState > ActivityManager.PROCESS_STATE_TOP);
                provi--) {
                provi--) {
            ContentProviderRecord cpr = app.pubProviders.valueAt(provi);
            ContentProviderRecord cpr = app.pubProviders.valueAt(provi);
            for (int i = cpr.connections.size()-1;
            for (int i = cpr.connections.size()-1;
                    i >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                    i >= 0 && (adj > ProcessList.FOREGROUND_APP_ADJ
                            || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                            || schedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE
                            || procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
                            || procState > ActivityManager.PROCESS_STATE_TOP);
                    i--) {
                    i--) {
                ContentProviderConnection conn = cpr.connections.get(i);
                ContentProviderConnection conn = cpr.connections.get(i);
                ProcessRecord client = conn.client;
                ProcessRecord client = conn.client;
@@ -14078,9 +14086,21 @@ public final class ActivityManagerService extends ActivityManagerNative
                    app.adjSourceOom = clientAdj;
                    app.adjSourceOom = clientAdj;
                    app.adjTarget = cpr.name;
                    app.adjTarget = cpr.name;
                }
                }
                if (clientProcState <=
                        ActivityManager.PROCESS_STATE_PERSISTENT_UI &&
                        clientProcState >=
                                ActivityManager.PROCESS_STATE_PERSISTENT) {
                    // Persistent processes don't allow us to become top.
                    // However the top process DOES allow us to become top,
                    // because in that case we are running because the current
                    // top process wants us, so we should be counted as part
                    // of the top set and not just running for some random
                    // unknown reason in the background.
                    clientProcState =
                            ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
                }
                if (procState > clientProcState) {
                if (procState > clientProcState) {
                    procState = clientProcState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
                    procState = clientProcState;
                            ? clientProcState : ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
                }
                }
                if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
                if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
                    schedGroup = Process.THREAD_GROUP_DEFAULT;
                    schedGroup = Process.THREAD_GROUP_DEFAULT;