Loading services/java/com/android/server/am/ActivityManagerService.java +29 −9 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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. Loading Loading @@ -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; } } Loading Loading @@ -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; Loading Loading @@ -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; Loading
services/java/com/android/server/am/ActivityManagerService.java +29 −9 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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. Loading Loading @@ -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; } } Loading Loading @@ -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; Loading Loading @@ -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;