Loading cmds/statsd/src/atoms.proto +11 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ message Atom { NfcHceTransactionOccurred nfc_hce_transaction_occurred = 139; SeStateChanged se_state_changed = 140; SeOmapiReported se_omapi_reported = 141; BroadcastDispatchLatencyReported broadcast_dispatch_latency_reported = 142; } // Pulled events will start at field 10000. Loading Loading @@ -4466,3 +4467,13 @@ message SeOmapiReported { optional string packageName = 3; } /** * Logs the dispatch latencey of a broadcast during processing of BOOT_COMPLETED. * The dispatch latencey is the dispatchClockTime - enqueueClockTime. * Logged from: * frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java */ message BroadcastDispatchLatencyReported { optional int64 dispatch_latency_millis = 1; } services/core/java/com/android/server/am/BroadcastQueue.java +17 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Trace; import android.os.UserHandle; import android.util.EventLog; import android.util.Slog; import android.util.StatsLog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; Loading Loading @@ -157,6 +158,9 @@ public final class BroadcastQueue { static final int BROADCAST_INTENT_MSG = ActivityManagerService.FIRST_BROADCAST_QUEUE_MSG; static final int BROADCAST_TIMEOUT_MSG = ActivityManagerService.FIRST_BROADCAST_QUEUE_MSG + 1; // log latency metrics for ordered broadcasts during BOOT_COMPLETED processing boolean mLogLatencyMetrics = true; final BroadcastHandler mHandler; private final class BroadcastHandler extends Handler { Loading Loading @@ -941,6 +945,12 @@ public final class BroadcastQueue { // adjustments. mService.updateOomAdjLocked(); } // when we have no more ordered broadcast on this queue, stop logging if (mService.mUserController.mBootCompleted && mLogLatencyMetrics) { mLogLatencyMetrics = false; } return; } r = mOrderedBroadcasts.get(0); Loading Loading @@ -1036,6 +1046,13 @@ public final class BroadcastQueue { if (recIdx == 0) { r.dispatchTime = r.receiverTime; r.dispatchClockTime = System.currentTimeMillis(); if (mLogLatencyMetrics) { StatsLog.write( StatsLog.BROADCAST_DISPATCH_LATENCY_REPORTED, r.dispatchClockTime - r.enqueueClockTime); } if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, createBroadcastTraceTitle(r, BroadcastRecord.DELIVERY_PENDING), Loading services/core/java/com/android/server/am/UserController.java +3 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,8 @@ class UserController implements Handler.Callback { private final LockPatternUtils mLockPatternUtils; volatile boolean mBootCompleted; UserController(ActivityManagerService service) { this(new Injector(service)); } Loading Loading @@ -567,6 +569,7 @@ class UserController implements Handler.Callback { Bundle extras, boolean ordered, boolean sticky, int sendingUser) throws RemoteException { Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); mBootCompleted = true; } }, 0, null, null, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, Loading Loading
cmds/statsd/src/atoms.proto +11 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ message Atom { NfcHceTransactionOccurred nfc_hce_transaction_occurred = 139; SeStateChanged se_state_changed = 140; SeOmapiReported se_omapi_reported = 141; BroadcastDispatchLatencyReported broadcast_dispatch_latency_reported = 142; } // Pulled events will start at field 10000. Loading Loading @@ -4466,3 +4467,13 @@ message SeOmapiReported { optional string packageName = 3; } /** * Logs the dispatch latencey of a broadcast during processing of BOOT_COMPLETED. * The dispatch latencey is the dispatchClockTime - enqueueClockTime. * Logged from: * frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java */ message BroadcastDispatchLatencyReported { optional int64 dispatch_latency_millis = 1; }
services/core/java/com/android/server/am/BroadcastQueue.java +17 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Trace; import android.os.UserHandle; import android.util.EventLog; import android.util.Slog; import android.util.StatsLog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; Loading Loading @@ -157,6 +158,9 @@ public final class BroadcastQueue { static final int BROADCAST_INTENT_MSG = ActivityManagerService.FIRST_BROADCAST_QUEUE_MSG; static final int BROADCAST_TIMEOUT_MSG = ActivityManagerService.FIRST_BROADCAST_QUEUE_MSG + 1; // log latency metrics for ordered broadcasts during BOOT_COMPLETED processing boolean mLogLatencyMetrics = true; final BroadcastHandler mHandler; private final class BroadcastHandler extends Handler { Loading Loading @@ -941,6 +945,12 @@ public final class BroadcastQueue { // adjustments. mService.updateOomAdjLocked(); } // when we have no more ordered broadcast on this queue, stop logging if (mService.mUserController.mBootCompleted && mLogLatencyMetrics) { mLogLatencyMetrics = false; } return; } r = mOrderedBroadcasts.get(0); Loading Loading @@ -1036,6 +1046,13 @@ public final class BroadcastQueue { if (recIdx == 0) { r.dispatchTime = r.receiverTime; r.dispatchClockTime = System.currentTimeMillis(); if (mLogLatencyMetrics) { StatsLog.write( StatsLog.BROADCAST_DISPATCH_LATENCY_REPORTED, r.dispatchClockTime - r.enqueueClockTime); } if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, createBroadcastTraceTitle(r, BroadcastRecord.DELIVERY_PENDING), Loading
services/core/java/com/android/server/am/UserController.java +3 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,8 @@ class UserController implements Handler.Callback { private final LockPatternUtils mLockPatternUtils; volatile boolean mBootCompleted; UserController(ActivityManagerService service) { this(new Injector(service)); } Loading Loading @@ -567,6 +569,7 @@ class UserController implements Handler.Callback { Bundle extras, boolean ordered, boolean sticky, int sendingUser) throws RemoteException { Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId); mBootCompleted = true; } }, 0, null, null, new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED}, Loading