Merge "Update process state after unbinding a service." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-05-05 18:51:56 +00:00
committed by Android (Google) Code Review
3 changed files with 26 additions and 17 deletions

View File

@@ -1364,7 +1364,7 @@ public final class ActiveServices {
// This could have made the service more important.
mAm.updateLruProcessLocked(s.app, s.app.hasClientActivities
|| s.app.treatLikeActivity, b.client);
mAm.updateOomAdjLocked(s.app);
mAm.updateOomAdjLocked(s.app, true);
}
if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Bind " + s + " with " + b
@@ -1479,13 +1479,15 @@ public final class ActiveServices {
r.binding.service.app.hasClientActivities
|| r.binding.service.app.treatLikeActivity, null);
}
mAm.updateOomAdjLocked(r.binding.service.app);
mAm.updateOomAdjLocked(r.binding.service.app, false);
}
}
} finally {
Binder.restoreCallingIdentity(origId);
}
mAm.updateOomAdjLocked();
return true;
}
@@ -2225,7 +2227,7 @@ public final class ActiveServices {
bumpServiceExecutingLocked(r, execInFg, "start");
if (!oomAdjusted) {
oomAdjusted = true;
mAm.updateOomAdjLocked(r.app);
mAm.updateOomAdjLocked(r.app, true);
}
if (r.fgRequired && !r.fgWaiting) {
if (!r.isForeground) {
@@ -2349,7 +2351,7 @@ public final class ActiveServices {
if (ibr.hasBound) {
try {
bumpServiceExecutingLocked(r, false, "bring down unbind");
mAm.updateOomAdjLocked(r.app);
mAm.updateOomAdjLocked(r.app, true);
ibr.hasBound = false;
ibr.requested = false;
r.app.thread.scheduleUnbindService(r,
@@ -2441,7 +2443,7 @@ public final class ActiveServices {
bumpServiceExecutingLocked(r, false, "destroy");
mDestroyingServices.add(r);
r.destroying = true;
mAm.updateOomAdjLocked(r.app);
mAm.updateOomAdjLocked(r.app, true);
r.app.thread.scheduleStopService(r);
} catch (Exception e) {
Slog.w(TAG, "Exception when destroying service "
@@ -2542,7 +2544,7 @@ public final class ActiveServices {
// it to go down there and we want it to start out near the top.
mAm.updateLruProcessLocked(s.app, false, null);
}
mAm.updateOomAdjLocked(s.app);
mAm.updateOomAdjLocked(s.app, true);
b.intent.hasBound = false;
// Assume the client doesn't want to know about a rebind;
// we will deal with that later if it asks for one.
@@ -2695,7 +2697,7 @@ public final class ActiveServices {
mDestroyingServices.remove(r);
r.bindings.clear();
}
mAm.updateOomAdjLocked(r.app);
mAm.updateOomAdjLocked(r.app, true);
}
r.executeFg = false;
if (r.tracker != null) {

View File

@@ -11313,7 +11313,7 @@ public class ActivityManagerService extends IActivityManager.Stub
checkTime(startTime, "getContentProviderImpl: before updateOomAdj");
final int verifiedAdj = cpr.proc.verifiedAdj;
boolean success = updateOomAdjLocked(cpr.proc);
boolean success = updateOomAdjLocked(cpr.proc, true);
// XXX things have changed so updateOomAdjLocked doesn't actually tell us
// if the process has been successfully adjusted. So to reduce races with
// it, we will check whether the process still exists. Note that this doesn't
@@ -11775,7 +11775,7 @@ public class ActivityManagerService extends IActivityManager.Stub
dst.proc = r;
dst.notifyAll();
}
updateOomAdjLocked(r);
updateOomAdjLocked(r, true);
maybeUpdateProviderUsageStatsLocked(r, src.info.packageName,
src.info.authority);
}
@@ -13506,7 +13506,7 @@ public class ActivityManagerService extends IActivityManager.Stub
}
}
if (changed) {
updateOomAdjLocked(pr);
updateOomAdjLocked(pr, true);
}
}
} finally {
@@ -18279,7 +18279,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mBackupAppName = app.packageName;
// Try not to kill the process during backup
updateOomAdjLocked(proc);
updateOomAdjLocked(proc, true);
// If the process is already attached, schedule the creation of the backup agent now.
// If it is not yet live, this will be done when it attaches to the framework.
@@ -18376,7 +18376,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// Not backing this app up any more; reset its OOM adjustment
final ProcessRecord proc = mBackupTarget.app;
updateOomAdjLocked(proc);
updateOomAdjLocked(proc, true);
proc.inFullBackup = false;
oldBackupUid = mBackupTarget != null ? mBackupTarget.appInfo.uid : -1;
@@ -22136,7 +22136,14 @@ public class ActivityManagerService extends IActivityManager.Stub
return act;
}
final boolean updateOomAdjLocked(ProcessRecord app) {
/**
* Update OomAdj for a specific process.
* @param app The process to update
* @param oomAdjAll If it's ok to call updateOomAdjLocked() for all running apps
* if necessary, or skip.
* @return whether updateOomAdjLocked(app) was successful.
*/
final boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll) {
final ActivityRecord TOP_ACT = resumedAppLocked();
final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null;
final boolean wasCached = app.cached;
@@ -22151,7 +22158,8 @@ public class ActivityManagerService extends IActivityManager.Stub
? app.curRawAdj : ProcessList.UNKNOWN_ADJ;
boolean success = updateOomAdjLocked(app, cachedAdj, TOP_APP, false,
SystemClock.uptimeMillis());
if (wasCached != app.cached || app.curRawAdj == ProcessList.UNKNOWN_ADJ) {
if (oomAdjAll
&& (wasCached != app.cached || app.curRawAdj == ProcessList.UNKNOWN_ADJ)) {
// Changed to/from cached state, so apps after it in the LRU
// list may also be changed.
updateOomAdjLocked();
@@ -23729,7 +23737,7 @@ public class ActivityManagerService extends IActivityManager.Stub
}
pr.hasOverlayUi = hasOverlayUi;
//Slog.i(TAG, "Setting hasOverlayUi=" + pr.hasOverlayUi + " for pid=" + pid);
updateOomAdjLocked(pr);
updateOomAdjLocked(pr, true);
}
}

View File

@@ -51,7 +51,6 @@ import android.os.UserHandle;
import android.util.EventLog;
import android.util.Slog;
import android.util.TimeUtils;
import com.android.server.DeviceIdleController;
import static com.android.server.am.ActivityManagerDebugConfig.*;
@@ -682,7 +681,7 @@ public final class BroadcastQueue {
// are already core system stuff so don't matter for this.
r.curApp = filter.receiverList.app;
filter.receiverList.app.curReceivers.add(r);
mService.updateOomAdjLocked(r.curApp);
mService.updateOomAdjLocked(r.curApp, true);
}
}
try {