Disable freezer during AM provider/service dump
This change disables the freezer during ActiveServices.dumpService() and
ProviderMap.dumpProvider() in order to avoid 'dumpsys activity
<service|provider>' from timing out during bug reports.
Test: Using health/bugreport/capturebugreport, verify that the 'dumpsys
activity' sections no longer time out at 60 seconds.
Bug: 276451949
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:353c04e22e6817f3cef2c7540534d899dec50858)
Merged-In: I22c5a83e545cfaaab9bfb6f9cae99146c3c51d8c
Change-Id: I22c5a83e545cfaaab9bfb6f9cae99146c3c51d8c
This commit is contained in:
committed by
Cherrypicker Worker
parent
eaf91796a3
commit
fc854c65b5
@@ -7222,47 +7222,52 @@ public final class ActiveServices {
|
||||
*/
|
||||
protected boolean dumpService(FileDescriptor fd, PrintWriter pw, String name, int[] users,
|
||||
String[] args, int opti, boolean dumpAll) {
|
||||
final ArrayList<ServiceRecord> services = new ArrayList<>();
|
||||
try {
|
||||
mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
|
||||
final ArrayList<ServiceRecord> services = new ArrayList<>();
|
||||
|
||||
final Predicate<ServiceRecord> filter = DumpUtils.filterRecord(name);
|
||||
final Predicate<ServiceRecord> filter = DumpUtils.filterRecord(name);
|
||||
|
||||
synchronized (mAm) {
|
||||
if (users == null) {
|
||||
users = mAm.mUserController.getUsers();
|
||||
}
|
||||
|
||||
for (int user : users) {
|
||||
ServiceMap smap = mServiceMap.get(user);
|
||||
if (smap == null) {
|
||||
continue;
|
||||
synchronized (mAm) {
|
||||
if (users == null) {
|
||||
users = mAm.mUserController.getUsers();
|
||||
}
|
||||
ArrayMap<ComponentName, ServiceRecord> alls = smap.mServicesByInstanceName;
|
||||
for (int i=0; i<alls.size(); i++) {
|
||||
ServiceRecord r1 = alls.valueAt(i);
|
||||
|
||||
if (filter.test(r1)) {
|
||||
services.add(r1);
|
||||
for (int user : users) {
|
||||
ServiceMap smap = mServiceMap.get(user);
|
||||
if (smap == null) {
|
||||
continue;
|
||||
}
|
||||
ArrayMap<ComponentName, ServiceRecord> alls = smap.mServicesByInstanceName;
|
||||
for (int i=0; i<alls.size(); i++) {
|
||||
ServiceRecord r1 = alls.valueAt(i);
|
||||
|
||||
if (filter.test(r1)) {
|
||||
services.add(r1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (services.size() <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Sort by component name.
|
||||
services.sort(Comparator.comparing(WithComponentName::getComponentName));
|
||||
|
||||
boolean needSep = false;
|
||||
for (int i=0; i<services.size(); i++) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
if (services.size() <= 0) {
|
||||
return false;
|
||||
}
|
||||
needSep = true;
|
||||
dumpService("", fd, pw, services.get(i), args, dumpAll);
|
||||
|
||||
// Sort by component name.
|
||||
services.sort(Comparator.comparing(WithComponentName::getComponentName));
|
||||
|
||||
boolean needSep = false;
|
||||
for (int i=0; i<services.size(); i++) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
dumpService("", fd, pw, services.get(i), args, dumpAll);
|
||||
}
|
||||
return true;
|
||||
} finally {
|
||||
mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -351,21 +351,26 @@ public final class ProviderMap {
|
||||
|
||||
protected boolean dumpProvider(FileDescriptor fd, PrintWriter pw, String name, String[] args,
|
||||
int opti, boolean dumpAll) {
|
||||
ArrayList<ContentProviderRecord> providers = getProvidersForName(name);
|
||||
try {
|
||||
mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
|
||||
ArrayList<ContentProviderRecord> providers = getProvidersForName(name);
|
||||
|
||||
if (providers.size() <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean needSep = false;
|
||||
for (int i=0; i<providers.size(); i++) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
if (providers.size() <= 0) {
|
||||
return false;
|
||||
}
|
||||
needSep = true;
|
||||
dumpProvider("", fd, pw, providers.get(i), args, dumpAll);
|
||||
|
||||
boolean needSep = false;
|
||||
for (int i=0; i<providers.size(); i++) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
dumpProvider("", fd, pw, providers.get(i), args, dumpAll);
|
||||
}
|
||||
return true;
|
||||
} finally {
|
||||
mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user