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

Commit 3edf5272 authored by Jeff Brown's avatar Jeff Brown
Browse files

Add trace tag for power management.

Instrumented the basic power manager state transitions,
calling into the Power HAL, setting the display power mode,
and setting the backlight.

Bug: 17004602
Change-Id: I4e362162ddfd7292a7eea8b5d029ce3f6593c4a9
parent 0a992a82
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -773,6 +773,7 @@ public final class PowerManager {
        private boolean mHeld;
        private WorkSource mWorkSource;
        private String mHistoryTag;
        private final String mTraceName;

        private final Runnable mReleaser = new Runnable() {
            public void run() {
@@ -785,6 +786,7 @@ public final class PowerManager {
            mTag = tag;
            mPackageName = packageName;
            mToken = new Binder();
            mTraceName = "WakeLock (" + mTag + ")";
        }

        @Override
@@ -792,6 +794,7 @@ public final class PowerManager {
            synchronized (mToken) {
                if (mHeld) {
                    Log.wtf(TAG, "WakeLock finalized while still held: " + mTag);
                    Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, mTraceName, 0);
                    try {
                        mService.releaseWakeLock(mToken, 0);
                    } catch (RemoteException e) {
@@ -858,6 +861,7 @@ public final class PowerManager {
                // should immediately acquire the wake lock once again despite never having
                // been explicitly released by the keyguard.
                mHandler.removeCallbacks(mReleaser);
                Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, mTraceName, 0);
                try {
                    mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource,
                            mHistoryTag);
@@ -897,6 +901,7 @@ public final class PowerManager {
                if (!mRefCounted || --mCount == 0) {
                    mHandler.removeCallbacks(mReleaser);
                    if (mHeld) {
                        Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, mTraceName, 0);
                        try {
                            mService.releaseWakeLock(mToken, flags);
                        } catch (RemoteException e) {
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ public final class Trace {
    private static final String TAG = "Trace";

    // These tags must be kept in sync with system/core/include/cutils/trace.h.
    // They should also be added to frameworks/native/cmds/atrace/atrace.cpp.
    /** @hide */
    public static final long TRACE_TAG_NEVER = 0;
    /** @hide */
@@ -72,6 +73,8 @@ public final class Trace {
    public static final long TRACE_TAG_RS = 1L << 15;
    /** @hide */
    public static final long TRACE_TAG_BIONIC = 1L << 16;
    /** @hide */
    public static final long TRACE_TAG_POWER = 1L << 17;

    private static final long TRACE_TAG_NOT_READY = 1L << 63;
    private static final int MAX_SECTION_NAME_LEN = 127;
+7 −7
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.text.format.DateUtils;
import android.os.Trace;
import android.util.MathUtils;
import android.util.Slog;
import android.util.Spline;
@@ -74,6 +74,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    private static boolean DEBUG = false;
    private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;

    private static final String SCREEN_ON_BLOCKED_TRACE_NAME = "Screen on blocked";

    // If true, uses the electron beam on animation.
    // We might want to turn this off if we cannot get a guarantee that the screen
    // actually turns on and starts showing new content after the call to set the
@@ -714,11 +716,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

    private void blockScreenOn() {
        if (!mScreenOnWasBlocked) {
            Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, SCREEN_ON_BLOCKED_TRACE_NAME, 0);
            mScreenOnWasBlocked = true;
            mScreenOnBlockStartRealTime = SystemClock.elapsedRealtime();
            if (DEBUG) {
                Slog.d(TAG, "Blocked screen on.");
            }
            Slog.i(TAG, "Blocking screen on until initial contents have been drawn.");
        }
    }

@@ -726,9 +727,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        if (mScreenOnWasBlocked) {
            mScreenOnWasBlocked = false;
            long delay = SystemClock.elapsedRealtime() - mScreenOnBlockStartRealTime;
            if (delay > 1000 || DEBUG) {
                Slog.d(TAG, "Unblocked screen on after " + delay + " ms");
            }
            Slog.i(TAG, "Unblocked screen on after " + delay + " ms");
            Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, SCREEN_ON_BLOCKED_TRACE_NAME, 0);
        }
    }

+23 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.os.Trace;
import android.util.FloatProperty;
import android.util.IntProperty;
import android.util.Slog;
@@ -405,19 +406,38 @@ final class DisplayPowerState {
                    }
                    boolean suspending = Display.isSuspendedState(state);
                    if (stateChanged && !suspending) {
                        mBlanker.requestDisplayState(state);
                        requestDisplayState(state);
                    }
                    if (backlightChanged) {
                        mBacklight.setBrightness(backlight);
                        setBrightness(backlight);
                    }
                    if (stateChanged && suspending) {
                        mBlanker.requestDisplayState(state);
                        requestDisplayState(state);
                    }
                }

                // Let the outer class know that all changes have been applied.
                postScreenUpdateThreadSafe();
            }

            private void requestDisplayState(int state) {
                Trace.traceBegin(Trace.TRACE_TAG_POWER, "requestDisplayState("
                        + Display.stateToString(state) + ")");
                try {
                    mBlanker.requestDisplayState(state);
                } finally {
                    Trace.traceEnd(Trace.TRACE_TAG_POWER);
                }
            }

            private void setBrightness(int backlight) {
                Trace.traceBegin(Trace.TRACE_TAG_POWER, "setBrightness(" + backlight + ")");
                try {
                    mBacklight.setBrightness(backlight);
                } finally {
                    Trace.traceEnd(Trace.TRACE_TAG_POWER);
                }
            }
        };
    }
}
+9 −3
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.SystemProperties;
import android.util.Pair;
import android.os.Trace;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
@@ -224,8 +224,14 @@ final class LocalDisplayAdapter extends DisplayAdapter {
        @Override
        public void requestDisplayStateLocked(int state) {
            if (mState != state) {
                SurfaceControl.setDisplayPowerMode(getDisplayTokenLocked(),
                        getPowerModeForState(state));
                final int mode = getPowerModeForState(state);
                Trace.traceBegin(Trace.TRACE_TAG_POWER, "requestDisplayState("
                        + Display.stateToString(state) + ", id=" + mBuiltInDisplayId + ")");
                try {
                    SurfaceControl.setDisplayPowerMode(getDisplayTokenLocked(), mode);
                } finally {
                    Trace.traceEnd(Trace.TRACE_TAG_POWER);
                }
                mState = state;
                updateDeviceInfoLocked();
            }
Loading