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

Commit ef63b617 authored by Lloyd Pique's avatar Lloyd Pique
Browse files

CE: Unit test coverage for Output::updateAndWriteCompositionState

Bug: 144114768
Test: atest libcompositionengine_test
Change-Id: Idb18a9e2ea5d68da61cc12574cf6b494c9d1f3f0
parent c0ee6ba0
Loading
Loading
Loading
Loading
+65 −6
Original line number Diff line number Diff line
@@ -629,23 +629,82 @@ TEST_F(OutputUpdateLayerStateFromFETest, latchesGeometryAndContentStateForAllCon
 * Output::updateAndWriteCompositionState()
 */

TEST_F(OutputTest, updateAndWriteCompositionState_takesEarlyOutIfNotEnabled) {
using OutputUpdateAndWriteCompositionStateTest = OutputLatchFEStateTest;

TEST_F(OutputUpdateAndWriteCompositionStateTest, doesNothingIfLayers) {
    mOutput->editState().isEnabled = true;

    CompositionRefreshArgs args;
    mOutput->updateAndWriteCompositionState(args);
}

TEST_F(OutputUpdateAndWriteCompositionStateTest, doesNothingIfOutputNotEnabled) {
    mOutput->editState().isEnabled = false;

    injectLayer(std::move(mOutputLayer1));
    injectLayer(std::move(mOutputLayer2));
    injectLayer(std::move(mOutputLayer3));

    CompositionRefreshArgs args;
    mOutput->updateAndWriteCompositionState(args);
}

TEST_F(OutputTest, updateAndWriteCompositionState_updatesLayers) {
TEST_F(OutputUpdateAndWriteCompositionStateTest, updatesLayerContentForAllLayers) {
    EXPECT_CALL(*mOutputLayer1, updateCompositionState(false, false));
    EXPECT_CALL(*mOutputLayer1, writeStateToHWC(false));
    EXPECT_CALL(*mOutputLayer2, updateCompositionState(false, false));
    EXPECT_CALL(*mOutputLayer2, writeStateToHWC(false));
    EXPECT_CALL(*mOutputLayer3, updateCompositionState(false, false));
    EXPECT_CALL(*mOutputLayer3, writeStateToHWC(false));

    injectLayer(std::move(mOutputLayer1));
    injectLayer(std::move(mOutputLayer2));
    injectLayer(std::move(mOutputLayer3));

    mOutput->editState().isEnabled = true;
    mock::OutputLayer* outputLayer = new StrictMock<mock::OutputLayer>();
    mOutput->injectOutputLayerForTest(std::unique_ptr<OutputLayer>(outputLayer));

    EXPECT_CALL(*outputLayer, updateCompositionState(true, true)).Times(1);
    EXPECT_CALL(*outputLayer, writeStateToHWC(true)).Times(1);
    CompositionRefreshArgs args;
    args.updatingGeometryThisFrame = false;
    args.devOptForceClientComposition = false;
    mOutput->updateAndWriteCompositionState(args);
}

TEST_F(OutputUpdateAndWriteCompositionStateTest, updatesLayerGeometryAndContentForAllLayers) {
    EXPECT_CALL(*mOutputLayer1, updateCompositionState(true, false));
    EXPECT_CALL(*mOutputLayer1, writeStateToHWC(true));
    EXPECT_CALL(*mOutputLayer2, updateCompositionState(true, false));
    EXPECT_CALL(*mOutputLayer2, writeStateToHWC(true));
    EXPECT_CALL(*mOutputLayer3, updateCompositionState(true, false));
    EXPECT_CALL(*mOutputLayer3, writeStateToHWC(true));

    injectLayer(std::move(mOutputLayer1));
    injectLayer(std::move(mOutputLayer2));
    injectLayer(std::move(mOutputLayer3));

    mOutput->editState().isEnabled = true;

    CompositionRefreshArgs args;
    args.updatingGeometryThisFrame = true;
    args.devOptForceClientComposition = false;
    mOutput->updateAndWriteCompositionState(args);
}

TEST_F(OutputUpdateAndWriteCompositionStateTest, forcesClientCompositionForAllLayers) {
    EXPECT_CALL(*mOutputLayer1, updateCompositionState(false, true));
    EXPECT_CALL(*mOutputLayer1, writeStateToHWC(false));
    EXPECT_CALL(*mOutputLayer2, updateCompositionState(false, true));
    EXPECT_CALL(*mOutputLayer2, writeStateToHWC(false));
    EXPECT_CALL(*mOutputLayer3, updateCompositionState(false, true));
    EXPECT_CALL(*mOutputLayer3, writeStateToHWC(false));

    injectLayer(std::move(mOutputLayer1));
    injectLayer(std::move(mOutputLayer2));
    injectLayer(std::move(mOutputLayer3));

    mOutput->editState().isEnabled = true;

    CompositionRefreshArgs args;
    args.updatingGeometryThisFrame = false;
    args.devOptForceClientComposition = true;
    mOutput->updateAndWriteCompositionState(args);
}