diff options
| author | 2018-08-28 02:48:54 +0000 | |
|---|---|---|
| committer | 2018-08-28 02:48:54 +0000 | |
| commit | 03fa971ac3046735d02a0c6b25c9f89d0c0542e6 (patch) | |
| tree | 9a480b9810ae8ebd0d37cd083f5c2d791908904e | |
| parent | b7cc5351c01618c7062d0df2dfc39aacda844a2f (diff) | |
| parent | 1eb7d38d3bd4503dc99cc799be8cfb52d3756a5a (diff) | |
Merge "Track processing duration of each broadcast receiver"
| -rw-r--r-- | services/core/java/com/android/server/am/BroadcastQueue.java | 22 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/BroadcastRecord.java | 6 |
2 files changed, 17 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index b36b5d35f28e..bc2331639005 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -16,15 +16,7 @@ package com.android.server.am; -import android.content.pm.IPackageManager; -import android.content.pm.PermissionInfo; -import android.os.Trace; -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.Set; +import static com.android.server.am.ActivityManagerDebugConfig.*; import android.app.ActivityManager; import android.app.AppGlobals; @@ -37,7 +29,9 @@ import android.content.IIntentSender; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ActivityInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; @@ -47,13 +41,19 @@ import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; +import android.os.Trace; import android.os.UserHandle; import android.util.EventLog; import android.util.Slog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; -import static com.android.server.am.ActivityManagerDebugConfig.*; +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Set; /** * BROADCASTS @@ -409,10 +409,12 @@ public final class BroadcastQueue { String resultData, Bundle resultExtras, boolean resultAbort, boolean waitForServices) { final int state = r.state; final ActivityInfo receiver = r.curReceiver; + final long finishTime = SystemClock.uptimeMillis(); r.state = BroadcastRecord.IDLE; if (state == BroadcastRecord.IDLE) { Slog.w(TAG, "finishReceiver [" + mQueueName + "] called but state is IDLE"); } + r.duration[r.nextReceiver - 1] = finishTime - r.receiverTime; r.receiver = null; r.intent.setComponent(null); if (r.curApp != null && r.curApp.curReceivers.contains(r)) { diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java index 7e15947a1f28..9b7dc44e5a73 100644 --- a/services/core/java/com/android/server/am/BroadcastRecord.java +++ b/services/core/java/com/android/server/am/BroadcastRecord.java @@ -18,8 +18,8 @@ package com.android.server.am; import android.app.AppOpsManager; import android.app.BroadcastOptions; -import android.content.IIntentReceiver; import android.content.ComponentName; +import android.content.IIntentReceiver; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ResolveInfo; @@ -62,6 +62,7 @@ final class BroadcastRecord extends Binder { final BroadcastOptions options; // BroadcastOptions supplied by caller final List receivers; // contains BroadcastFilter and ResolveInfo final int[] delivery; // delivery state of each receiver + final long[] duration; // duration a receiver took to process broadcast IIntentReceiver resultTo; // who receives final result if non-null long enqueueClockTime; // the clock time the broadcast was enqueued long dispatchTime; // when dispatch started on this set of receivers @@ -203,6 +204,7 @@ final class BroadcastRecord extends Binder { case DELIVERY_TIMEOUT: pw.print("Timeout"); break; default: pw.print("???????"); break; } + pw.print(" "); TimeUtils.formatDuration(duration[i], pw); pw.print(" #"); pw.print(i); pw.print(": "); if (o instanceof BroadcastFilter) { pw.println(o); @@ -239,6 +241,7 @@ final class BroadcastRecord extends Binder { options = _options; receivers = _receivers; delivery = new int[_receivers != null ? _receivers.size() : 0]; + duration = new long[delivery.length]; resultTo = _resultTo; resultCode = _resultCode; resultData = _resultData; @@ -274,6 +277,7 @@ final class BroadcastRecord extends Binder { options = from.options; receivers = from.receivers; delivery = from.delivery; + duration = from.duration; resultTo = from.resultTo; enqueueClockTime = from.enqueueClockTime; dispatchTime = from.dispatchTime; |