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

Commit ab942863 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

Trigger windowinfo updates when alpha changes

Input and TrustedPresentationListener logic relies on layer alpha. This change ensures
that SurfaceFlinger sends the updated window info when only the alpha changes.

Fixes: 325254898
Test: presubmit
Flag: EXEMPT bugfix
Change-Id: I6b9a5b2874add278245cb682c5362c18403c70b0
parent b51f44c4
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -276,9 +276,9 @@ struct layer_state_t {
            layer_state_t::eFrameRateSelectionPriority | layer_state_t::eFixedTransformHintChanged;

    // Changes affecting data sent to input.
    static constexpr uint64_t INPUT_CHANGES = layer_state_t::eInputInfoChanged |
            layer_state_t::eDropInputModeChanged | layer_state_t::eTrustedOverlayChanged |
            layer_state_t::eLayerStackChanged;
    static constexpr uint64_t INPUT_CHANGES = layer_state_t::eAlphaChanged |
            layer_state_t::eInputInfoChanged | layer_state_t::eDropInputModeChanged |
            layer_state_t::eTrustedOverlayChanged | layer_state_t::eLayerStackChanged;

    // Changes that affect the visible region on a display.
    static constexpr uint64_t VISIBLE_REGION_CHANGES = layer_state_t::GEOMETRY_CHANGES |
+4 −2
Original line number Diff line number Diff line
@@ -538,7 +538,8 @@ TEST_F(LayerLifecycleManagerTest, alphaChangesAlwaysSetsVisibleRegionFlag) {
              ftl::Flags<RequestedLayerState::Changes>(
                      RequestedLayerState::Changes::Content |
                      RequestedLayerState::Changes::AffectsChildren |
                      RequestedLayerState::Changes::VisibleRegion)
                      RequestedLayerState::Changes::VisibleRegion |
                      RequestedLayerState::Changes::Input)
                      .string());
    EXPECT_EQ(mLifecycleManager.getChangedLayers()[0]->color.a, static_cast<half>(startingAlpha));
    mLifecycleManager.commitChanges();
@@ -551,7 +552,8 @@ TEST_F(LayerLifecycleManagerTest, alphaChangesAlwaysSetsVisibleRegionFlag) {
              ftl::Flags<RequestedLayerState::Changes>(
                      RequestedLayerState::Changes::Content |
                      RequestedLayerState::Changes::AffectsChildren |
                      RequestedLayerState::Changes::VisibleRegion)
                      RequestedLayerState::Changes::VisibleRegion |
                      RequestedLayerState::Changes::Input)
                      .string());
    EXPECT_EQ(mLifecycleManager.getChangedLayers()[0]->color.a, static_cast<half>(endingAlpha));
    mLifecycleManager.commitChanges();
+10 −0
Original line number Diff line number Diff line
@@ -1161,6 +1161,16 @@ TEST_F(LayerSnapshotTest, setTrustedOverlayForNonVisibleInput) {
            gui::WindowInfo::InputConfig::TRUSTED_OVERLAY));
}

TEST_F(LayerSnapshotTest, alphaChangesPropagateToInput) {
    Region touch{Rect{0, 0, 1000, 1000}};
    setTouchableRegion(1, touch);
    UPDATE_AND_VERIFY(mSnapshotBuilder, STARTING_ZORDER);

    setAlpha(1, 0.5f);
    UPDATE_AND_VERIFY(mSnapshotBuilder, STARTING_ZORDER);
    EXPECT_EQ(getSnapshot(1)->inputInfo.alpha, 0.5f);
}

TEST_F(LayerSnapshotTest, isFrontBuffered) {
    setBuffer(1,
              std::make_shared<renderengine::mock::FakeExternalTexture>(