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

Commit d8b1c1d0 authored by Ram Indani's avatar Ram Indani Committed by Android (Google) Code Review
Browse files

Merge "[SF] Set RefreshRateOverlay enable status to HWC" into udc-dev

parents b2fd17a7 b2158ee4
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1363,7 +1363,8 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFlags
        (mask & layer_state_t::eLayerSecure) || (mask & layer_state_t::eLayerSkipScreenshot) ||
        (mask & layer_state_t::eLayerSecure) || (mask & layer_state_t::eLayerSkipScreenshot) ||
        (mask & layer_state_t::eEnableBackpressure) ||
        (mask & layer_state_t::eEnableBackpressure) ||
        (mask & layer_state_t::eIgnoreDestinationFrame) ||
        (mask & layer_state_t::eIgnoreDestinationFrame) ||
        (mask & layer_state_t::eLayerIsDisplayDecoration)) {
        (mask & layer_state_t::eLayerIsDisplayDecoration) ||
        (mask & layer_state_t::eLayerIsRefreshRateIndicator)) {
        s->what |= layer_state_t::eFlagsChanged;
        s->what |= layer_state_t::eFlagsChanged;
    }
    }
    s->flags &= ~mask;
    s->flags &= ~mask;
+1 −0
Original line number Original line Diff line number Diff line
@@ -160,6 +160,7 @@ struct layer_state_t {
        // This is needed to maintain compatibility for SurfaceView scaling behavior.
        // This is needed to maintain compatibility for SurfaceView scaling behavior.
        // See SurfaceView scaling behavior for more details.
        // See SurfaceView scaling behavior for more details.
        eIgnoreDestinationFrame = 0x400,
        eIgnoreDestinationFrame = 0x400,
        eLayerIsRefreshRateIndicator = 0x800, // REFRESH_RATE_INDICATOR
    };
    };


    enum {
    enum {
+1 −0
Original line number Original line Diff line number Diff line
@@ -147,6 +147,7 @@ public:
    MOCK_METHOD(bool, getValidateSkipped, (HalDisplayId), (const, override));
    MOCK_METHOD(bool, getValidateSkipped, (HalDisplayId), (const, override));
    MOCK_METHOD(const aidl::android::hardware::graphics::composer3::OverlayProperties&,
    MOCK_METHOD(const aidl::android::hardware::graphics::composer3::OverlayProperties&,
                getOverlaySupport, (), (const, override));
                getOverlaySupport, (), (const, override));
    MOCK_METHOD(status_t, setRefreshRateChangedCallbackDebugEnabled, (PhysicalDisplayId, bool));
};
};


} // namespace mock
} // namespace mock
+12 −0
Original line number Original line Diff line number Diff line
@@ -1312,6 +1312,18 @@ TEST_F(OutputLayerWriteStateToHWCTest, setBlockingRegion) {
                                 false);
                                 false);
}
}


TEST_F(OutputLayerWriteStateToHWCTest, setCompositionTypeRefreshRateIndicator) {
    mLayerFEState.compositionType = Composition::REFRESH_RATE_INDICATOR;

    expectGeometryCommonCalls();
    expectPerFrameCommonCalls();
    expectSetHdrMetadataAndBufferCalls();
    expectSetCompositionTypeCall(Composition::REFRESH_RATE_INDICATOR);

    mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0,
                                 /*zIsOverridden*/ false, /*isPeekingThrough*/ false);
}

/*
/*
 * OutputLayer::uncacheBuffers
 * OutputLayer::uncacheBuffers
 */
 */
+15 −4
Original line number Original line Diff line number Diff line
@@ -408,8 +408,8 @@ HdrCapabilities DisplayDevice::getHdrCapabilities() const {
                           capabilities.getDesiredMinLuminance());
                           capabilities.getDesiredMinLuminance());
}
}


void DisplayDevice::enableRefreshRateOverlay(bool enable, bool showSpinner, bool showRenderRate,
void DisplayDevice::enableRefreshRateOverlay(bool enable, bool setByHwc, bool showSpinner,
                                             bool showInMiddle) {
                                             bool showRenderRate, bool showInMiddle) {
    if (!enable) {
    if (!enable) {
        mRefreshRateOverlay.reset();
        mRefreshRateOverlay.reset();
        return;
        return;
@@ -428,11 +428,22 @@ void DisplayDevice::enableRefreshRateOverlay(bool enable, bool showSpinner, bool
        features |= RefreshRateOverlay::Features::ShowInMiddle;
        features |= RefreshRateOverlay::Features::ShowInMiddle;
    }
    }


    if (setByHwc) {
        features |= RefreshRateOverlay::Features::SetByHwc;
    }

    const auto fpsRange = mRefreshRateSelector->getSupportedRefreshRateRange();
    const auto fpsRange = mRefreshRateSelector->getSupportedRefreshRateRange();
    mRefreshRateOverlay = std::make_unique<RefreshRateOverlay>(fpsRange, features);
    mRefreshRateOverlay = std::make_unique<RefreshRateOverlay>(fpsRange, features);
    mRefreshRateOverlay->setLayerStack(getLayerStack());
    mRefreshRateOverlay->setLayerStack(getLayerStack());
    mRefreshRateOverlay->setViewport(getSize());
    mRefreshRateOverlay->setViewport(getSize());
    mRefreshRateOverlay->changeRefreshRate(getActiveMode().modePtr->getFps(), getActiveMode().fps);
    updateRefreshRateOverlayRate(getActiveMode().modePtr->getFps(), getActiveMode().fps);
}

void DisplayDevice::updateRefreshRateOverlayRate(Fps displayFps, Fps renderFps, bool setByHwc) {
    ATRACE_CALL();
    if (mRefreshRateOverlay && (!mRefreshRateOverlay->isSetByHwc() || setByHwc)) {
        mRefreshRateOverlay->changeRefreshRate(displayFps, renderFps);
    }
}
}


bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredModeId,
bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredModeId,
@@ -441,7 +452,7 @@ bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredMod
        const auto newMode =
        const auto newMode =
                mRefreshRateSelector->onKernelTimerChanged(desiredModeId, timerExpired);
                mRefreshRateSelector->onKernelTimerChanged(desiredModeId, timerExpired);
        if (newMode) {
        if (newMode) {
            mRefreshRateOverlay->changeRefreshRate(newMode->modePtr->getFps(), newMode->fps);
            updateRefreshRateOverlayRate(newMode->modePtr->getFps(), newMode->fps);
            return true;
            return true;
        }
        }
    }
    }
Loading