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

Commit 2a6b3428 authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge "[sf-newfe] set visible regions flag when layer opacity changes" into main

parents f4f48ead 61ff12ae
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -150,6 +150,8 @@ void RequestedLayerState::merge(const ResolvedComposerState& resolvedComposerSta
            ? ui::Size(externalTexture->getWidth(), externalTexture->getHeight())
            : ui::Size();
    const uint64_t oldUsageFlags = hadBuffer ? externalTexture->getUsage() : 0;
    const bool oldBufferFormatOpaque = LayerSnapshot::isOpaqueFormat(
            externalTexture ? externalTexture->getPixelFormat() : PIXEL_FORMAT_NONE);

    const bool hadSideStream = sidebandStream != nullptr;
    const layer_state_t& clientState = resolvedComposerState.state;
@@ -160,7 +162,7 @@ void RequestedLayerState::merge(const ResolvedComposerState& resolvedComposerSta
    LLOGV(layerId, "requested=%" PRIu64 "flags=%" PRIu64, clientState.what, clientChanges);

    if (clientState.what & layer_state_t::eFlagsChanged) {
        if ((oldFlags ^ flags) & layer_state_t::eLayerHidden) {
        if ((oldFlags ^ flags) & (layer_state_t::eLayerHidden | layer_state_t::eLayerOpaque)) {
            changes |= RequestedLayerState::Changes::Visibility |
                    RequestedLayerState::Changes::VisibleRegion;
        }
@@ -214,6 +216,13 @@ void RequestedLayerState::merge(const ResolvedComposerState& resolvedComposerSta
            barrierProducerId = std::max(bufferData->producerId, barrierProducerId);
            barrierFrameNumber = std::max(bufferData->frameNumber, barrierFrameNumber);
        }

        const bool newBufferFormatOpaque = LayerSnapshot::isOpaqueFormat(
                externalTexture ? externalTexture->getPixelFormat() : PIXEL_FORMAT_NONE);
        if (newBufferFormatOpaque != oldBufferFormatOpaque) {
            changes |= RequestedLayerState::Changes::Visibility |
                    RequestedLayerState::Changes::VisibleRegion;
        }
    }

    if (clientState.what & layer_state_t::eSidebandStreamChanged) {