Loading services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -261,7 +261,7 @@ uint32_t OutputLayer::calculateOutputRelativeBufferTransform() const { * (NOTE: the matrices are multiplied in reverse order) * (NOTE: the matrices are multiplied in reverse order) */ */ const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform displayTransform{outputState.orientation}; const ui::Transform displayTransform{outputState.transform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; ui::Transform transform(displayTransform * layerTransform * bufferTransform); ui::Transform transform(displayTransform * layerTransform * bufferTransform); Loading services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +16 −0 Original line number Original line Diff line number Diff line Loading @@ -236,6 +236,7 @@ TEST_F(OutputLayerTest, calculateOutputRelativeBufferTransformTestsNeeded) { mLayerState.frontEnd.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerState.frontEnd.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerState.frontEnd.geomBufferTransform = entry.buffer; mLayerState.frontEnd.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -310,5 +311,20 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetsAllState) { mOutputLayer.writeStateToHWC(true); mOutputLayer.writeStateToHWC(true); } } TEST_F(OutputLayerTest, displayInstallOrientationBufferTransformSetTo90) { mLayerState.frontEnd.geomBufferUsesDisplayInverseTransform = false; mLayerState.frontEnd.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. mLayerState.frontEnd.geomBufferTransform = TR_ROT_270; EXPECT_EQ(TR_IDENT, mOutputLayer.calculateOutputRelativeBufferTransform()); } } // namespace } // namespace } // namespace android::compositionengine } // namespace android::compositionengine Loading
services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -261,7 +261,7 @@ uint32_t OutputLayer::calculateOutputRelativeBufferTransform() const { * (NOTE: the matrices are multiplied in reverse order) * (NOTE: the matrices are multiplied in reverse order) */ */ const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform& layerTransform = layerState.geomLayerTransform; const ui::Transform displayTransform{outputState.orientation}; const ui::Transform displayTransform{outputState.transform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; const ui::Transform bufferTransform{layerState.geomBufferTransform}; ui::Transform transform(displayTransform * layerTransform * bufferTransform); ui::Transform transform(displayTransform * layerTransform * bufferTransform); Loading
services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +16 −0 Original line number Original line Diff line number Diff line Loading @@ -236,6 +236,7 @@ TEST_F(OutputLayerTest, calculateOutputRelativeBufferTransformTestsNeeded) { mLayerState.frontEnd.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerState.frontEnd.geomLayerTransform.set(entry.layer, 1920, 1080); mLayerState.frontEnd.geomBufferTransform = entry.buffer; mLayerState.frontEnd.geomBufferTransform = entry.buffer; mOutputState.orientation = entry.display; mOutputState.orientation = entry.display; mOutputState.transform = ui::Transform{entry.display}; auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); auto actual = mOutputLayer.calculateOutputRelativeBufferTransform(); EXPECT_EQ(entry.expected, actual) << "entry " << i; EXPECT_EQ(entry.expected, actual) << "entry " << i; Loading Loading @@ -310,5 +311,20 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetsAllState) { mOutputLayer.writeStateToHWC(true); mOutputLayer.writeStateToHWC(true); } } TEST_F(OutputLayerTest, displayInstallOrientationBufferTransformSetTo90) { mLayerState.frontEnd.geomBufferUsesDisplayInverseTransform = false; mLayerState.frontEnd.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. mLayerState.frontEnd.geomBufferTransform = TR_ROT_270; EXPECT_EQ(TR_IDENT, mOutputLayer.calculateOutputRelativeBufferTransform()); } } // namespace } // namespace } // namespace android::compositionengine } // namespace android::compositionengine