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

Commit 0782b881 authored by Ana Krulec's avatar Ana Krulec Committed by Steven Thomas
Browse files

1) SF-DM Generalization of Refresh Rates: Adding a call to set Refresh Rate Range

Adding connection between Display manager and Surface flinger when the
refresh rate change. Additional work in SF in follow up CLs.

Test: Change settings and observe logs for now.
Bug: 142507213
Change-Id: Id9f9672d9f46b4d3590235e46ee4b3d0b5a37e6b
parent 46e9976b
Loading
Loading
Loading
Loading
+71 −0
Original line number Original line Diff line number Diff line
@@ -878,6 +878,45 @@ public:
        return reply.readInt32();
        return reply.readInt32();
    }
    }


    virtual status_t setDesiredDisplayConfigSpecs(const sp<IBinder>& displayToken,
                                                  int32_t defaultModeId, float minRefreshRate,
                                                  float maxRefreshRate) {
        Parcel data, reply;
        status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs: failed to writeInterfaceToken: %d", result);
            return result;
        }
        result = data.writeStrongBinder(displayToken);
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs: failed to write display token: %d", result);
            return result;
        }
        result = data.writeInt32(defaultModeId);
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs failed to write defaultModeId: %d", result);
            return result;
        }
        result = data.writeFloat(minRefreshRate);
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs failed to write minRefreshRate: %d", result);
            return result;
        }
        result = data.writeFloat(maxRefreshRate);
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs failed to write maxRefreshRate: %d", result);
            return result;
        }

        result = remote()->transact(BnSurfaceComposer::SET_DESIRED_DISPLAY_CONFIG_SPECS, data,
                                    &reply);
        if (result != NO_ERROR) {
            ALOGE("setDesiredDisplayConfigSpecs failed to transact: %d", result);
            return result;
        }
        return reply.readInt32();
    }

    virtual status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
    virtual status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
                                              std::vector<int32_t>* outAllowedConfigs) {
                                              std::vector<int32_t>* outAllowedConfigs) {
        if (!outAllowedConfigs) return BAD_VALUE;
        if (!outAllowedConfigs) return BAD_VALUE;
@@ -1554,6 +1593,38 @@ status_t BnSurfaceComposer::onTransact(
            reply->writeInt32(result);
            reply->writeInt32(result);
            return result;
            return result;
        }
        }
        case SET_DESIRED_DISPLAY_CONFIG_SPECS: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IBinder> displayToken = data.readStrongBinder();
            int32_t defaultModeId;
            status_t result = data.readInt32(&defaultModeId);
            if (result != NO_ERROR) {
                ALOGE("setDesiredDisplayConfigSpecs: failed to read defaultModeId: %d", result);
                return result;
            }
            float minRefreshRate;
            result = data.readFloat(&minRefreshRate);
            if (result != NO_ERROR) {
                ALOGE("setDesiredDisplayConfigSpecs: failed to read minRefreshRate: %d", result);
                return result;
            }
            float maxRefreshRate;
            result = data.readFloat(&maxRefreshRate);
            if (result != NO_ERROR) {
                ALOGE("setDesiredDisplayConfigSpecs: failed to read maxRefreshRate: %d", result);
                return result;
            }
            result = setDesiredDisplayConfigSpecs(displayToken, defaultModeId, minRefreshRate,
                                                  maxRefreshRate);
            if (result != NO_ERROR) {
                ALOGE("setDesiredDisplayConfigSpecs: failed to call setDesiredDisplayConfigSpecs: "
                      "%d",
                      result);
                return result;
            }
            reply->writeInt32(result);
            return result;
        }
        case GET_DISPLAY_BRIGHTNESS_SUPPORT: {
        case GET_DISPLAY_BRIGHTNESS_SUPPORT: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IBinder> displayToken;
            sp<IBinder> displayToken;
+10 −0
Original line number Original line Diff line number Diff line
@@ -1616,6 +1616,16 @@ status_t SurfaceComposerClient::getAllowedDisplayConfigs(const sp<IBinder>& disp
                                                                           outAllowedConfigs);
                                                                           outAllowedConfigs);
}
}


status_t SurfaceComposerClient::setDesiredDisplayConfigSpecs(const sp<IBinder>& displayToken,
                                                             int32_t defaultModeId,
                                                             float minRefreshRate,
                                                             float maxRefreshRate) {
    return ComposerService::getComposerService()->setDesiredDisplayConfigSpecs(displayToken,
                                                                               defaultModeId,
                                                                               minRefreshRate,
                                                                               maxRefreshRate);
}

status_t SurfaceComposerClient::getDisplayColorModes(const sp<IBinder>& display,
status_t SurfaceComposerClient::getDisplayColorModes(const sp<IBinder>& display,
        Vector<ColorMode>* outColorModes) {
        Vector<ColorMode>* outColorModes) {
    return ComposerService::getComposerService()->getDisplayColorModes(display, outColorModes);
    return ComposerService::getComposerService()->getDisplayColorModes(display, outColorModes);
+10 −0
Original line number Original line Diff line number Diff line
@@ -398,6 +398,15 @@ public:
     */
     */
    virtual status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
    virtual status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
                                              std::vector<int32_t>* outAllowedConfigs) = 0;
                                              std::vector<int32_t>* outAllowedConfigs) = 0;
    /*
     * Sets the refresh rate boundaries for display configuration.
     * For all other parameters, default configuration is used. The index for the default is
     * corresponding to the configs returned from getDisplayConfigs().
     */
    virtual status_t setDesiredDisplayConfigSpecs(const sp<IBinder>& displayToken,
                                                  int32_t defaultModeId, float minRefreshRate,
                                                  float maxRefreshRate) = 0;

    /*
    /*
     * Gets whether brightness operations are supported on a display.
     * Gets whether brightness operations are supported on a display.
     *
     *
@@ -488,6 +497,7 @@ public:
        REMOVE_REGION_SAMPLING_LISTENER,
        REMOVE_REGION_SAMPLING_LISTENER,
        SET_ALLOWED_DISPLAY_CONFIGS,
        SET_ALLOWED_DISPLAY_CONFIGS,
        GET_ALLOWED_DISPLAY_CONFIGS,
        GET_ALLOWED_DISPLAY_CONFIGS,
        SET_DESIRED_DISPLAY_CONFIG_SPECS,
        GET_DISPLAY_BRIGHTNESS_SUPPORT,
        GET_DISPLAY_BRIGHTNESS_SUPPORT,
        SET_DISPLAY_BRIGHTNESS,
        SET_DISPLAY_BRIGHTNESS,
        CAPTURE_SCREEN_BY_ID,
        CAPTURE_SCREEN_BY_ID,
+7 −0
Original line number Original line Diff line number Diff line
@@ -129,6 +129,13 @@ public:
    static status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
    static status_t getAllowedDisplayConfigs(const sp<IBinder>& displayToken,
                                             std::vector<int32_t>* outAllowedConfigs);
                                             std::vector<int32_t>* outAllowedConfigs);


    // Sets the refresh rate boundaries for display configuration.
    // For all other parameters, default configuration is used. The index for the default is
    // corresponting to the configs returned from getDisplayConfigs().
    static status_t setDesiredDisplayConfigSpecs(const sp<IBinder>& displayToken,
                                                 int32_t defaultModeId, float minRefreshRate,
                                                 float maxRefreshRate);

    // Gets the list of supported color modes for the given display
    // Gets the list of supported color modes for the given display
    static status_t getDisplayColorModes(const sp<IBinder>& display,
    static status_t getDisplayColorModes(const sp<IBinder>& display,
            Vector<ui::ColorMode>* outColorModes);
            Vector<ui::ColorMode>* outColorModes);
+5 −0
Original line number Original line Diff line number Diff line
@@ -831,6 +831,11 @@ public:
                                      std::vector<int32_t>* /*outAllowedConfigs*/) override {
                                      std::vector<int32_t>* /*outAllowedConfigs*/) override {
        return NO_ERROR;
        return NO_ERROR;
    }
    }
    status_t setDesiredDisplayConfigSpecs(const sp<IBinder>& /*displayToken*/,
                                          int32_t /*defaultModeId*/, float /*minRefreshRate*/,
                                          float /*maxRefreshRate*/) override {
        return NO_ERROR;
    }
    status_t notifyPowerHint(int32_t /*hintId*/) override { return NO_ERROR; }
    status_t notifyPowerHint(int32_t /*hintId*/) override { return NO_ERROR; }


protected:
protected:
Loading