diff options
author | Brian Orr <brianorr@google.com> | 2021-05-13 09:29:52 -0700 |
---|---|---|
committer | Brian Orr <brianorr@google.com> | 2021-05-13 09:29:52 -0700 |
commit | 2002595eeaa15527bedfee55f7cf1be1e53a96cd (patch) | |
tree | 03b73f8bc1eb66ba48150e179382440597539085 /services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp | |
parent | e06752e28f70267b23356c511130da74b3e9f40f (diff) | |
parent | d253621149976855feed18e51ed504be145fa1c4 (diff) |
Merge SP1A.210510.001
Change-Id: Id17825b5c1611b4a2e80450a412b06082d854ae1
Diffstat (limited to 'services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp')
-rw-r--r-- | services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp index 7b71957021..27980a01ac 100644 --- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp @@ -879,6 +879,64 @@ TEST_F(OutputUpdateAndWriteCompositionStateTest, forcesClientCompositionForAllLa mOutput->writeCompositionState(args); } +TEST_F(OutputUpdateAndWriteCompositionStateTest, peekThroughLayerChangesOrder) { + renderengine::mock::RenderEngine renderEngine; + InjectedLayer layer0; + InjectedLayer layer1; + InjectedLayer layer2; + InjectedLayer layer3; + + InSequence seq; + EXPECT_CALL(*layer0.outputLayer, updateCompositionState(true, false, ui::Transform::ROT_0)); + EXPECT_CALL(*layer1.outputLayer, updateCompositionState(true, false, ui::Transform::ROT_0)); + EXPECT_CALL(*layer2.outputLayer, updateCompositionState(true, false, ui::Transform::ROT_0)); + EXPECT_CALL(*layer3.outputLayer, updateCompositionState(true, false, ui::Transform::ROT_0)); + + uint32_t z = 0; + EXPECT_CALL(*layer0.outputLayer, + writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, z++, + /*zIsOverridden*/ false, /*isPeekingThrough*/ false)); + + // After calling planComposition (which clears overrideInfo), this test sets + // layer3 to be the peekThroughLayer for layer1 and layer2. As a result, it + // comes first, setting isPeekingThrough to true and zIsOverridden to true + // for it and the following layers. + EXPECT_CALL(*layer3.outputLayer, + writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, z++, + /*zIsOverridden*/ true, /*isPeekingThrough*/ + true)); + EXPECT_CALL(*layer1.outputLayer, + writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, z++, + /*zIsOverridden*/ true, /*isPeekingThrough*/ false)); + EXPECT_CALL(*layer2.outputLayer, + writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ true, z++, + /*zIsOverridden*/ true, /*isPeekingThrough*/ false)); + + injectOutputLayer(layer0); + injectOutputLayer(layer1); + injectOutputLayer(layer2); + injectOutputLayer(layer3); + + mOutput->editState().isEnabled = true; + + CompositionRefreshArgs args; + args.updatingGeometryThisFrame = true; + args.devOptForceClientComposition = false; + mOutput->updateCompositionState(args); + mOutput->planComposition(); + + std::shared_ptr<renderengine::ExternalTexture> buffer = std::make_shared< + renderengine::ExternalTexture>(new GraphicBuffer(), renderEngine, + renderengine::ExternalTexture::Usage::READABLE | + renderengine::ExternalTexture::Usage::WRITEABLE); + layer1.outputLayerState.overrideInfo.buffer = buffer; + layer2.outputLayerState.overrideInfo.buffer = buffer; + layer1.outputLayerState.overrideInfo.peekThroughLayer = layer3.outputLayer; + layer2.outputLayerState.overrideInfo.peekThroughLayer = layer3.outputLayer; + + mOutput->writeCompositionState(args); +} + /* * Output::prepareFrame() */ |