Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 810d9407 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Log broadcast dispatch latency during BOOT_COMPLETED"

parents 59ec2ab4 7ff7fdb7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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.
@@ -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;
}
+17 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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 {
@@ -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);
@@ -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),
+3 −0
Original line number Diff line number Diff line
@@ -240,6 +240,8 @@ class UserController implements Handler.Callback {

    private final LockPatternUtils mLockPatternUtils;

    volatile boolean mBootCompleted;

    UserController(ActivityManagerService service) {
        this(new Injector(service));
    }
@@ -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},