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

Commit 70b3b082 authored by Ram Indani's avatar Ram Indani Committed by Automerger Merge Worker
Browse files

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

parents c3ed75cf d8b1c1d0
Loading
Loading
Loading
Loading
+2 −1
Original line number 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::eEnableBackpressure) ||
        (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->flags &= ~mask;
+1 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ struct layer_state_t {
        // This is needed to maintain compatibility for SurfaceView scaling behavior.
        // See SurfaceView scaling behavior for more details.
        eIgnoreDestinationFrame = 0x400,
        eLayerIsRefreshRateIndicator = 0x800, // REFRESH_RATE_INDICATOR
    };

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

} // namespace mock
+12 −0
Original line number Diff line number Diff line
@@ -1312,6 +1312,18 @@ TEST_F(OutputLayerWriteStateToHWCTest, setBlockingRegion) {
                                 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
 */
+15 −4
Original line number Diff line number Diff line
@@ -408,8 +408,8 @@ HdrCapabilities DisplayDevice::getHdrCapabilities() const {
                           capabilities.getDesiredMinLuminance());
}

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

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

    const auto fpsRange = mRefreshRateSelector->getSupportedRefreshRateRange();
    mRefreshRateOverlay = std::make_unique<RefreshRateOverlay>(fpsRange, features);
    mRefreshRateOverlay->setLayerStack(getLayerStack());
    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,
@@ -441,7 +452,7 @@ bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredMod
        const auto newMode =
                mRefreshRateSelector->onKernelTimerChanged(desiredModeId, timerExpired);
        if (newMode) {
            mRefreshRateOverlay->changeRefreshRate(newMode->modePtr->getFps(), newMode->fps);
            updateRefreshRateOverlayRate(newMode->modePtr->getFps(), newMode->fps);
            return true;
        }
    }
Loading