Merge "Fix problems with determining when to kill apps for wake usage." into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
567722eee1
@@ -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!
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:");
|
||||
|
||||
Reference in New Issue
Block a user