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

Commit 11d63f4b authored by Romain Guy's avatar Romain Guy
Browse files

Properly applies the selected saturation boost (vivid mode)

The saturation boost setting is read by SurfaceFlinger as a
persistent system property. Unfortunately, persistent props
are only available after Vold is up and /data is decrypted,
which may happen before or after SF attempts to read the
property.

This CL moves the propery lookup to the end of the boot
animation. This solves two issues:
- The saturation boost will not be applied to the boot animation
- The vivid colors user setting is now reliably applied

Bug: 63823274
Test: Manual

Change-Id: Icb8e30c799c30cf674f0fc0bab0369f4c99367ed
parent 53e5aa93
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -227,8 +227,10 @@ SurfaceFlinger::SurfaceFlinger()
    mLayerTripleBufferingDisabled = atoi(value);
    ALOGI_IF(mLayerTripleBufferingDisabled, "Disabling Triple Buffering");

    property_get("persist.sys.sf.color_saturation", value, "1.0");
    mSaturation = atof(value);
    // We should be reading 'persist.sys.sf.color_saturation' here
    // but since /data may be encrypted, we need to wait until after vold
    // comes online to attempt to read the property. The property is
    // instead read after the boot animation
}

void SurfaceFlinger::onFirstRef()
@@ -373,6 +375,11 @@ void SurfaceFlinger::bootFinished()
    const int LOGTAG_SF_STOP_BOOTANIM = 60110;
    LOG_EVENT_LONG(LOGTAG_SF_STOP_BOOTANIM,
                   ns2ms(systemTime(SYSTEM_TIME_MONOTONIC)));

    sp<LambdaMessage> readProperties = new LambdaMessage([&]() {
        readPersistentProperties();
    });
    postMessageAsync(readProperties);
}

void SurfaceFlinger::deleteTextureAsync(uint32_t texture) {
@@ -630,6 +637,14 @@ void SurfaceFlinger::init() {
    ALOGV("Done initializing");
}

void SurfaceFlinger::readPersistentProperties() {
    char value[PROPERTY_VALUE_MAX];

    property_get("persist.sys.sf.color_saturation", value, "1.0");
    mSaturation = atof(value);
    ALOGV("Saturation is set to %.2f", mSaturation);
}

void SurfaceFlinger::startBootAnim() {
    // Start boot animation service by setting a property mailbox
    // if property setting thread is already running, Start() will be just a NOP
+5 −0
Original line number Diff line number Diff line
@@ -436,6 +436,11 @@ private:

    sp<StartBootAnimThread> mStartBootAnimThread = nullptr;

    /* ------------------------------------------------------------------------
     * Properties
     */
    void readPersistentProperties();

    /* ------------------------------------------------------------------------
     * EGL
     */