Loading services/surfaceflinger/FrontEnd/RequestedLayerState.cpp +13 −11 Original line number Diff line number Diff line Loading @@ -587,23 +587,22 @@ bool RequestedLayerState::isSimpleBufferUpdate(const layer_state_t& s) const { const uint64_t deniedFlags = layer_state_t::eProducerDisconnect | layer_state_t::eLayerChanged | layer_state_t::eRelativeLayerChanged | layer_state_t::eTransparentRegionChanged | layer_state_t::eFlagsChanged | layer_state_t::eBlurRegionsChanged | layer_state_t::eLayerStackChanged | layer_state_t::eReparent | layer_state_t::eBlurRegionsChanged | layer_state_t::eLayerStackChanged | layer_state_t::eReparent | (FlagManager::getInstance().latch_unsignaled_with_auto_refresh_changed() ? 0 : layer_state_t::eAutoRefreshChanged); : (layer_state_t::eAutoRefreshChanged | layer_state_t::eFlagsChanged)); if (s.what & deniedFlags) { ATRACE_FORMAT_INSTANT("%s: false [has denied flags 0x%" PRIx64 "]", __func__, s.what & deniedFlags); return false; } bool changedFlags = diff(s); static constexpr auto deniedChanges = layer_state_t::ePositionChanged | layer_state_t::eAlphaChanged | layer_state_t::eColorTransformChanged | layer_state_t::eBackgroundColorChanged | layer_state_t::eMatrixChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBufferTransformChanged | const uint64_t changedFlags = diff(s); const uint64_t deniedChanges = layer_state_t::ePositionChanged | layer_state_t::eAlphaChanged | layer_state_t::eColorTransformChanged | layer_state_t::eBackgroundColorChanged | layer_state_t::eMatrixChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBufferTransformChanged | layer_state_t::eTransformToDisplayInverseChanged | layer_state_t::eCropChanged | layer_state_t::eDataspaceChanged | layer_state_t::eHdrMetadataChanged | layer_state_t::eSidebandStreamChanged | layer_state_t::eColorSpaceAgnosticChanged | Loading @@ -611,10 +610,13 @@ bool RequestedLayerState::isSimpleBufferUpdate(const layer_state_t& s) const { layer_state_t::eTrustedOverlayChanged | layer_state_t::eStretchChanged | layer_state_t::eBufferCropChanged | layer_state_t::eDestinationFrameChanged | layer_state_t::eDimmingEnabledChanged | layer_state_t::eExtendedRangeBrightnessChanged | layer_state_t::eDesiredHdrHeadroomChanged; layer_state_t::eDesiredHdrHeadroomChanged | (FlagManager::getInstance().latch_unsignaled_with_auto_refresh_changed() ? layer_state_t::eFlagsChanged : 0); if (changedFlags & deniedChanges) { ATRACE_FORMAT_INSTANT("%s: false [has denied changes flags 0x%" PRIx64 "]", __func__, s.what & deniedChanges); changedFlags & deniedChanges); return false; } Loading services/surfaceflinger/tests/unittests/LayerLifecycleManagerTest.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -592,4 +592,41 @@ TEST_F(LayerLifecycleManagerTest, layerSecureChangesSetsVisibilityChangeFlag) { mLifecycleManager.commitChanges(); } TEST_F(LayerLifecycleManagerTest, isSimpleBufferUpdate) { auto layer = rootLayer(1); // no buffer changes EXPECT_FALSE(layer->isSimpleBufferUpdate({})); { layer_state_t state; state.what = layer_state_t::eBufferChanged; EXPECT_TRUE(layer->isSimpleBufferUpdate(state)); } { layer_state_t state; state.what = layer_state_t::eReparent | layer_state_t::eBufferChanged; EXPECT_FALSE(layer->isSimpleBufferUpdate(state)); } { layer_state_t state; state.what = layer_state_t::ePositionChanged | layer_state_t::eBufferChanged; state.x = 9; state.y = 10; EXPECT_FALSE(layer->isSimpleBufferUpdate(state)); } { layer->x = 9; layer->y = 10; layer_state_t state; state.what = layer_state_t::ePositionChanged | layer_state_t::eBufferChanged; state.x = 9; state.y = 10; EXPECT_TRUE(layer->isSimpleBufferUpdate(state)); } } } // namespace android::surfaceflinger::frontend Loading
services/surfaceflinger/FrontEnd/RequestedLayerState.cpp +13 −11 Original line number Diff line number Diff line Loading @@ -587,23 +587,22 @@ bool RequestedLayerState::isSimpleBufferUpdate(const layer_state_t& s) const { const uint64_t deniedFlags = layer_state_t::eProducerDisconnect | layer_state_t::eLayerChanged | layer_state_t::eRelativeLayerChanged | layer_state_t::eTransparentRegionChanged | layer_state_t::eFlagsChanged | layer_state_t::eBlurRegionsChanged | layer_state_t::eLayerStackChanged | layer_state_t::eReparent | layer_state_t::eBlurRegionsChanged | layer_state_t::eLayerStackChanged | layer_state_t::eReparent | (FlagManager::getInstance().latch_unsignaled_with_auto_refresh_changed() ? 0 : layer_state_t::eAutoRefreshChanged); : (layer_state_t::eAutoRefreshChanged | layer_state_t::eFlagsChanged)); if (s.what & deniedFlags) { ATRACE_FORMAT_INSTANT("%s: false [has denied flags 0x%" PRIx64 "]", __func__, s.what & deniedFlags); return false; } bool changedFlags = diff(s); static constexpr auto deniedChanges = layer_state_t::ePositionChanged | layer_state_t::eAlphaChanged | layer_state_t::eColorTransformChanged | layer_state_t::eBackgroundColorChanged | layer_state_t::eMatrixChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBufferTransformChanged | const uint64_t changedFlags = diff(s); const uint64_t deniedChanges = layer_state_t::ePositionChanged | layer_state_t::eAlphaChanged | layer_state_t::eColorTransformChanged | layer_state_t::eBackgroundColorChanged | layer_state_t::eMatrixChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBufferTransformChanged | layer_state_t::eTransformToDisplayInverseChanged | layer_state_t::eCropChanged | layer_state_t::eDataspaceChanged | layer_state_t::eHdrMetadataChanged | layer_state_t::eSidebandStreamChanged | layer_state_t::eColorSpaceAgnosticChanged | Loading @@ -611,10 +610,13 @@ bool RequestedLayerState::isSimpleBufferUpdate(const layer_state_t& s) const { layer_state_t::eTrustedOverlayChanged | layer_state_t::eStretchChanged | layer_state_t::eBufferCropChanged | layer_state_t::eDestinationFrameChanged | layer_state_t::eDimmingEnabledChanged | layer_state_t::eExtendedRangeBrightnessChanged | layer_state_t::eDesiredHdrHeadroomChanged; layer_state_t::eDesiredHdrHeadroomChanged | (FlagManager::getInstance().latch_unsignaled_with_auto_refresh_changed() ? layer_state_t::eFlagsChanged : 0); if (changedFlags & deniedChanges) { ATRACE_FORMAT_INSTANT("%s: false [has denied changes flags 0x%" PRIx64 "]", __func__, s.what & deniedChanges); changedFlags & deniedChanges); return false; } Loading
services/surfaceflinger/tests/unittests/LayerLifecycleManagerTest.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -592,4 +592,41 @@ TEST_F(LayerLifecycleManagerTest, layerSecureChangesSetsVisibilityChangeFlag) { mLifecycleManager.commitChanges(); } TEST_F(LayerLifecycleManagerTest, isSimpleBufferUpdate) { auto layer = rootLayer(1); // no buffer changes EXPECT_FALSE(layer->isSimpleBufferUpdate({})); { layer_state_t state; state.what = layer_state_t::eBufferChanged; EXPECT_TRUE(layer->isSimpleBufferUpdate(state)); } { layer_state_t state; state.what = layer_state_t::eReparent | layer_state_t::eBufferChanged; EXPECT_FALSE(layer->isSimpleBufferUpdate(state)); } { layer_state_t state; state.what = layer_state_t::ePositionChanged | layer_state_t::eBufferChanged; state.x = 9; state.y = 10; EXPECT_FALSE(layer->isSimpleBufferUpdate(state)); } { layer->x = 9; layer->y = 10; layer_state_t state; state.what = layer_state_t::ePositionChanged | layer_state_t::eBufferChanged; state.x = 9; state.y = 10; EXPECT_TRUE(layer->isSimpleBufferUpdate(state)); } } } // namespace android::surfaceflinger::frontend