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

Commit 2b1212b9 authored by Alec Mouri's avatar Alec Mouri
Browse files

Ensure that LayerFECompositionState's fence is always non-null

When a solid color layer is overridden by a cached set AND the layer is
skipped due to a prior overridden layer, acquireFence must be nonnull.
Otherwise, the DisplayHardware apis will fail.

To be less error-prone, set LayerFECompositionState's acquire fence to be
Fence::NO_FENCE.

Bug: 209930535
Bug: 208780233
Test: PiP in maps app
Change-Id: Ia896419eb699903453f6f69e4b6c3527e62ec270
parent 2c709212
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -161,7 +161,7 @@ struct LayerFECompositionState {
    // The buffer and related state
    // The buffer and related state
    sp<GraphicBuffer> buffer;
    sp<GraphicBuffer> buffer;
    int bufferSlot{BufferQueue::INVALID_BUFFER_SLOT};
    int bufferSlot{BufferQueue::INVALID_BUFFER_SLOT};
    sp<Fence> acquireFence;
    sp<Fence> acquireFence = Fence::NO_FENCE;
    Region surfaceDamage;
    Region surfaceDamage;


    // The handle to use for a sideband stream for this layer
    // The handle to use for a sideband stream for this layer
+16 −0
Original line number Original line Diff line number Diff line
@@ -1093,6 +1093,22 @@ TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerDoesNotSendBuffer) {
                                 /*zIsOverridden*/ false, /*isPeekingThrough*/ false);
                                 /*zIsOverridden*/ false, /*isPeekingThrough*/ false);
}
}


TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerForSolidColorDoesNotSendBuffer) {
    mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR;
    includeOverrideInfo();

    expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform,
                              kOverrideBlendMode, kSkipAlpha);
    expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion,
                              kOverrideSurfaceDamage);
    expectSetHdrMetadataAndBufferCalls();
    expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE);
    EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false));

    mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ true, 0,
                                 /*zIsOverridden*/ false, /*isPeekingThrough*/ false);
}

TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) {
TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) {
    mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE;
    mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE;
    includeOverrideInfo();
    includeOverrideInfo();