Reduce calls to updateOomAdj() during unbind
When unbinding a service, avoid repeatedly calling updateOomAdj() as doing it one time should be sufficient. Running the below CTS test repeatedly with and without the optimization resulted in CPU thread time changing from 1800ms to 1450ms. Test includes a mix of service bindings and activity launches, etc. Bug: 130684057 Test: atest CtsAppTestCases:ActivityManagerProcessStateTest Change-Id: Iadb3743ac1d8b506a22baded279f2b7db7c60aaf
This commit is contained in:
@@ -1946,8 +1946,6 @@ public final class ActiveServices {
|
||||
r.binding.service.app.hasClientActivities()
|
||||
|| r.binding.service.app.treatLikeActivity, null);
|
||||
}
|
||||
mAm.updateOomAdjLocked(r.binding.service.app, false,
|
||||
OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2906,15 +2904,15 @@ public final class ActiveServices {
|
||||
|
||||
// Tell the service that it has been unbound.
|
||||
if (r.app != null && r.app.thread != null) {
|
||||
for (int i=r.bindings.size()-1; i>=0; i--) {
|
||||
boolean needOomAdj = false;
|
||||
for (int i = r.bindings.size() - 1; i >= 0; i--) {
|
||||
IntentBindRecord ibr = r.bindings.valueAt(i);
|
||||
if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Bringing down binding " + ibr
|
||||
+ ": hasBound=" + ibr.hasBound);
|
||||
if (ibr.hasBound) {
|
||||
try {
|
||||
bumpServiceExecutingLocked(r, false, "bring down unbind");
|
||||
mAm.updateOomAdjLocked(r.app, true,
|
||||
OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
|
||||
needOomAdj = true;
|
||||
ibr.hasBound = false;
|
||||
ibr.requested = false;
|
||||
r.app.thread.scheduleUnbindService(r,
|
||||
@@ -2926,6 +2924,10 @@ public final class ActiveServices {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (needOomAdj) {
|
||||
mAm.updateOomAdjLocked(r.app, true,
|
||||
OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
|
||||
}
|
||||
}
|
||||
|
||||
// Check to see if the service had been started as foreground, but being
|
||||
|
||||
Reference in New Issue
Block a user