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

Commit b644c820 authored by Fiona Campbell's avatar Fiona Campbell Committed by Automerger Merge Worker
Browse files

Merge "Add DisplayId to BrightnessTracker" into sc-dev am: 47f60213

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13772826

Change-Id: I520864b17dafe32458ee3de29c04a5ae0615000c
parents fcab8c61 47f60213
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3069,6 +3069,7 @@ package android.hardware.display {
    field public final float reduceBrightColorsOffset;
    field public final float reduceBrightColorsOffset;
    field public final int reduceBrightColorsStrength;
    field public final int reduceBrightColorsStrength;
    field public final long timeStamp;
    field public final long timeStamp;
    field @NonNull public final String uniqueDisplayId;
  }
  }
  public final class BrightnessConfiguration implements android.os.Parcelable {
  public final class BrightnessConfiguration implements android.os.Parcelable {
+23 −8
Original line number Original line Diff line number Diff line
@@ -47,6 +47,10 @@ public final class BrightnessChangeEvent implements Parcelable {
     * @hide */
     * @hide */
    public final int userId;
    public final int userId;


    /** The unique id of the screen on which the brightness was changed */
    @NonNull
    public final String uniqueDisplayId;

    /** Lux values of recent sensor data */
    /** Lux values of recent sensor data */
    public final float[] luxValues;
    public final float[] luxValues;


@@ -120,15 +124,16 @@ public final class BrightnessChangeEvent implements Parcelable {


    /** @hide */
    /** @hide */
    private BrightnessChangeEvent(float brightness, long timeStamp, String packageName,
    private BrightnessChangeEvent(float brightness, long timeStamp, String packageName,
            int userId, float[] luxValues, long[] luxTimestamps, float batteryLevel,
            int userId, String uniqueDisplayId, float[] luxValues, long[] luxTimestamps,
            float powerBrightnessFactor, boolean nightMode, int colorTemperature,
            float batteryLevel, float powerBrightnessFactor, boolean nightMode,
            boolean reduceBrightColors, int reduceBrightColorsStrength,
            int colorTemperature, boolean reduceBrightColors, int reduceBrightColorsStrength,
            float reduceBrightColorsOffset, float lastBrightness, boolean isDefaultBrightnessConfig,
            float reduceBrightColorsOffset, float lastBrightness, boolean isDefaultBrightnessConfig,
            boolean isUserSetBrightness, long[] colorValueBuckets, long colorSampleDuration) {
            boolean isUserSetBrightness, long[] colorValueBuckets, long colorSampleDuration) {
        this.brightness = brightness;
        this.brightness = brightness;
        this.timeStamp = timeStamp;
        this.timeStamp = timeStamp;
        this.packageName = packageName;
        this.packageName = packageName;
        this.userId = userId;
        this.userId = userId;
        this.uniqueDisplayId = uniqueDisplayId;
        this.luxValues = luxValues;
        this.luxValues = luxValues;
        this.luxTimestamps = luxTimestamps;
        this.luxTimestamps = luxTimestamps;
        this.batteryLevel = batteryLevel;
        this.batteryLevel = batteryLevel;
@@ -151,6 +156,7 @@ public final class BrightnessChangeEvent implements Parcelable {
        this.timeStamp = other.timeStamp;
        this.timeStamp = other.timeStamp;
        this.packageName = redactPackage ? null : other.packageName;
        this.packageName = redactPackage ? null : other.packageName;
        this.userId = other.userId;
        this.userId = other.userId;
        this.uniqueDisplayId = other.uniqueDisplayId;
        this.luxValues = other.luxValues;
        this.luxValues = other.luxValues;
        this.luxTimestamps = other.luxTimestamps;
        this.luxTimestamps = other.luxTimestamps;
        this.batteryLevel = other.batteryLevel;
        this.batteryLevel = other.batteryLevel;
@@ -172,6 +178,7 @@ public final class BrightnessChangeEvent implements Parcelable {
        timeStamp = source.readLong();
        timeStamp = source.readLong();
        packageName = source.readString();
        packageName = source.readString();
        userId = source.readInt();
        userId = source.readInt();
        uniqueDisplayId = source.readString();
        luxValues = source.createFloatArray();
        luxValues = source.createFloatArray();
        luxTimestamps = source.createLongArray();
        luxTimestamps = source.createLongArray();
        batteryLevel = source.readFloat();
        batteryLevel = source.readFloat();
@@ -209,6 +216,7 @@ public final class BrightnessChangeEvent implements Parcelable {
        dest.writeLong(timeStamp);
        dest.writeLong(timeStamp);
        dest.writeString(packageName);
        dest.writeString(packageName);
        dest.writeInt(userId);
        dest.writeInt(userId);
        dest.writeString(uniqueDisplayId);
        dest.writeFloatArray(luxValues);
        dest.writeFloatArray(luxValues);
        dest.writeLongArray(luxTimestamps);
        dest.writeLongArray(luxTimestamps);
        dest.writeFloat(batteryLevel);
        dest.writeFloat(batteryLevel);
@@ -231,6 +239,7 @@ public final class BrightnessChangeEvent implements Parcelable {
        private long mTimeStamp;
        private long mTimeStamp;
        private String mPackageName;
        private String mPackageName;
        private int mUserId;
        private int mUserId;
        private String mUniqueDisplayId;
        private float[] mLuxValues;
        private float[] mLuxValues;
        private long[] mLuxTimestamps;
        private long[] mLuxTimestamps;
        private float mBatteryLevel;
        private float mBatteryLevel;
@@ -270,6 +279,12 @@ public final class BrightnessChangeEvent implements Parcelable {
            return this;
            return this;
        }
        }


        /** {@see BrightnessChangeEvent#uniqueScreenId} */
        public Builder setUniqueDisplayId(String uniqueId) {
            mUniqueDisplayId = uniqueId;
            return this;
        }

        /** {@see BrightnessChangeEvent#luxValues} */
        /** {@see BrightnessChangeEvent#luxValues} */
        public Builder setLuxValues(float[] luxValues) {
        public Builder setLuxValues(float[] luxValues) {
            mLuxValues = luxValues;
            mLuxValues = luxValues;
@@ -354,11 +369,11 @@ public final class BrightnessChangeEvent implements Parcelable {
        /** Builds a BrightnessChangeEvent */
        /** Builds a BrightnessChangeEvent */
        public BrightnessChangeEvent build() {
        public BrightnessChangeEvent build() {
            return new BrightnessChangeEvent(mBrightness, mTimeStamp,
            return new BrightnessChangeEvent(mBrightness, mTimeStamp,
                    mPackageName, mUserId, mLuxValues, mLuxTimestamps, mBatteryLevel,
                    mPackageName, mUserId, mUniqueDisplayId, mLuxValues, mLuxTimestamps,
                    mPowerBrightnessFactor, mNightMode, mColorTemperature, mReduceBrightColors,
                    mBatteryLevel, mPowerBrightnessFactor, mNightMode, mColorTemperature,
                    mReduceBrightColorsStrength, mReduceBrightColorsOffset, mLastBrightness,
                    mReduceBrightColors, mReduceBrightColorsStrength, mReduceBrightColorsOffset,
                    mIsDefaultBrightnessConfig, mIsUserSetBrightness, mColorValueBuckets,
                    mLastBrightness, mIsDefaultBrightnessConfig, mIsUserSetBrightness,
                    mColorSampleDuration);
                    mColorValueBuckets, mColorSampleDuration);
        }
        }
    }
    }
}
}
+21 −10
Original line number Original line Diff line number Diff line
@@ -110,6 +110,7 @@ public class BrightnessTracker {
    private static final String ATTR_TIMESTAMP = "timestamp";
    private static final String ATTR_TIMESTAMP = "timestamp";
    private static final String ATTR_PACKAGE_NAME = "packageName";
    private static final String ATTR_PACKAGE_NAME = "packageName";
    private static final String ATTR_USER = "user";
    private static final String ATTR_USER = "user";
    private static final String ATTR_UNIQUE_DISPLAY_ID = "uniqueDisplayId";
    private static final String ATTR_LUX = "lux";
    private static final String ATTR_LUX = "lux";
    private static final String ATTR_LUX_TIMESTAMPS = "luxTimestamps";
    private static final String ATTR_LUX_TIMESTAMPS = "luxTimestamps";
    private static final String ATTR_BATTERY_LEVEL = "batteryLevel";
    private static final String ATTR_BATTERY_LEVEL = "batteryLevel";
@@ -217,6 +218,9 @@ public class BrightnessTracker {
    }
    }


    private void backgroundStart(float initialBrightness) {
    private void backgroundStart(float initialBrightness) {
        if (DEBUG) {
            Slog.d(TAG, "Background start");
        }
        readEvents();
        readEvents();
        readAmbientBrightnessStats();
        readAmbientBrightnessStats();


@@ -311,7 +315,7 @@ public class BrightnessTracker {
     */
     */
    public void notifyBrightnessChanged(float brightness, boolean userInitiated,
    public void notifyBrightnessChanged(float brightness, boolean userInitiated,
            float powerBrightnessFactor, boolean isUserSetBrightness,
            float powerBrightnessFactor, boolean isUserSetBrightness,
            boolean isDefaultBrightnessConfig) {
            boolean isDefaultBrightnessConfig, String uniqueDisplayId) {
        if (DEBUG) {
        if (DEBUG) {
            Slog.d(TAG, String.format("notifyBrightnessChanged(brightness=%f, userInitiated=%b)",
            Slog.d(TAG, String.format("notifyBrightnessChanged(brightness=%f, userInitiated=%b)",
                        brightness, userInitiated));
                        brightness, userInitiated));
@@ -319,13 +323,13 @@ public class BrightnessTracker {
        Message m = mBgHandler.obtainMessage(MSG_BRIGHTNESS_CHANGED,
        Message m = mBgHandler.obtainMessage(MSG_BRIGHTNESS_CHANGED,
                userInitiated ? 1 : 0, 0 /*unused*/, new BrightnessChangeValues(brightness,
                userInitiated ? 1 : 0, 0 /*unused*/, new BrightnessChangeValues(brightness,
                        powerBrightnessFactor, isUserSetBrightness, isDefaultBrightnessConfig,
                        powerBrightnessFactor, isUserSetBrightness, isDefaultBrightnessConfig,
                        mInjector.currentTimeMillis()));
                        mInjector.currentTimeMillis(), uniqueDisplayId));
        m.sendToTarget();
        m.sendToTarget();
    }
    }


    private void handleBrightnessChanged(float brightness, boolean userInitiated,
    private void handleBrightnessChanged(float brightness, boolean userInitiated,
            float powerBrightnessFactor, boolean isUserSetBrightness,
            float powerBrightnessFactor, boolean isUserSetBrightness,
            boolean isDefaultBrightnessConfig, long timestamp) {
            boolean isDefaultBrightnessConfig, long timestamp, String uniqueDisplayId) {
        BrightnessChangeEvent.Builder builder;
        BrightnessChangeEvent.Builder builder;


        synchronized (mDataCollectionLock) {
        synchronized (mDataCollectionLock) {
@@ -350,6 +354,7 @@ public class BrightnessTracker {
            builder.setPowerBrightnessFactor(powerBrightnessFactor);
            builder.setPowerBrightnessFactor(powerBrightnessFactor);
            builder.setUserBrightnessPoint(isUserSetBrightness);
            builder.setUserBrightnessPoint(isUserSetBrightness);
            builder.setIsDefaultBrightnessConfig(isDefaultBrightnessConfig);
            builder.setIsDefaultBrightnessConfig(isDefaultBrightnessConfig);
            builder.setUniqueDisplayId(uniqueDisplayId);


            final int readingCount = mLastSensorReadings.size();
            final int readingCount = mLastSensorReadings.size();
            if (readingCount == 0) {
            if (readingCount == 0) {
@@ -562,6 +567,7 @@ public class BrightnessTracker {
                out.attributeLong(null, ATTR_TIMESTAMP, toWrite[i].timeStamp);
                out.attributeLong(null, ATTR_TIMESTAMP, toWrite[i].timeStamp);
                out.attribute(null, ATTR_PACKAGE_NAME, toWrite[i].packageName);
                out.attribute(null, ATTR_PACKAGE_NAME, toWrite[i].packageName);
                out.attributeInt(null, ATTR_USER, userSerialNo);
                out.attributeInt(null, ATTR_USER, userSerialNo);
                out.attribute(null, ATTR_UNIQUE_DISPLAY_ID, toWrite[i].uniqueDisplayId);
                out.attributeFloat(null, ATTR_BATTERY_LEVEL, toWrite[i].batteryLevel);
                out.attributeFloat(null, ATTR_BATTERY_LEVEL, toWrite[i].batteryLevel);
                out.attributeBoolean(null, ATTR_NIGHT_MODE, toWrite[i].nightMode);
                out.attributeBoolean(null, ATTR_NIGHT_MODE, toWrite[i].nightMode);
                out.attributeInt(null, ATTR_COLOR_TEMPERATURE,
                out.attributeInt(null, ATTR_COLOR_TEMPERATURE,
@@ -646,6 +652,8 @@ public class BrightnessTracker {
                    builder.setPackageName(parser.getAttributeValue(null, ATTR_PACKAGE_NAME));
                    builder.setPackageName(parser.getAttributeValue(null, ATTR_PACKAGE_NAME));
                    builder.setUserId(mInjector.getUserId(mUserManager,
                    builder.setUserId(mInjector.getUserId(mUserManager,
                            parser.getAttributeInt(null, ATTR_USER)));
                            parser.getAttributeInt(null, ATTR_USER)));
                    builder.setUniqueDisplayId(
                            parser.getAttributeValue(null, ATTR_UNIQUE_DISPLAY_ID));
                    builder.setBatteryLevel(parser.getAttributeFloat(null, ATTR_BATTERY_LEVEL));
                    builder.setBatteryLevel(parser.getAttributeFloat(null, ATTR_BATTERY_LEVEL));
                    builder.setNightMode(parser.getAttributeBoolean(null, ATTR_NIGHT_MODE));
                    builder.setNightMode(parser.getAttributeBoolean(null, ATTR_NIGHT_MODE));
                    builder.setColorTemperature(
                    builder.setColorTemperature(
@@ -980,7 +988,8 @@ public class BrightnessTracker {
                    boolean userInitiatedChange = (msg.arg1 == 1);
                    boolean userInitiatedChange = (msg.arg1 == 1);
                    handleBrightnessChanged(values.brightness, userInitiatedChange,
                    handleBrightnessChanged(values.brightness, userInitiatedChange,
                            values.powerBrightnessFactor, values.isUserSetBrightness,
                            values.powerBrightnessFactor, values.isUserSetBrightness,
                            values.isDefaultBrightnessConfig, values.timestamp);
                            values.isDefaultBrightnessConfig, values.timestamp,
                            values.uniqueDisplayId);
                    break;
                    break;
                case MSG_START_SENSOR_LISTENER:
                case MSG_START_SENSOR_LISTENER:
                    startSensorListener();
                    startSensorListener();
@@ -1007,20 +1016,22 @@ public class BrightnessTracker {
    }
    }


    private static class BrightnessChangeValues {
    private static class BrightnessChangeValues {
        final float brightness;
        public final float brightness;
        final float powerBrightnessFactor;
        public final float powerBrightnessFactor;
        final boolean isUserSetBrightness;
        public final boolean isUserSetBrightness;
        final boolean isDefaultBrightnessConfig;
        public final boolean isDefaultBrightnessConfig;
        final long timestamp;
        public final long timestamp;
        public final String uniqueDisplayId;


        BrightnessChangeValues(float brightness, float powerBrightnessFactor,
        BrightnessChangeValues(float brightness, float powerBrightnessFactor,
                boolean isUserSetBrightness, boolean isDefaultBrightnessConfig,
                boolean isUserSetBrightness, boolean isDefaultBrightnessConfig,
                long timestamp) {
                long timestamp, String uniqueDisplayId) {
            this.brightness = brightness;
            this.brightness = brightness;
            this.powerBrightnessFactor = powerBrightnessFactor;
            this.powerBrightnessFactor = powerBrightnessFactor;
            this.isUserSetBrightness = isUserSetBrightness;
            this.isUserSetBrightness = isUserSetBrightness;
            this.isDefaultBrightnessConfig = isDefaultBrightnessConfig;
            this.isDefaultBrightnessConfig = isDefaultBrightnessConfig;
            this.timestamp = timestamp;
            this.timestamp = timestamp;
            this.uniqueDisplayId = uniqueDisplayId;
        }
        }
    }
    }


+11 −3
Original line number Original line Diff line number Diff line
@@ -376,6 +376,8 @@ public final class DisplayManagerService extends SystemService {
    private final ColorSpace mWideColorSpace;
    private final ColorSpace mWideColorSpace;


    private SensorManager mSensorManager;
    private SensorManager mSensorManager;
    private BrightnessTracker mBrightnessTracker;



    // Whether minimal post processing is allowed by the user.
    // Whether minimal post processing is allowed by the user.
    @GuardedBy("mSyncRoot")
    @GuardedBy("mSyncRoot")
@@ -1162,7 +1164,7 @@ public final class DisplayManagerService extends SystemService {


        DisplayPowerController dpc = mDisplayPowerControllers.get(displayId);
        DisplayPowerController dpc = mDisplayPowerControllers.get(displayId);
        if (dpc != null) {
        if (dpc != null) {
            dpc.onDisplayChanged();
            dpc.onDisplayChangedLocked();
        }
        }
    }
    }


@@ -1851,7 +1853,10 @@ public final class DisplayManagerService extends SystemService {
            for (int i = 0; i < displayPowerControllerCount; i++) {
            for (int i = 0; i < displayPowerControllerCount; i++) {
                mDisplayPowerControllers.valueAt(i).dump(pw);
                mDisplayPowerControllers.valueAt(i).dump(pw);
            }
            }

            if (mBrightnessTracker != null) {
                pw.println();
                mBrightnessTracker.dump(pw);
            }
            pw.println();
            pw.println();
            mPersistentDataStore.dump(pw);
            mPersistentDataStore.dump(pw);
        }
        }
@@ -1937,9 +1942,12 @@ public final class DisplayManagerService extends SystemService {
            // initPowerManagement has not yet been called.
            // initPowerManagement has not yet been called.
            return;
            return;
        }
        }
        if (mBrightnessTracker == null) {
            mBrightnessTracker = new BrightnessTracker(mContext, null);
        }
        final DisplayPowerController displayPowerController = new DisplayPowerController(
        final DisplayPowerController displayPowerController = new DisplayPowerController(
                mContext, mDisplayPowerCallbacks, mPowerHandler, mSensorManager,
                mContext, mDisplayPowerCallbacks, mPowerHandler, mSensorManager,
                mDisplayBlanker, display);
                mDisplayBlanker, display, mBrightnessTracker);
        mDisplayPowerControllers.append(display.getDisplayIdLocked(), displayPowerController);
        mDisplayPowerControllers.append(display.getDisplayIdLocked(), displayPowerController);
    }
    }


+10 −14
Original line number Original line Diff line number Diff line
@@ -174,6 +174,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    // The ID of the LogicalDisplay tied to this DisplayPowerController.
    // The ID of the LogicalDisplay tied to this DisplayPowerController.
    private final int mDisplayId;
    private final int mDisplayId;


    // The unique ID of the primary display device currently tied to this logical display
    private String mUniqueDisplayId;

    // Tracker for brightness changes.
    // Tracker for brightness changes.
    @Nullable
    @Nullable
    private final BrightnessTracker mBrightnessTracker;
    private final BrightnessTracker mBrightnessTracker;
@@ -416,16 +419,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
     */
     */
    public DisplayPowerController(Context context,
    public DisplayPowerController(Context context,
            DisplayPowerCallbacks callbacks, Handler handler,
            DisplayPowerCallbacks callbacks, Handler handler,
            SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay) {
            SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay,
            BrightnessTracker brightnessTracker) {
        mLogicalDisplay = logicalDisplay;
        mLogicalDisplay = logicalDisplay;
        mDisplayId = mLogicalDisplay.getDisplayIdLocked();
        mDisplayId = mLogicalDisplay.getDisplayIdLocked();
        mHandler = new DisplayControllerHandler(handler.getLooper());
        mHandler = new DisplayControllerHandler(handler.getLooper());


        if (mDisplayId == Display.DEFAULT_DISPLAY) {
        if (mDisplayId == Display.DEFAULT_DISPLAY) {
            mBrightnessTracker = new BrightnessTracker(context, null);
            mBatteryStats = BatteryStatsService.getService();
            mBatteryStats = BatteryStatsService.getService();
        } else {
        } else {
            mBrightnessTracker = null;
            mBatteryStats = null;
            mBatteryStats = null;
        }
        }


@@ -435,6 +437,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class);
        mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class);
        mBlanker = blanker;
        mBlanker = blanker;
        mContext = context;
        mContext = context;
        mBrightnessTracker = brightnessTracker;




        PowerManager pm = context.getSystemService(PowerManager.class);
        PowerManager pm = context.getSystemService(PowerManager.class);
@@ -756,8 +759,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
     * when displays get swapped on foldable devices.  For example, different brightness properties
     * when displays get swapped on foldable devices.  For example, different brightness properties
     * of each display need to be properly reflected in AutomaticBrightnessController.
     * of each display need to be properly reflected in AutomaticBrightnessController.
     */
     */
    public void onDisplayChanged() {
    public void onDisplayChangedLocked() {
        // TODO: b/175821789 - Support high brightness on multiple (folding) displays
        // TODO: b/175821789 - Support high brightness on multiple (folding) displays

        mUniqueDisplayId = mLogicalDisplay.getPrimaryDisplayDeviceLocked().getUniqueId();
    }
    }


    /**
    /**
@@ -780,10 +785,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                mAutomaticBrightnessController.stop();
                mAutomaticBrightnessController.stop();
            }
            }


            if (mBrightnessTracker != null) {
                mBrightnessTracker.stop();
            }

            mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
            mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
        }
        }
    }
    }
@@ -1899,7 +1900,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    : 1.0f;
                    : 1.0f;
            mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated,
            mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated,
                    powerFactor, hadUserDataPoint,
                    powerFactor, hadUserDataPoint,
                    mAutomaticBrightnessController.isDefaultConfig());
                    mAutomaticBrightnessController.isDefaultConfig(), mUniqueDisplayId);
        }
        }
    }
    }


@@ -2067,11 +2068,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            mAutomaticBrightnessController.dump(pw);
            mAutomaticBrightnessController.dump(pw);
        }
        }


        if (mBrightnessTracker != null) {
            pw.println();
            mBrightnessTracker.dump(pw);
        }

        pw.println();
        pw.println();
        if (mDisplayWhiteBalanceController != null) {
        if (mDisplayWhiteBalanceController != null) {
            mDisplayWhiteBalanceController.dump(pw);
            mDisplayWhiteBalanceController.dump(pw);
Loading