Loading services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ void Output::setProjection(ui::Rotation orientation, const Rect& layerStackSpace LOG_FATAL_IF(outputState.framebufferSpace.bounds == Rect::INVALID_RECT, "The framebuffer bounds are unknown."); const auto scale = getScale(outputState.framebufferSpace.bounds, outputState.displaySpace.bounds); getScale(outputState.displaySpace.bounds, outputState.framebufferSpace.bounds); outputState.framebufferSpace.content = outputState.displaySpace.content.scale(scale.x, scale.y); // Compute layerStackSpace Loading services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +65 −3 Original line number Diff line number Diff line Loading @@ -235,16 +235,75 @@ TEST_F(OutputTest, setCompositionEnabledSetsDisabledAndDirtiesEntireOutput) { * Output::setProjection() */ TEST_F(OutputTest, setProjectionTriviallyWorks) { TEST_F(OutputTest, setProjectionWorks) { const Rect displayRect{0, 0, 1000, 2000}; mOutput->editState().displaySpace.bounds = displayRect; mOutput->editState().framebufferSpace.bounds = displayRect; const ui::Rotation orientation = ui::ROTATION_90; const Rect frame{1, 2, 3, 4}; const Rect viewport{5, 6, 7, 8}; const Rect frame{50, 60, 100, 100}; const Rect viewport{10, 20, 30, 40}; mOutput->setProjection(orientation, viewport, frame); EXPECT_EQ(orientation, mOutput->getState().displaySpace.orientation); EXPECT_EQ(frame, mOutput->getState().orientedDisplaySpace.content); EXPECT_EQ(viewport, mOutput->getState().layerStackSpace.content); const auto state = mOutput->getState(); EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(viewport, state.layerStackSpace.content); EXPECT_EQ(viewport, state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(frame, state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.displaySpace.content); EXPECT_EQ(orientation, state.displaySpace.orientation); EXPECT_EQ(displayRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.framebufferSpace.content); EXPECT_EQ(orientation, state.framebufferSpace.orientation); EXPECT_EQ(state.displaySpace.content, state.transform.transform(state.layerStackSpace.content)); } TEST_F(OutputTest, setProjectionWithSmallFramebufferWorks) { const Rect displayRect{0, 0, 1000, 2000}; const Rect framebufferRect{0, 0, 500, 1000}; mOutput->editState().displaySpace.bounds = displayRect; mOutput->editState().framebufferSpace.bounds = framebufferRect; const ui::Rotation orientation = ui::ROTATION_90; const Rect frame{50, 60, 100, 100}; const Rect viewport{10, 20, 30, 40}; mOutput->setProjection(orientation, viewport, frame); EXPECT_EQ(orientation, mOutput->getState().displaySpace.orientation); EXPECT_EQ(frame, mOutput->getState().orientedDisplaySpace.content); EXPECT_EQ(viewport, mOutput->getState().layerStackSpace.content); const auto state = mOutput->getState(); EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(viewport, state.layerStackSpace.content); EXPECT_EQ(viewport, state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(frame, state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.displaySpace.content); EXPECT_EQ(orientation, state.displaySpace.orientation); EXPECT_EQ(framebufferRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(450, 25, 470, 50), state.framebufferSpace.content); EXPECT_EQ(orientation, state.framebufferSpace.orientation); EXPECT_EQ(state.displaySpace.content, state.transform.transform(state.layerStackSpace.content)); } /* Loading Loading @@ -275,12 +334,15 @@ TEST_F(OutputTest, setDisplaySpaceSizeUpdatesOutputStateAndDirtiesEntireOutput) EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.layerStackSpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(Rect(0, 0, 900, 450), state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 1000, 500), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(0, 0, 450, 900), state.displaySpace.content); EXPECT_EQ(ui::ROTATION_90, state.displaySpace.orientation); EXPECT_EQ(displayRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(0, 0, 450, 900), state.framebufferSpace.content); EXPECT_EQ(ui::ROTATION_90, state.framebufferSpace.orientation); Loading services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp +9 −9 Original line number Diff line number Diff line Loading @@ -1448,7 +1448,7 @@ public: }); } ui::Size SwapWH(const ui::Size size) const { return ui::Size(size.height, size.width); } ui::Size swapWH(const ui::Size size) const { return ui::Size(size.height, size.width); } void setProjectionForRotation0() { // A logical rotation of 0 uses the SurfaceFlinger display size Loading @@ -1459,8 +1459,8 @@ public: void setProjectionForRotation90() { // A logical rotation of 90 uses the SurfaceFlinger display size with // the width/height swapped. mDisplayDevice->setProjection(ui::ROTATION_90, Rect(SwapWH(mFlingerDisplaySize)), Rect(SwapWH(mFlingerDisplaySize))); mDisplayDevice->setProjection(ui::ROTATION_90, Rect(swapWH(mFlingerDisplaySize)), Rect(swapWH(mFlingerDisplaySize))); } void setProjectionForRotation180() { Loading @@ -1472,8 +1472,8 @@ public: void setProjectionForRotation270() { // A logical rotation of 270 uses the SurfaceFlinger display size with // the width/height swapped. mDisplayDevice->setProjection(ui::ROTATION_270, Rect(SwapWH(mFlingerDisplaySize)), Rect(SwapWH(mFlingerDisplaySize))); mDisplayDevice->setProjection(ui::ROTATION_270, Rect(swapWH(mFlingerDisplaySize)), Rect(swapWH(mFlingerDisplaySize))); } void expectStateForHardwareTransform0() { Loading @@ -1497,9 +1497,9 @@ public: EXPECT_EQ(Rect(mHardwareDisplaySize), compositionState.displaySpace.content); // For 90, the orientedDisplaySpaceRect and layerStackSpaceRect have the hardware display // size width and height swapped EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.orientedDisplaySpace.content); EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(false, compositionState.needsFiltering); } Loading @@ -1523,9 +1523,9 @@ public: EXPECT_EQ(Rect(mHardwareDisplaySize), compositionState.displaySpace.content); // For 270, the orientedDisplaySpaceRect and layerStackSpaceRect have the hardware display // size width and height swapped EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.orientedDisplaySpace.content); EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(false, compositionState.needsFiltering); } Loading Loading
services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,7 @@ void Output::setProjection(ui::Rotation orientation, const Rect& layerStackSpace LOG_FATAL_IF(outputState.framebufferSpace.bounds == Rect::INVALID_RECT, "The framebuffer bounds are unknown."); const auto scale = getScale(outputState.framebufferSpace.bounds, outputState.displaySpace.bounds); getScale(outputState.displaySpace.bounds, outputState.framebufferSpace.bounds); outputState.framebufferSpace.content = outputState.displaySpace.content.scale(scale.x, scale.y); // Compute layerStackSpace Loading
services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +65 −3 Original line number Diff line number Diff line Loading @@ -235,16 +235,75 @@ TEST_F(OutputTest, setCompositionEnabledSetsDisabledAndDirtiesEntireOutput) { * Output::setProjection() */ TEST_F(OutputTest, setProjectionTriviallyWorks) { TEST_F(OutputTest, setProjectionWorks) { const Rect displayRect{0, 0, 1000, 2000}; mOutput->editState().displaySpace.bounds = displayRect; mOutput->editState().framebufferSpace.bounds = displayRect; const ui::Rotation orientation = ui::ROTATION_90; const Rect frame{1, 2, 3, 4}; const Rect viewport{5, 6, 7, 8}; const Rect frame{50, 60, 100, 100}; const Rect viewport{10, 20, 30, 40}; mOutput->setProjection(orientation, viewport, frame); EXPECT_EQ(orientation, mOutput->getState().displaySpace.orientation); EXPECT_EQ(frame, mOutput->getState().orientedDisplaySpace.content); EXPECT_EQ(viewport, mOutput->getState().layerStackSpace.content); const auto state = mOutput->getState(); EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(viewport, state.layerStackSpace.content); EXPECT_EQ(viewport, state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(frame, state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.displaySpace.content); EXPECT_EQ(orientation, state.displaySpace.orientation); EXPECT_EQ(displayRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.framebufferSpace.content); EXPECT_EQ(orientation, state.framebufferSpace.orientation); EXPECT_EQ(state.displaySpace.content, state.transform.transform(state.layerStackSpace.content)); } TEST_F(OutputTest, setProjectionWithSmallFramebufferWorks) { const Rect displayRect{0, 0, 1000, 2000}; const Rect framebufferRect{0, 0, 500, 1000}; mOutput->editState().displaySpace.bounds = displayRect; mOutput->editState().framebufferSpace.bounds = framebufferRect; const ui::Rotation orientation = ui::ROTATION_90; const Rect frame{50, 60, 100, 100}; const Rect viewport{10, 20, 30, 40}; mOutput->setProjection(orientation, viewport, frame); EXPECT_EQ(orientation, mOutput->getState().displaySpace.orientation); EXPECT_EQ(frame, mOutput->getState().orientedDisplaySpace.content); EXPECT_EQ(viewport, mOutput->getState().layerStackSpace.content); const auto state = mOutput->getState(); EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(viewport, state.layerStackSpace.content); EXPECT_EQ(viewport, state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(frame, state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(900, 50, 940, 100), state.displaySpace.content); EXPECT_EQ(orientation, state.displaySpace.orientation); EXPECT_EQ(framebufferRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(450, 25, 470, 50), state.framebufferSpace.content); EXPECT_EQ(orientation, state.framebufferSpace.orientation); EXPECT_EQ(state.displaySpace.content, state.transform.transform(state.layerStackSpace.content)); } /* Loading Loading @@ -275,12 +334,15 @@ TEST_F(OutputTest, setDisplaySpaceSizeUpdatesOutputStateAndDirtiesEntireOutput) EXPECT_EQ(ui::ROTATION_0, state.layerStackSpace.orientation); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.layerStackSpace.content); EXPECT_EQ(Rect(0, 0, 2000, 1000), state.layerStackSpace.bounds); EXPECT_EQ(ui::ROTATION_0, state.orientedDisplaySpace.orientation); EXPECT_EQ(Rect(0, 0, 900, 450), state.orientedDisplaySpace.content); EXPECT_EQ(Rect(0, 0, 1000, 500), state.orientedDisplaySpace.bounds); EXPECT_EQ(displayRect, state.displaySpace.bounds); EXPECT_EQ(Rect(0, 0, 450, 900), state.displaySpace.content); EXPECT_EQ(ui::ROTATION_90, state.displaySpace.orientation); EXPECT_EQ(displayRect, state.framebufferSpace.bounds); EXPECT_EQ(Rect(0, 0, 450, 900), state.framebufferSpace.content); EXPECT_EQ(ui::ROTATION_90, state.framebufferSpace.orientation); Loading
services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp +9 −9 Original line number Diff line number Diff line Loading @@ -1448,7 +1448,7 @@ public: }); } ui::Size SwapWH(const ui::Size size) const { return ui::Size(size.height, size.width); } ui::Size swapWH(const ui::Size size) const { return ui::Size(size.height, size.width); } void setProjectionForRotation0() { // A logical rotation of 0 uses the SurfaceFlinger display size Loading @@ -1459,8 +1459,8 @@ public: void setProjectionForRotation90() { // A logical rotation of 90 uses the SurfaceFlinger display size with // the width/height swapped. mDisplayDevice->setProjection(ui::ROTATION_90, Rect(SwapWH(mFlingerDisplaySize)), Rect(SwapWH(mFlingerDisplaySize))); mDisplayDevice->setProjection(ui::ROTATION_90, Rect(swapWH(mFlingerDisplaySize)), Rect(swapWH(mFlingerDisplaySize))); } void setProjectionForRotation180() { Loading @@ -1472,8 +1472,8 @@ public: void setProjectionForRotation270() { // A logical rotation of 270 uses the SurfaceFlinger display size with // the width/height swapped. mDisplayDevice->setProjection(ui::ROTATION_270, Rect(SwapWH(mFlingerDisplaySize)), Rect(SwapWH(mFlingerDisplaySize))); mDisplayDevice->setProjection(ui::ROTATION_270, Rect(swapWH(mFlingerDisplaySize)), Rect(swapWH(mFlingerDisplaySize))); } void expectStateForHardwareTransform0() { Loading @@ -1497,9 +1497,9 @@ public: EXPECT_EQ(Rect(mHardwareDisplaySize), compositionState.displaySpace.content); // For 90, the orientedDisplaySpaceRect and layerStackSpaceRect have the hardware display // size width and height swapped EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.orientedDisplaySpace.content); EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(false, compositionState.needsFiltering); } Loading @@ -1523,9 +1523,9 @@ public: EXPECT_EQ(Rect(mHardwareDisplaySize), compositionState.displaySpace.content); // For 270, the orientedDisplaySpaceRect and layerStackSpaceRect have the hardware display // size width and height swapped EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.orientedDisplaySpace.content); EXPECT_EQ(Rect(SwapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(Rect(swapWH(mHardwareDisplaySize)), compositionState.layerStackSpace.content); EXPECT_EQ(false, compositionState.needsFiltering); } Loading