am 2ade6421: Merge change I775e1ec0 into eclair
Merge commit '2ade6421f2d6dd615b559c951deace7143958b90' into eclair-plus-aosp * commit '2ade6421f2d6dd615b559c951deace7143958b90': Debugging for issue #2250075: Desk dock clock app sometimes doesn't
This commit is contained in:
@@ -409,6 +409,13 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
final ArrayList<BroadcastRecord> mOrderedBroadcasts
|
||||
= new ArrayList<BroadcastRecord>();
|
||||
|
||||
/**
|
||||
* Historical data of past broadcasts, for debugging.
|
||||
*/
|
||||
static final int MAX_BROADCAST_HISTORY = 100;
|
||||
final BroadcastRecord[] mBroadcastHistory
|
||||
= new BroadcastRecord[MAX_BROADCAST_HISTORY];
|
||||
|
||||
/**
|
||||
* Set when we current have a BROADCAST_INTENT_MSG in flight.
|
||||
*/
|
||||
@@ -9392,6 +9399,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
}
|
||||
}
|
||||
|
||||
pw.println(" ");
|
||||
pw.println(" Historical broadcasts:");
|
||||
for (int i=0; i<MAX_BROADCAST_HISTORY; i++) {
|
||||
BroadcastRecord r = mBroadcastHistory[i];
|
||||
if (r == null) {
|
||||
break;
|
||||
}
|
||||
pw.println(" Historical Broadcast #" + i + ":");
|
||||
r.dump(pw, " ");
|
||||
}
|
||||
|
||||
pw.println(" ");
|
||||
pw.println(" mBroadcastsScheduled=" + mBroadcastsScheduled);
|
||||
if (mStickyBroadcasts != null) {
|
||||
@@ -11611,7 +11629,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
Intent intent = (Intent)allSticky.get(i);
|
||||
BroadcastRecord r = new BroadcastRecord(intent, null,
|
||||
null, -1, -1, null, receivers, null, 0, null, null,
|
||||
false, true);
|
||||
false, true, true);
|
||||
if (mParallelBroadcasts.size() == 0) {
|
||||
scheduleBroadcastsLocked();
|
||||
}
|
||||
@@ -11836,7 +11854,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
BroadcastRecord r = new BroadcastRecord(intent, callerApp,
|
||||
callerPackage, callingPid, callingUid, requiredPermission,
|
||||
registeredReceivers, resultTo, resultCode, resultData, map,
|
||||
ordered, false);
|
||||
ordered, sticky, false);
|
||||
if (DEBUG_BROADCAST) Log.v(
|
||||
TAG, "Enqueueing parallel broadcast " + r
|
||||
+ ": prev had " + mParallelBroadcasts.size());
|
||||
@@ -11915,7 +11933,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
|| resultTo != null) {
|
||||
BroadcastRecord r = new BroadcastRecord(intent, callerApp,
|
||||
callerPackage, callingPid, callingUid, requiredPermission,
|
||||
receivers, resultTo, resultCode, resultData, map, ordered, false);
|
||||
receivers, resultTo, resultCode, resultData, map, ordered,
|
||||
sticky, false);
|
||||
if (DEBUG_BROADCAST) Log.v(
|
||||
TAG, "Enqueueing ordered broadcast " + r
|
||||
+ ": prev had " + mOrderedBroadcasts.size());
|
||||
@@ -12133,17 +12152,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
}
|
||||
long now = SystemClock.uptimeMillis();
|
||||
BroadcastRecord r = mOrderedBroadcasts.get(0);
|
||||
if ((r.startTime+BROADCAST_TIMEOUT) > now) {
|
||||
if ((r.receiverTime+BROADCAST_TIMEOUT) > now) {
|
||||
if (DEBUG_BROADCAST) Log.v(TAG,
|
||||
"Premature timeout @ " + now + ": resetting BROADCAST_TIMEOUT_MSG for "
|
||||
+ (r.startTime + BROADCAST_TIMEOUT));
|
||||
+ (r.receiverTime + BROADCAST_TIMEOUT));
|
||||
Message msg = mHandler.obtainMessage(BROADCAST_TIMEOUT_MSG);
|
||||
mHandler.sendMessageAtTime(msg, r.startTime+BROADCAST_TIMEOUT);
|
||||
mHandler.sendMessageAtTime(msg, r.receiverTime+BROADCAST_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
Log.w(TAG, "Timeout of broadcast " + r + " - receiver=" + r.receiver);
|
||||
r.startTime = now;
|
||||
r.receiverTime = now;
|
||||
r.anrCount++;
|
||||
|
||||
// Current receiver has passed its expiration date.
|
||||
@@ -12291,7 +12310,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
}
|
||||
performReceive(filter.receiverList.app, filter.receiverList.receiver,
|
||||
new Intent(r.intent), r.resultCode,
|
||||
r.resultData, r.resultExtras, r.ordered, r.sticky);
|
||||
r.resultData, r.resultExtras, r.ordered, r.initialSticky);
|
||||
if (ordered) {
|
||||
r.state = BroadcastRecord.CALL_DONE_RECEIVE;
|
||||
}
|
||||
@@ -12309,6 +12328,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
}
|
||||
}
|
||||
|
||||
private final void addBroadcastToHistoryLocked(BroadcastRecord r) {
|
||||
if (r.callingUid < 0) {
|
||||
// This was from a registerReceiver() call; ignore it.
|
||||
return;
|
||||
}
|
||||
System.arraycopy(mBroadcastHistory, 0, mBroadcastHistory, 1,
|
||||
MAX_BROADCAST_HISTORY-1);
|
||||
r.finishTime = SystemClock.uptimeMillis();
|
||||
mBroadcastHistory[0] = r;
|
||||
}
|
||||
|
||||
private final void processNextBroadcast(boolean fromMsg) {
|
||||
synchronized(this) {
|
||||
BroadcastRecord r;
|
||||
@@ -12326,6 +12356,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
// First, deliver any non-serialized broadcasts right away.
|
||||
while (mParallelBroadcasts.size() > 0) {
|
||||
r = mParallelBroadcasts.remove(0);
|
||||
r.dispatchTime = SystemClock.uptimeMillis();
|
||||
final int N = r.receivers.size();
|
||||
if (DEBUG_BROADCAST_LIGHT) Log.v(TAG, "Processing parallel broadcast "
|
||||
+ r);
|
||||
@@ -12336,6 +12367,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
+ target + ": " + r);
|
||||
deliverToRegisteredReceiver(r, (BroadcastFilter)target, false);
|
||||
}
|
||||
addBroadcastToHistoryLocked(r);
|
||||
if (DEBUG_BROADCAST_LIGHT) Log.v(TAG, "Done with parallel broadcast "
|
||||
+ r);
|
||||
}
|
||||
@@ -12393,7 +12425,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
Log.w(TAG, "Hung broadcast discarded after timeout failure:"
|
||||
+ " now=" + now
|
||||
+ " dispatchTime=" + r.dispatchTime
|
||||
+ " startTime=" + r.startTime
|
||||
+ " startTime=" + r.receiverTime
|
||||
+ " intent=" + r.intent
|
||||
+ " numReceivers=" + numReceivers
|
||||
+ " nextReceiver=" + r.nextReceiver
|
||||
@@ -12437,6 +12469,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
+ r);
|
||||
|
||||
// ... and on to the next...
|
||||
addBroadcastToHistoryLocked(r);
|
||||
mOrderedBroadcasts.remove(0);
|
||||
r = null;
|
||||
looped = true;
|
||||
@@ -12449,17 +12482,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
|
||||
|
||||
// Keep track of when this receiver started, and make sure there
|
||||
// is a timeout message pending to kill it if need be.
|
||||
r.startTime = SystemClock.uptimeMillis();
|
||||
r.receiverTime = SystemClock.uptimeMillis();
|
||||
if (recIdx == 0) {
|
||||
r.dispatchTime = r.startTime;
|
||||
r.dispatchTime = r.receiverTime;
|
||||
|
||||
if (DEBUG_BROADCAST_LIGHT) Log.v(TAG, "Processing ordered broadcast "
|
||||
+ r);
|
||||
if (DEBUG_BROADCAST) Log.v(TAG,
|
||||
"Submitting BROADCAST_TIMEOUT_MSG for "
|
||||
+ (r.startTime + BROADCAST_TIMEOUT));
|
||||
+ (r.receiverTime + BROADCAST_TIMEOUT));
|
||||
Message msg = mHandler.obtainMessage(BROADCAST_TIMEOUT_MSG);
|
||||
mHandler.sendMessageAtTime(msg, r.startTime+BROADCAST_TIMEOUT);
|
||||
mHandler.sendMessageAtTime(msg, r.receiverTime+BROADCAST_TIMEOUT);
|
||||
}
|
||||
|
||||
Object nextReceiver = r.receivers.get(recIdx);
|
||||
|
||||
Reference in New Issue
Block a user