summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2010-09-10 14:05:57 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-09-10 14:05:57 -0700
commitb724d2519a900744a477bd57df6a2f8703c87e72 (patch)
treeb46b6a9aff423f8be01f233b1cdd43a616e6119b
parent863330154e8d42e688ffda02c497f53d8b213a2d (diff)
parent1e02d36b0f1dc833cf8a837c7619fbe6478694c8 (diff)
downloadframeworks_base-b724d2519a900744a477bd57df6a2f8703c87e72.zip
frameworks_base-b724d2519a900744a477bd57df6a2f8703c87e72.tar.gz
frameworks_base-b724d2519a900744a477bd57df6a2f8703c87e72.tar.bz2
Merge "Enable strictmode logging in system_server & add a lock." into gingerbread
-rw-r--r--core/java/android/app/ActivityThread.java2
-rw-r--r--services/java/com/android/server/SystemServer.java11
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java20
3 files changed, 26 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 373142d..f8407c2 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3107,6 +3107,8 @@ public final class ActivityThread {
/**
* For system applications on userdebug/eng builds, log stack
* traces of disk and network access to dropbox for analysis.
+ *
+ * Similar logic exists in SystemServer.java.
*/
if ((data.appInfo.flags &
(ApplicationInfo.FLAG_SYSTEM |
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 4a286e7..4a9c9e9 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -517,6 +517,17 @@ class ServerThread extends Thread {
}
});
+ // For debug builds, log event loop stalls to dropbox for analysis.
+ // Similar logic also appears in ActivityThread.java for system apps.
+ if (!"user".equals(Build.TYPE)) {
+ Slog.i(TAG, "Enabling StrictMode for system server.");
+ StrictMode.setThreadPolicy(
+ StrictMode.DISALLOW_DISK_WRITE |
+ StrictMode.DISALLOW_DISK_READ |
+ StrictMode.DISALLOW_NETWORK |
+ StrictMode.PENALTY_DROPBOX);
+ }
+
Looper.loop();
Slog.d(TAG, "System ServerThread is exiting!");
}
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 483941d..2cdf31e 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -6535,13 +6535,19 @@ public final class ActivityManagerService extends ActivityManagerNative
* Utility function for addErrorToDropBox and handleStrictModeViolation's logging
* to append various headers to the dropbox log text.
*/
- private static void appendDropBoxProcessHeaders(ProcessRecord process, StringBuilder sb) {
- if (process == null || process.pid == MY_PID) {
- sb.append("Process: system_server\n");
- } else {
- sb.append("Process: ").append(process.processName).append("\n");
- }
- if (process != null) {
+ private void appendDropBoxProcessHeaders(ProcessRecord process, StringBuilder sb) {
+ // Note: ProcessRecord 'process' is guarded by the service
+ // instance. (notably process.pkgList, which could otherwise change
+ // concurrently during execution of this method)
+ synchronized (this) {
+ if (process == null || process.pid == MY_PID) {
+ sb.append("Process: system_server\n");
+ } else {
+ sb.append("Process: ").append(process.processName).append("\n");
+ }
+ if (process == null) {
+ return;
+ }
int flags = process.info.flags;
IPackageManager pm = AppGlobals.getPackageManager();
sb.append("Flags: 0x").append(Integer.toString(flags, 16)).append("\n");