diff options
author | Dianne Hackborn <hackbod@google.com> | 2010-08-15 17:34:49 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-15 17:34:49 -0700 |
commit | 2e47052fc4ad3439adc2322fd953fd58a85d457c (patch) | |
tree | f7009029df9916dbdd540982e0b9764f031a9903 | |
parent | 6f6203950d782c53193b5e96be7fb9fa4fab339c (diff) | |
parent | 567722eee190f7cf88dc7ea95167db76d5514842 (diff) | |
download | frameworks_base-2e47052fc4ad3439adc2322fd953fd58a85d457c.zip frameworks_base-2e47052fc4ad3439adc2322fd953fd58a85d457c.tar.gz frameworks_base-2e47052fc4ad3439adc2322fd953fd58a85d457c.tar.bz2 |
am 567722ee: Merge "Fix problems with determining when to kill apps for wake usage." into gingerbread
Merge commit '567722eee190f7cf88dc7ea95167db76d5514842' into gingerbread-plus-aosp
* commit '567722eee190f7cf88dc7ea95167db76d5514842':
Fix problems with determining when to kill apps for wake usage.
-rw-r--r-- | core/java/android/os/BatteryStats.java | 7 | ||||
-rw-r--r-- | core/java/android/os/Looper.java | 3 | ||||
-rw-r--r-- | core/java/android/os/Message.java | 7 | ||||
-rw-r--r-- | core/java/android/util/TimeUtils.java | 125 | ||||
-rw-r--r-- | core/java/com/android/internal/app/PlatLogoActivity.java | 14 | ||||
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 39 | ||||
-rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 29 | ||||
-rw-r--r-- | services/java/com/android/server/am/ProcessRecord.java | 15 | ||||
-rw-r--r-- | services/java/com/android/server/am/ServiceRecord.java | 34 | ||||
-rw-r--r-- | tests/BatteryWaster/res/layout/battery_waster.xml | 2 | ||||
-rw-r--r-- | tests/BatteryWaster/src/com/android/batterywaster/BatteryWaster.java | 17 |
11 files changed, 243 insertions, 49 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index a0a3bdf..95f217f 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -23,6 +23,7 @@ import java.util.Map; import android.util.Log; import android.util.Printer; import android.util.SparseArray; +import android.util.TimeUtils; /** * A class providing access to battery usage statistics, including information on @@ -1576,8 +1577,10 @@ public abstract class BatteryStats implements Parcelable { Uid.Proc.ExcessiveWake ew = ps.getExcessiveWake(e); if (ew != null) { pw.print(prefix); pw.print(" * Killed for wake lock use: "); - pw.print(ew.usedTime); pw.print("ms over "); - pw.print(ew.overTime); pw.print("ms ("); + TimeUtils.formatDuration(ew.usedTime, pw); + pw.print(" over "); + TimeUtils.formatDuration(ew.overTime, pw); + pw.print(" ("); pw.print((ew.usedTime*100)/ew.overTime); pw.println("%)"); } diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java index a9d7342..d360140 100644 --- a/core/java/android/os/Looper.java +++ b/core/java/android/os/Looper.java @@ -192,10 +192,11 @@ public class Looper { pw.println(prefix + "mQueue=" + ((mQueue != null) ? mQueue : "(null")); if (mQueue != null) { synchronized (mQueue) { + long now = SystemClock.uptimeMillis(); Message msg = mQueue.mMessages; int n = 0; while (msg != null) { - pw.println(prefix + " Message " + n + ": " + msg); + pw.println(prefix + " Message " + n + ": " + msg.toString(now)); n++; msg = msg.next; } diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java index 476da1d..49b72fe 100644 --- a/core/java/android/os/Message.java +++ b/core/java/android/os/Message.java @@ -19,6 +19,7 @@ package android.os; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.util.TimeUtils; /** * @@ -366,13 +367,17 @@ public final class Message implements Parcelable { } public String toString() { + return toString(SystemClock.uptimeMillis()); + } + + String toString(long now) { StringBuilder b = new StringBuilder(); b.append("{ what="); b.append(what); b.append(" when="); - b.append(when); + TimeUtils.formatDuration(when-now, b); if (arg1 != 0) { b.append(" arg1="); diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 0fc70d5..b01a71d 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -24,6 +24,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; +import java.io.PrintWriter; import java.util.TimeZone; import java.util.Date; @@ -130,4 +131,128 @@ public class TimeUtils { public static String getTimeZoneDatabaseVersion() { return ZoneInfoDB.getVersion(); } + + private static final int SECONDS_PER_MINUTE = 60; + private static final int SECONDS_PER_HOUR = 60 * 60; + private static final int SECONDS_PER_DAY = 24 * 60 * 60; + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, StringBuilder builder) { + if (duration == 0) { + builder.append("0"); + return; + } + if (duration > 0) { + builder.append("+"); + } else { + builder.append("-"); + duration = -duration; + } + + int millis = (int)(duration%1000); + int seconds = (int) Math.floor(duration / 1000); + int days = 0, hours = 0, minutes = 0; + + if (seconds > SECONDS_PER_DAY) { + days = seconds / SECONDS_PER_DAY; + seconds -= days * SECONDS_PER_DAY; + } + if (seconds > SECONDS_PER_HOUR) { + hours = seconds / SECONDS_PER_HOUR; + seconds -= hours * SECONDS_PER_HOUR; + } + if (seconds > SECONDS_PER_MINUTE) { + minutes = seconds / SECONDS_PER_MINUTE; + seconds -= minutes * SECONDS_PER_MINUTE; + } + + boolean doall = false; + if (days > 0) { + builder.append(days); + builder.append('d'); + doall = true; + } + if (doall || hours > 0) { + builder.append(hours); + builder.append('h'); + doall = true; + } + if (doall || minutes > 0) { + builder.append(minutes); + builder.append('m'); + doall = true; + } + if (doall || seconds > 0) { + builder.append(seconds); + builder.append('s'); + doall = true; + } + builder.append(millis); + builder.append("ms"); + } + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long duration, PrintWriter pw) { + if (duration == 0) { + pw.print("0"); + return; + } + if (duration > 0) { + pw.print("+"); + } else { + pw.print("-"); + duration = -duration; + } + + int millis = (int)(duration%1000); + int seconds = (int) Math.floor(duration / 1000); + int days = 0, hours = 0, minutes = 0; + + if (seconds > SECONDS_PER_DAY) { + days = seconds / SECONDS_PER_DAY; + seconds -= days * SECONDS_PER_DAY; + } + if (seconds > SECONDS_PER_HOUR) { + hours = seconds / SECONDS_PER_HOUR; + seconds -= hours * SECONDS_PER_HOUR; + } + if (seconds > SECONDS_PER_MINUTE) { + minutes = seconds / SECONDS_PER_MINUTE; + seconds -= minutes * SECONDS_PER_MINUTE; + } + + boolean doall = false; + if (days > 0) { + pw.print(days); + pw.print('d'); + doall = true; + } + if (doall || hours > 0) { + pw.print(hours); + pw.print('h'); + doall = true; + } + if (doall || minutes > 0) { + pw.print(minutes); + pw.print('m'); + doall = true; + } + if (doall || seconds > 0) { + pw.print(seconds); + pw.print('s'); + doall = true; + } + pw.print(millis); + pw.print("ms"); + } + + + /** @hide Just for debugging; not internationalized. */ + public static void formatDuration(long time, long now, PrintWriter pw) { + if (time == 0) { + pw.print("--"); + return; + } + formatDuration(time-now, pw); + } } diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index ce5959d..e1c5564 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -18,17 +18,31 @@ package com.android.internal.app; import android.app.Activity; import android.os.Bundle; +import android.view.MotionEvent; import android.widget.ImageView; +import android.widget.Toast; public class PlatLogoActivity extends Activity { + Toast mToast; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mToast = Toast.makeText(this, "Zombie art by Jack Larson", Toast.LENGTH_SHORT); + ImageView content = new ImageView(this); content.setImageResource(com.android.internal.R.drawable.platlogo); content.setScaleType(ImageView.ScaleType.FIT_CENTER); setContentView(content); } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_UP) { + mToast.show(); + } + return super.dispatchTouchEvent(ev); + } } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 7c3d375..a70dbf6 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -27,7 +27,6 @@ import android.os.ParcelFormatException; import android.os.Parcelable; import android.os.Process; import android.os.SystemClock; -import android.os.BatteryStats.Uid.Proc.ExcessiveWake; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; @@ -1243,25 +1242,31 @@ public final class BatteryStatsImpl extends BatteryStats { int mWakeLockNesting; public void noteStartWakeLocked(int uid, int pid, String name, int type) { - if (mWakeLockNesting == 0) { - mHistoryCur.states |= HistoryItem.STATE_WAKE_LOCK_FLAG; - if (DEBUG_HISTORY) Slog.v(TAG, "Start wake lock to: " - + Integer.toHexString(mHistoryCur.states)); - addHistoryRecordLocked(SystemClock.elapsedRealtime()); + if (type == WAKE_TYPE_PARTIAL) { + // Only care about partial wake locks, since full wake locks + // will be canceled when the user puts the screen to sleep. + if (mWakeLockNesting == 0) { + mHistoryCur.states |= HistoryItem.STATE_WAKE_LOCK_FLAG; + if (DEBUG_HISTORY) Slog.v(TAG, "Start wake lock to: " + + Integer.toHexString(mHistoryCur.states)); + addHistoryRecordLocked(SystemClock.elapsedRealtime()); + } + mWakeLockNesting++; } - mWakeLockNesting++; if (uid >= 0) { getUidStatsLocked(uid).noteStartWakeLocked(pid, name, type); } } public void noteStopWakeLocked(int uid, int pid, String name, int type) { - mWakeLockNesting--; - if (mWakeLockNesting == 0) { - mHistoryCur.states &= ~HistoryItem.STATE_WAKE_LOCK_FLAG; - if (DEBUG_HISTORY) Slog.v(TAG, "Stop wake lock to: " - + Integer.toHexString(mHistoryCur.states)); - addHistoryRecordLocked(SystemClock.elapsedRealtime()); + if (type == WAKE_TYPE_PARTIAL) { + mWakeLockNesting--; + if (mWakeLockNesting == 0) { + mHistoryCur.states &= ~HistoryItem.STATE_WAKE_LOCK_FLAG; + if (DEBUG_HISTORY) Slog.v(TAG, "Stop wake lock to: " + + Integer.toHexString(mHistoryCur.states)); + addHistoryRecordLocked(SystemClock.elapsedRealtime()); + } } if (uid >= 0) { getUidStatsLocked(uid).noteStopWakeLocked(pid, name, type); @@ -1355,7 +1360,7 @@ public final class BatteryStatsImpl extends BatteryStats { // Fake a wake lock, so we consider the device waked as long // as the screen is on. - noteStartWakeLocked(-1, -1, "dummy", 0); + noteStartWakeLocked(-1, -1, "dummy", WAKE_TYPE_PARTIAL); } } @@ -1371,7 +1376,7 @@ public final class BatteryStatsImpl extends BatteryStats { mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(this); } - noteStopWakeLocked(-1, -1, "dummy", 0); + noteStopWakeLocked(-1, -1, "dummy", WAKE_TYPE_PARTIAL); } } @@ -3465,7 +3470,7 @@ public final class BatteryStatsImpl extends BatteryStats { if (t != null) { t.startRunningLocked(BatteryStatsImpl.this); } - if (pid >= 0) { + if (pid >= 0 && type == WAKE_TYPE_PARTIAL) { Pid p = getPidStatsLocked(pid); p.mWakeStart = SystemClock.elapsedRealtime(); } @@ -3476,7 +3481,7 @@ public final class BatteryStatsImpl extends BatteryStats { if (t != null) { t.stopRunningLocked(BatteryStatsImpl.this); } - if (pid >= 0) { + if (pid >= 0 && type == WAKE_TYPE_PARTIAL) { Pid p = mPids.get(pid); if (p != null) { p.mWakeSum += SystemClock.elapsedRealtime() - p.mWakeStart; diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 60e5633..cd5dea4 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; @@ -95,7 +92,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; @@ -110,6 +106,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; @@ -1186,10 +1183,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; @@ -11328,7 +11325,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(); @@ -11342,9 +11339,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:"); diff --git a/tests/BatteryWaster/res/layout/battery_waster.xml b/tests/BatteryWaster/res/layout/battery_waster.xml index 36aa68b..57a5b55 100644 --- a/tests/BatteryWaster/res/layout/battery_waster.xml +++ b/tests/BatteryWaster/res/layout/battery_waster.xml @@ -25,6 +25,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="25dp" + android:saveEnabled="false" android:textSize="18sp" android:textColor="#ffffffff" android:text="@string/waste_away" @@ -35,6 +36,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_marginTop="25dp" + android:saveEnabled="false" android:textSize="18sp" android:textColor="#ffffffff" android:text="@string/wake_away" diff --git a/tests/BatteryWaster/src/com/android/batterywaster/BatteryWaster.java b/tests/BatteryWaster/src/com/android/batterywaster/BatteryWaster.java index 499330f..48c4520 100644 --- a/tests/BatteryWaster/src/com/android/batterywaster/BatteryWaster.java +++ b/tests/BatteryWaster/src/com/android/batterywaster/BatteryWaster.java @@ -39,6 +39,7 @@ public class BatteryWaster extends Activity { DateFormat mDateFormat; IntentFilter mFilter; PowerManager.WakeLock mWakeLock; + PowerManager.WakeLock mPartialWakeLock; SpinThread mThread; boolean mWasting, mWaking; @@ -66,6 +67,8 @@ public class BatteryWaster extends Activity { PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "BatteryWaster"); mWakeLock.setReferenceCounted(false); + mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "BatteryWaster"); + mPartialWakeLock.setReferenceCounted(false); } @Override @@ -80,6 +83,9 @@ public class BatteryWaster extends Activity { if (mWakeLock.isHeld()) { mWakeLock.release(); } + if (mPartialWakeLock.isHeld()) { + mPartialWakeLock.release(); + } } View.OnClickListener mClickListener = new View.OnClickListener() { @@ -133,7 +139,7 @@ public class BatteryWaster extends Activity { } void updateWakeLock() { - if (mWasting || mWaking) { + if (mWasting) { if (!mWakeLock.isHeld()) { mWakeLock.acquire(); } @@ -142,6 +148,15 @@ public class BatteryWaster extends Activity { mWakeLock.release(); } } + if (mWaking) { + if (!mPartialWakeLock.isHeld()) { + mPartialWakeLock.acquire(); + } + } else { + if (mPartialWakeLock.isHeld()) { + mPartialWakeLock.release(); + } + } } void log(String s) { |