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

Commit b4ff7d97 authored by Dominik Laskowski's avatar Dominik Laskowski
Browse files

SF: Do not deref empty std::optional<PowerMode>

Bug: 250421145
Test: Boot
Change-Id: I0db8970b37da6eb308043157cd2ac7a9f6764294
parent 10c7a55f
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -104,7 +104,9 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs& args)

    mCompositionDisplay->getRenderSurface()->initialize();

    if (args.initialPowerMode.has_value()) setPowerMode(args.initialPowerMode.value());
    if (const auto powerModeOpt = args.initialPowerMode) {
        setPowerMode(*powerModeOpt);
    }

    // initialize the display orientation transform.
    setProjection(ui::ROTATION_0, Rect::INVALID_RECT, Rect::INVALID_RECT);
@@ -178,8 +180,7 @@ void DisplayDevice::setPowerMode(hal::PowerMode mode) {

    mPowerMode = mode;

    getCompositionDisplay()->setCompositionEnabled(mPowerMode.has_value() &&
                                                   *mPowerMode != hal::PowerMode::OFF);
    getCompositionDisplay()->setCompositionEnabled(isPoweredOn());
}

void DisplayDevice::enableLayerCaching(bool enable) {
+5 −5
Original line number Diff line number Diff line
@@ -4643,8 +4643,8 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
    const auto displayId = display->getPhysicalId();
    ALOGD("Setting power mode %d on display %s", mode, to_string(displayId).c_str());

    std::optional<hal::PowerMode> currentMode = display->getPowerMode();
    if (currentMode.has_value() && mode == *currentMode) {
    const auto currentModeOpt = display->getPowerMode();
    if (currentModeOpt == mode) {
        return;
    }

@@ -4662,7 +4662,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
    display->setPowerMode(mode);

    const auto refreshRate = display->refreshRateSelector().getActiveMode().getFps();
    if (*currentMode == hal::PowerMode::OFF) {
    if (!currentModeOpt || *currentModeOpt == hal::PowerMode::OFF) {
        // Turn on the display
        if (isInternalDisplay && (!activeDisplay || !activeDisplay->isPoweredOn())) {
            onActiveDisplayChangedLocked(display);
@@ -4692,7 +4692,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
        if (SurfaceFlinger::setSchedAttr(false) != NO_ERROR) {
            ALOGW("Couldn't set uclamp.min on display off: %s\n", strerror(errno));
        }
        if (isActiveDisplay && *currentMode != hal::PowerMode::DOZE_SUSPEND) {
        if (isActiveDisplay && *currentModeOpt != hal::PowerMode::DOZE_SUSPEND) {
            mScheduler->disableHardwareVsync(true);
            mScheduler->onScreenReleased(mAppConnectionHandle);
        }
@@ -4706,7 +4706,7 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& display, hal:
    } else if (mode == hal::PowerMode::DOZE || mode == hal::PowerMode::ON) {
        // Update display while dozing
        getHwComposer().setPowerMode(displayId, mode);
        if (isActiveDisplay && *currentMode == hal::PowerMode::DOZE_SUSPEND) {
        if (isActiveDisplay && *currentModeOpt == hal::PowerMode::DOZE_SUSPEND) {
            ALOGI("Force repainting for DOZE_SUSPEND -> DOZE or ON.");
            mVisibleRegionsDirty = true;
            scheduleRepaint();