diff options
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/TextureFiltering_test.cpp | 15 |
2 files changed, 15 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index eecfeb661a..f0f163211b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -7115,6 +7115,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl( captureResults.capturedHdrLayers |= isHdrLayer(*snapshot); layerFE->mSnapshot->geomLayerTransform = renderArea->getTransform() * layerFE->mSnapshot->geomLayerTransform; + layerFE->mSnapshot->geomInverseLayerTransform = + layerFE->mSnapshot->geomLayerTransform.inverse(); } // We allow the system server to take screenshots of secure layers for diff --git a/services/surfaceflinger/tests/TextureFiltering_test.cpp b/services/surfaceflinger/tests/TextureFiltering_test.cpp index e9b1fbb354..d0ab105414 100644 --- a/services/surfaceflinger/tests/TextureFiltering_test.cpp +++ b/services/surfaceflinger/tests/TextureFiltering_test.cpp @@ -187,8 +187,6 @@ TEST_F(TextureFilteringTest, LayerCaptureWithCropNoFiltering) { // Expect no filtering because the output source crop and output buffer are the same size. TEST_F(TextureFilteringTest, OutputSourceCropDisplayFrameMatchNoFiltering) { - // Transaction().setCrop(mLayer, Rect{25, 25, 75, 75}).apply(); - gui::DisplayCaptureArgs captureArgs; captureArgs.displayToken = mDisplay; captureArgs.width = 50; @@ -224,4 +222,17 @@ TEST_F(TextureFilteringTest, ParentCropNoFiltering) { mCapture->expectColor(Rect{50, 25, 75, 75}, Color::BLUE); } +// Expect no filtering because parent's position transform shouldn't scale the layer. +TEST_F(TextureFilteringTest, ParentHasTransformNoFiltering) { + Transaction().setPosition(mParent, 100, 100).apply(); + + LayerCaptureArgs captureArgs; + captureArgs.layerHandle = mParent->getHandle(); + captureArgs.sourceCrop = Rect{0, 0, 100, 100}; + ScreenCapture::captureLayers(&mCapture, captureArgs); + + mCapture->expectColor(Rect{0, 0, 50, 100}, Color::RED); + mCapture->expectColor(Rect{50, 0, 100, 100}, Color::BLUE); +} + } // namespace android |