diff options
author | Dianne Hackborn <hackbod@google.com> | 2010-08-15 17:33:02 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-08-15 17:33:02 -0700 |
commit | 567722eee190f7cf88dc7ea95167db76d5514842 (patch) | |
tree | 970afc373019504fade863b2f384f152d181b1ed /services/java | |
parent | f76a05e985c249f2540eb8925f673b5c63b9566b (diff) | |
parent | 1ebccf531d1049853b3b0630035434619682c016 (diff) | |
download | frameworks_base-567722eee190f7cf88dc7ea95167db76d5514842.zip frameworks_base-567722eee190f7cf88dc7ea95167db76d5514842.tar.gz frameworks_base-567722eee190f7cf88dc7ea95167db76d5514842.tar.bz2 |
Merge "Fix problems with determining when to kill apps for wake usage." into gingerbread
Diffstat (limited to 'services/java')
3 files changed, 51 insertions, 27 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index e5d1025..4762ddb 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -17,7 +17,6 @@ package com.android.server.am; import com.android.internal.R; -import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.os.BatteryStatsImpl; import com.android.server.AttributeCache; import com.android.server.IntentResolver; @@ -39,7 +38,6 @@ import android.app.AppGlobals; import android.app.ApplicationErrorReport; import android.app.Dialog; import android.app.IActivityController; -import android.app.IActivityManager; import android.app.IActivityWatcher; import android.app.IApplicationThread; import android.app.IInstrumentationWatcher; @@ -50,7 +48,6 @@ import android.app.Instrumentation; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; -import android.app.ResultInfo; import android.app.Service; import android.app.backup.IBackupManager; import android.content.ActivityNotFoundException; @@ -94,7 +91,6 @@ import android.os.Looper; import android.os.Message; import android.os.Parcel; import android.os.ParcelFileDescriptor; -import android.os.PowerManager; import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; @@ -109,6 +105,7 @@ import android.util.Slog; import android.util.Log; import android.util.PrintWriterPrinter; import android.util.SparseArray; +import android.util.TimeUtils; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -1185,10 +1182,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen case CHECK_EXCESSIVE_WAKE_LOCKS_MSG: { synchronized (ActivityManagerService.this) { checkExcessiveWakeLocksLocked(true); - mHandler.removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG); + removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG); if (mSleeping) { - Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG); - mHandler.sendMessageDelayed(nmsg, WAKE_LOCK_CHECK_DELAY); + Message nmsg = obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG); + sendMessageDelayed(nmsg, WAKE_LOCK_CHECK_DELAY); } } } break; @@ -11304,7 +11301,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen final long curRealtime = SystemClock.elapsedRealtime(); final long timeSince = curRealtime - mLastWakeLockCheckTime; mLastWakeLockCheckTime = curRealtime; - if (timeSince < 5*60*1000) { + if (timeSince < (WAKE_LOCK_CHECK_DELAY/3)) { doKills = false; } int i = mLruProcesses.size(); @@ -11318,9 +11315,19 @@ public final class ActivityManagerService extends ActivityManagerNative implemen app.pid, curRealtime); } long timeUsed = wtime - app.lastWakeTime; - Slog.i(TAG, "Wake for " + app + ": over " - + timeSince + " used " + timeUsed - + " (" + ((timeUsed*100)/timeSince) + "%)"); + if (false) { + StringBuilder sb = new StringBuilder(128); + sb.append("Wake for "); + app.toShortString(sb); + sb.append(": over "); + TimeUtils.formatDuration(timeSince, sb); + sb.append(" used "); + TimeUtils.formatDuration(timeUsed, sb); + sb.append(" ("); + sb.append((timeUsed*100)/timeSince); + sb.append("%)"); + Slog.i(TAG, sb.toString()); + } // If a process has held a wake lock for more // than 50% of the time during this period, // that sounds pad. Kill! diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java index 73e489f..6d1fbab 100644 --- a/services/java/com/android/server/am/ProcessRecord.java +++ b/services/java/com/android/server/am/ProcessRecord.java @@ -17,7 +17,6 @@ package com.android.server.am; import com.android.internal.os.BatteryStatsImpl; -import com.android.server.Watchdog; import android.app.ActivityManager; import android.app.Dialog; @@ -27,8 +26,9 @@ import android.content.ComponentName; import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.os.IBinder; -import android.os.RemoteException; +import android.os.SystemClock; import android.util.PrintWriterPrinter; +import android.util.TimeUtils; import java.io.PrintWriter; import java.util.ArrayList; @@ -129,6 +129,8 @@ class ProcessRecord { ComponentName errorReportReceiver; void dump(PrintWriter pw, String prefix) { + final long now = SystemClock.uptimeMillis(); + if (info.className != null) { pw.print(prefix); pw.print("class="); pw.println(info.className); } @@ -158,7 +160,8 @@ class ProcessRecord { pw.print(" curReceiver="); pw.println(curReceiver); pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting="); pw.print(starting); pw.print(" lastPss="); pw.println(lastPss); - pw.print(prefix); pw.print("lastActivityTime="); pw.print(lastActivityTime); + pw.print(prefix); pw.print("lastActivityTime="); + TimeUtils.formatDuration(lastActivityTime, now, pw); pw.print(" lruWeight="); pw.print(lruWeight); pw.print(" hidden="); pw.print(hidden); pw.print(" empty="); pw.println(empty); @@ -179,8 +182,10 @@ class ProcessRecord { pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq); pw.print(" lruSeq="); pw.println(lruSeq); pw.print(prefix); pw.print("lastWakeTime="); pw.print(lastWakeTime); - pw.print(" lastRequestedGc="); pw.print(lastRequestedGc); - pw.print(" lastLowMemory="); pw.print(lastLowMemory); + pw.print(" lastRequestedGc="); + TimeUtils.formatDuration(lastRequestedGc, now, pw); + pw.print(" lastLowMemory="); + TimeUtils.formatDuration(lastLowMemory, now, pw); pw.print(" reportLowMemory="); pw.println(reportLowMemory); if (killedBackground) { pw.print(prefix); pw.print("killedBackground="); pw.println(killedBackground); diff --git a/services/java/com/android/server/am/ServiceRecord.java b/services/java/com/android/server/am/ServiceRecord.java index 35f1875..ab5a78d 100644 --- a/services/java/com/android/server/am/ServiceRecord.java +++ b/services/java/com/android/server/am/ServiceRecord.java @@ -31,6 +31,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; +import android.util.TimeUtils; import java.io.PrintWriter; import java.util.ArrayList; @@ -117,7 +118,10 @@ class ServiceRecord extends Binder { StartItem si = list.get(i); pw.print(prefix); pw.print("#"); pw.print(i); pw.print(" id="); pw.print(si.id); - if (now != 0) pw.print(" dur="); pw.print(now-si.deliveredTime); + if (now != 0) { + pw.print(" dur="); + TimeUtils.formatDuration(si.deliveredTime, now, pw); + } if (si.deliveryCount != 0) { pw.print(" dc="); pw.print(si.deliveryCount); } @@ -140,9 +144,10 @@ class ServiceRecord extends Binder { pw.print(prefix); pw.print("permission="); pw.println(permission); } long now = SystemClock.uptimeMillis(); - pw.print(prefix); pw.print("baseDir="); pw.print(baseDir); - if (!resDir.equals(baseDir)) pw.print(" resDir="); pw.print(resDir); - pw.print(" dataDir="); pw.println(dataDir); + long nowReal = SystemClock.elapsedRealtime(); + pw.print(prefix); pw.print("baseDir="); pw.println(baseDir); + if (!resDir.equals(baseDir)) pw.print(prefix); pw.print("resDir="); pw.println(resDir); + pw.print(prefix); pw.print("dataDir="); pw.println(dataDir); pw.print(prefix); pw.print("app="); pw.println(app); if (isForeground || foregroundId != 0) { pw.print(prefix); pw.print("isForeground="); pw.print(isForeground); @@ -150,10 +155,15 @@ class ServiceRecord extends Binder { pw.print(" foregroundNoti="); pw.println(foregroundNoti); } pw.print(prefix); pw.print("createTime="); - pw.print(createTime-SystemClock.elapsedRealtime()); - pw.print(" lastActivity="); pw.print(lastActivity-now); - pw.print(" executingStart="); pw.print(executingStart-now); - pw.print(" restartTime="); pw.println(restartTime); + TimeUtils.formatDuration(createTime, nowReal, pw); + pw.print(" lastActivity="); + TimeUtils.formatDuration(lastActivity, now, pw); + pw.println(""); + pw.print(prefix); pw.print(" executingStart="); + TimeUtils.formatDuration(executingStart, now, pw); + pw.print(" restartTime="); + TimeUtils.formatDuration(restartTime, now, pw); + pw.println(""); if (startRequested || lastStartId != 0) { pw.print(prefix); pw.print("startRequested="); pw.print(startRequested); pw.print(" stopIfKilled="); pw.print(stopIfKilled); @@ -164,13 +174,15 @@ class ServiceRecord extends Binder { || restartDelay != 0 || nextRestartTime != 0) { pw.print(prefix); pw.print("executeNesting="); pw.print(executeNesting); pw.print(" restartCount="); pw.print(restartCount); - pw.print(" restartDelay="); pw.print(restartDelay-now); - pw.print(" nextRestartTime="); pw.print(nextRestartTime-now); + pw.print(" restartDelay="); + TimeUtils.formatDuration(restartDelay, now, pw); + pw.print(" nextRestartTime="); + TimeUtils.formatDuration(nextRestartTime, now, pw); pw.print(" crashCount="); pw.println(crashCount); } if (deliveredStarts.size() > 0) { pw.print(prefix); pw.println("Delivered Starts:"); - dumpStartList(pw, prefix, deliveredStarts, SystemClock.uptimeMillis()); + dumpStartList(pw, prefix, deliveredStarts, now); } if (pendingStarts.size() > 0) { pw.print(prefix); pw.println("Pending Starts:"); |