diff options
| author | 2023-08-30 21:41:46 -0700 | |
|---|---|---|
| committer | 2023-08-30 21:43:24 -0700 | |
| commit | 61ff12ae241b7423e76a76d8f63d2d6ae00c7efd (patch) | |
| tree | 1476cefbe4a4dd5ba817c3e8c44967bb09c73c82 | |
| parent | f486c070103c658259651b04c09b5cbcae88d3cd (diff) | |
[sf-newfe] set visible regions flag when layer opacity changes
Bug: 298114008
Test: crystalball
Change-Id: Ic81b9a3cdd1e1df1de1de4ab154539e96eed86f8
| -rw-r--r-- | services/surfaceflinger/FrontEnd/RequestedLayerState.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/surfaceflinger/FrontEnd/RequestedLayerState.cpp b/services/surfaceflinger/FrontEnd/RequestedLayerState.cpp index 453b51e917..de3295130a 100644 --- a/services/surfaceflinger/FrontEnd/RequestedLayerState.cpp +++ b/services/surfaceflinger/FrontEnd/RequestedLayerState.cpp @@ -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) { |