diff options
| author | Marc Blank <mblank@google.com> | 2012-09-19 11:21:14 -0700 |
|---|---|---|
| committer | Marc Blank <mblank@google.com> | 2012-09-19 11:21:14 -0700 |
| commit | 4639556e522bd35a932076ce04fdafc0184db355 (patch) | |
| tree | c08616a1c90816fc65168703c7bc163b4fa31cc4 /emailsync/src | |
| parent | b203b2b1196bfd5507c83a4fe81d362de840ec0a (diff) | |
| download | android_packages_apps_Email-4639556e522bd35a932076ce04fdafc0184db355.tar.gz android_packages_apps_Email-4639556e522bd35a932076ce04fdafc0184db355.tar.bz2 android_packages_apps_Email-4639556e522bd35a932076ce04fdafc0184db355.zip | |
Add bugreport dump of wake lock times
Change-Id: I4086e8ee620ac10d5a3c1673838c567753c1a553
Diffstat (limited to 'emailsync/src')
| -rw-r--r-- | emailsync/src/com/android/emailsync/SyncManager.java | 72 |
1 files changed, 65 insertions, 7 deletions
diff --git a/emailsync/src/com/android/emailsync/SyncManager.java b/emailsync/src/com/android/emailsync/SyncManager.java index 6d2064f4c..25f1171c4 100644 --- a/emailsync/src/com/android/emailsync/SyncManager.java +++ b/emailsync/src/com/android/emailsync/SyncManager.java @@ -73,7 +73,9 @@ import org.apache.http.conn.routing.HttpRoute; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; +import java.io.FileDescriptor; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -179,13 +181,17 @@ public abstract class SyncManager extends Service implements Runnable { /*package*/ public ConcurrentHashMap<Long, SyncError> mSyncErrorMap = new ConcurrentHashMap<Long, SyncError>(); // Keeps track of which services require a wake lock (by mailbox id) - private final HashMap<Long, Boolean> mWakeLocks = new HashMap<Long, Boolean>(); + private final HashMap<Long, Long> mWakeLocks = new HashMap<Long, Long>(); + // Keeps track of which services have held a wake lock (by mailbox id) + private final HashMap<Long, Long> mWakeLocksHistory = new HashMap<Long, Long>(); // Keeps track of PendingIntents for mailbox alarms (by mailbox id) private final HashMap<Long, PendingIntent> mPendingIntents = new HashMap<Long, PendingIntent>(); // The actual WakeLock obtained by SyncServiceManager private WakeLock mWakeLock = null; // Keep our cached list of active Accounts here public final AccountList mAccountList = new AccountList(); + // Keep track of when we started up + private long mServiceStartTime; // Observers that we use to look for changed mail-related data private final Handler mHandler = new Handler(); @@ -976,31 +982,40 @@ public abstract class SyncManager extends Service implements Runnable { private void acquireWakeLock(long id) { synchronized (mWakeLocks) { - Boolean lock = mWakeLocks.get(id); + Long lock = mWakeLocks.get(id); if (lock == null) { if (mWakeLock == null) { PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MAIL_SERVICE"); mWakeLock.acquire(); - //log("+WAKE LOCK ACQUIRED"); + // STOPSHIP Remove + log("+WAKE LOCK ACQUIRED"); } - mWakeLocks.put(id, true); + mWakeLocks.put(id, System.currentTimeMillis()); } } } private void releaseWakeLock(long id) { synchronized (mWakeLocks) { - Boolean lock = mWakeLocks.get(id); + Long lock = mWakeLocks.get(id); if (lock != null) { - mWakeLocks.remove(id); + Long startTime = mWakeLocks.remove(id); + Long historicalTime = mWakeLocksHistory.get(id); + if (historicalTime == null) { + historicalTime = 0L; + } + mWakeLocksHistory.put(id, + historicalTime + (System.currentTimeMillis() - startTime)); if (mWakeLocks.isEmpty()) { if (mWakeLock != null) { mWakeLock.release(); } mWakeLock = null; - //log("+WAKE LOCK RELEASED"); + // STOPSHIP Remove + log("+WAKE LOCK RELEASED"); } else { + log("Release request for lock not held: " + id); } } } @@ -1427,6 +1442,8 @@ public abstract class SyncManager extends Service implements Runnable { } else if (sStop) { // If we were trying to stop, attempt a restart in 5 secs setAlarm(SYNC_SERVICE_MAILBOX_ID, 5*SECONDS); + } else { + mServiceStartTime = System.currentTimeMillis(); } } } finally { @@ -2265,4 +2282,45 @@ public abstract class SyncManager extends Service implements Runnable { static public Context getContext() { return INSTANCE; } + + private void writeWakeLockTimes(PrintWriter pw, HashMap<Long, Long> map, boolean historical) { + long now = System.currentTimeMillis(); + for (long mailboxId: map.keySet()) { + Long time = map.get(mailboxId); + if (time == null) { + // Just in case... + continue; + } + Mailbox mailbox = Mailbox.restoreMailboxWithId(this, mailboxId); + StringBuilder sb = new StringBuilder(); + if (mailboxId == EXTRA_MAILBOX_ID) { + sb.append(" SyncManager"); + } else if (mailbox == null) { + sb.append(" Mailbox " + mailboxId + " (deleted?)"); + } else { + String protocol = Account.getProtocol(this, mailbox.mAccountKey); + sb.append(" Mailbox " + mailboxId + " (" + protocol + ", type " + + mailbox.mType + ")"); + } + long logTime = historical ? time : (now - time); + sb.append(" held for " + (logTime / 1000) + "s"); + pw.println(sb.toString()); + } + } + + @Override + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + pw.println("SyncManager: " + TAG + " up for " + + ((System.currentTimeMillis() - mServiceStartTime))); + if (mWakeLock != null) { + pw.println(" Holding WakeLock"); + writeWakeLockTimes(pw, mWakeLocks, false); + } else { + pw.println(" Not holding WakeLock"); + } + if (!mWakeLocksHistory.isEmpty()) { + pw.println(" Historical times"); + writeWakeLockTimes(pw, mWakeLocksHistory, true); + } + } } |
