Loading services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ class ActivityManagerDebugConfig { // Available log categories in the activity manager package. static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_ANR = false; static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_BACKUP = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST = DEBUG_ALL || false; Loading services/core/java/com/android/server/am/ActivityManagerService.java +27 −9 Original line number Diff line number Diff line Loading @@ -284,6 +284,7 @@ import static com.android.internal.util.XmlUtils.writeBooleanAttribute; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_BACKGROUND; Loading Loading @@ -5091,8 +5092,13 @@ public final class ActivityManagerService extends ActivityManagerNative int num = firstPids.size(); for (int i = 0; i < num; i++) { synchronized (observer) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for pid " + firstPids.get(i)); final long sime = SystemClock.elapsedRealtime(); Process.sendSignal(firstPids.get(i), Process.SIGNAL_QUIT); observer.wait(200); // Wait for write-close, give up after 200msec observer.wait(1000); // Wait for write-close, give up after 1 sec if (DEBUG_ANR) Slog.d(TAG, "Done with pid " + firstPids.get(i) + " in " + (SystemClock.elapsedRealtime()-sime) + "ms"); } } } catch (InterruptedException e) { Loading @@ -5105,7 +5111,11 @@ public final class ActivityManagerService extends ActivityManagerNative int[] pids = Process.getPidsForCommands(nativeProcs); if (pids != null) { for (int pid : pids) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for native pid " + pid); final long sime = SystemClock.elapsedRealtime(); Debug.dumpNativeBacktraceToFile(pid, tracesPath); if (DEBUG_ANR) Slog.d(TAG, "Done with native pid " + pid + " in " + (SystemClock.elapsedRealtime()-sime) + "ms"); } } } Loading @@ -5132,13 +5142,20 @@ public final class ActivityManagerService extends ActivityManagerNative numProcs++; try { synchronized (observer) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for extra pid " + stats.pid); final long stime = SystemClock.elapsedRealtime(); Process.sendSignal(stats.pid, Process.SIGNAL_QUIT); observer.wait(200); // Wait for write-close, give up after 200msec observer.wait(1000); // Wait for write-close, give up after 1 sec if (DEBUG_ANR) Slog.d(TAG, "Done with extra pid " + stats.pid + " in " + (SystemClock.elapsedRealtime()-stime) + "ms"); } } catch (InterruptedException e) { Slog.wtf(TAG, e); } } else if (DEBUG_ANR) { Slog.d(TAG, "Skipping next CPU consuming process, not a java proc: " + stats.pid); } } } Loading Loading @@ -10784,12 +10801,13 @@ public final class ActivityManagerService extends ActivityManagerNative return; } final long token = Binder.clearCallingIdentity(); try { mAppErrors.appNotResponding(host, null, null, false, "ContentProvider not responding"); } finally { Binder.restoreCallingIdentity(token); mHandler.post(new Runnable() { @Override public void run() { mAppErrors.appNotResponding(host, null, null, false, "ContentProvider not responding"); } }); } public final void installSystemProviders() { Loading services/core/java/com/android/server/am/AppErrors.java +3 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import java.util.HashMap; import java.util.concurrent.Semaphore; import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.ActivityManagerService.MY_PID; Loading Loading @@ -806,8 +807,10 @@ class AppErrors { if (pid > 0 && pid != app.pid && pid != parentPid && pid != MY_PID) { if (r.persistent) { firstPids.add(pid); if (DEBUG_ANR) Slog.i(TAG, "Adding persistent proc: " + r); } else { lastPids.put(pid, Boolean.TRUE); if (DEBUG_ANR) Slog.i(TAG, "Adding ANR proc: " + r); } } } Loading Loading
services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ class ActivityManagerDebugConfig { // Available log categories in the activity manager package. static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_ANR = false; static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_BACKUP = DEBUG_ALL || false; static final boolean DEBUG_BROADCAST = DEBUG_ALL || false; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +27 −9 Original line number Diff line number Diff line Loading @@ -284,6 +284,7 @@ import static com.android.internal.util.XmlUtils.writeBooleanAttribute; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_BACKGROUND; Loading Loading @@ -5091,8 +5092,13 @@ public final class ActivityManagerService extends ActivityManagerNative int num = firstPids.size(); for (int i = 0; i < num; i++) { synchronized (observer) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for pid " + firstPids.get(i)); final long sime = SystemClock.elapsedRealtime(); Process.sendSignal(firstPids.get(i), Process.SIGNAL_QUIT); observer.wait(200); // Wait for write-close, give up after 200msec observer.wait(1000); // Wait for write-close, give up after 1 sec if (DEBUG_ANR) Slog.d(TAG, "Done with pid " + firstPids.get(i) + " in " + (SystemClock.elapsedRealtime()-sime) + "ms"); } } } catch (InterruptedException e) { Loading @@ -5105,7 +5111,11 @@ public final class ActivityManagerService extends ActivityManagerNative int[] pids = Process.getPidsForCommands(nativeProcs); if (pids != null) { for (int pid : pids) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for native pid " + pid); final long sime = SystemClock.elapsedRealtime(); Debug.dumpNativeBacktraceToFile(pid, tracesPath); if (DEBUG_ANR) Slog.d(TAG, "Done with native pid " + pid + " in " + (SystemClock.elapsedRealtime()-sime) + "ms"); } } } Loading @@ -5132,13 +5142,20 @@ public final class ActivityManagerService extends ActivityManagerNative numProcs++; try { synchronized (observer) { if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for extra pid " + stats.pid); final long stime = SystemClock.elapsedRealtime(); Process.sendSignal(stats.pid, Process.SIGNAL_QUIT); observer.wait(200); // Wait for write-close, give up after 200msec observer.wait(1000); // Wait for write-close, give up after 1 sec if (DEBUG_ANR) Slog.d(TAG, "Done with extra pid " + stats.pid + " in " + (SystemClock.elapsedRealtime()-stime) + "ms"); } } catch (InterruptedException e) { Slog.wtf(TAG, e); } } else if (DEBUG_ANR) { Slog.d(TAG, "Skipping next CPU consuming process, not a java proc: " + stats.pid); } } } Loading Loading @@ -10784,12 +10801,13 @@ public final class ActivityManagerService extends ActivityManagerNative return; } final long token = Binder.clearCallingIdentity(); try { mAppErrors.appNotResponding(host, null, null, false, "ContentProvider not responding"); } finally { Binder.restoreCallingIdentity(token); mHandler.post(new Runnable() { @Override public void run() { mAppErrors.appNotResponding(host, null, null, false, "ContentProvider not responding"); } }); } public final void installSystemProviders() { Loading
services/core/java/com/android/server/am/AppErrors.java +3 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import java.util.HashMap; import java.util.concurrent.Semaphore; import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.ActivityManagerService.MY_PID; Loading Loading @@ -806,8 +807,10 @@ class AppErrors { if (pid > 0 && pid != app.pid && pid != parentPid && pid != MY_PID) { if (r.persistent) { firstPids.add(pid); if (DEBUG_ANR) Slog.i(TAG, "Adding persistent proc: " + r); } else { lastPids.put(pid, Boolean.TRUE); if (DEBUG_ANR) Slog.i(TAG, "Adding ANR proc: " + r); } } } Loading