Loading services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -231,7 +231,7 @@ uint32_t OutputLayer::calculateOutputRelativeBufferTransform() const { * (NOTE: the matrices are multiplied in reverse order) */ const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform displayTransform{outputState.orientation}; const ui::Transform displayTransform{outputState.transform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; ui::Transform transform(displayTransform * layerTransform * bufferTransform); Loading services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,7 @@ TEST_F(OutputLayerTest, calculateOutputRelativeBufferTransformTestsNeeded) { mLayerFEState.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerFEState.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -422,6 +423,7 @@ TEST_F(OutputLayerTest, mLayerFEState.geomLayerTransform = ui::Transform{entry.layer}; mLayerFEState.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -764,6 +766,21 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetAllState) { mOutputLayer.writeStateToHWC(true); } TEST_F(OutputLayerTest, displayInstallOrientationBufferTransformSetTo90) { mLayerFEState.geomBufferUsesDisplayInverseTransform = false; mLayerFEState.geomLayerTransform = ui::Transform{TR_IDENT}; // This test simulates a scenario where displayInstallOrientation is set to // ROT_90. This only has an effect on the transform; orientation stays 0 (see // DisplayDevice::setProjection). mOutputState.orientation = TR_IDENT; mOutputState.transform = ui::Transform{TR_ROT_90}; // Buffers are pre-rotated based on the transform hint (ROT_90); their // geomBufferTransform is set to the inverse transform. mLayerFEState.geomBufferTransform = TR_ROT_270; EXPECT_EQ(TR_IDENT, mOutputLayer.calculateOutputRelativeBufferTransform()); } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSolidColor) { mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; Loading Loading
services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -231,7 +231,7 @@ uint32_t OutputLayer::calculateOutputRelativeBufferTransform() const { * (NOTE: the matrices are multiplied in reverse order) */ const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform displayTransform{outputState.orientation}; const ui::Transform displayTransform{outputState.transform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; ui::Transform transform(displayTransform * layerTransform * bufferTransform); Loading
services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -364,6 +364,7 @@ TEST_F(OutputLayerTest, calculateOutputRelativeBufferTransformTestsNeeded) { mLayerFEState.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerFEState.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -422,6 +423,7 @@ TEST_F(OutputLayerTest, mLayerFEState.geomLayerTransform = ui::Transform{entry.layer}; mLayerFEState.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -764,6 +766,21 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetAllState) { mOutputLayer.writeStateToHWC(true); } TEST_F(OutputLayerTest, displayInstallOrientationBufferTransformSetTo90) { mLayerFEState.geomBufferUsesDisplayInverseTransform = false; mLayerFEState.geomLayerTransform = ui::Transform{TR_IDENT}; // This test simulates a scenario where displayInstallOrientation is set to // ROT_90. This only has an effect on the transform; orientation stays 0 (see // DisplayDevice::setProjection). mOutputState.orientation = TR_IDENT; mOutputState.transform = ui::Transform{TR_ROT_90}; // Buffers are pre-rotated based on the transform hint (ROT_90); their // geomBufferTransform is set to the inverse transform. mLayerFEState.geomBufferTransform = TR_ROT_270; EXPECT_EQ(TR_IDENT, mOutputLayer.calculateOutputRelativeBufferTransform()); } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSolidColor) { mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; Loading