diff options
Diffstat (limited to 'core/java/android')
| -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 |
4 files changed, 138 insertions, 4 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index a0a3bdfd059d..95f217f4e036 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 a9d7342ec374..d360140d0c10 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 476da1df32db..49b72fee22d3 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 0fc70d52b878..b01a71d0248a 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); + } } |
