Loading services/surfaceflinger/Layer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1596,7 +1596,7 @@ bool Layer::reparentChildren(const sp<IBinder>& newParentHandle) { return true; } void Layer::reparentChildrenForDrawing(const sp<Layer>& newParent) { void Layer::setChildrenDrawingParent(const sp<Layer>& newParent) { for (const sp<Layer>& child : mDrawingChildren) { child->mDrawingParent = newParent; } Loading services/surfaceflinger/Layer.h +1 −1 Original line number Diff line number Diff line Loading @@ -287,7 +287,7 @@ public: bool setOverrideScalingMode(int32_t overrideScalingMode); void setInfo(int32_t type, int32_t appId); bool reparentChildren(const sp<IBinder>& layer); void reparentChildrenForDrawing(const sp<Layer>& layer); void setChildrenDrawingParent(const sp<Layer>& layer); bool reparent(const sp<IBinder>& newParentHandle); bool detachChildren(); Loading services/surfaceflinger/SurfaceFlinger.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -4460,9 +4460,9 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder, ReparentForDrawing(const sp<Layer>& oldParent, const sp<Layer>& newParent) : oldParent(oldParent), newParent(newParent) { oldParent->reparentChildrenForDrawing(newParent); oldParent->setChildrenDrawingParent(newParent); } ~ReparentForDrawing() { newParent->reparentChildrenForDrawing(oldParent); } ~ReparentForDrawing() { oldParent->setChildrenDrawingParent(oldParent); } }; void render(std::function<void()> drawLayers) override { Loading services/surfaceflinger/tests/Transaction_test.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -2384,6 +2384,17 @@ TEST_F(ScreenCaptureChildOnlyTest, CaptureLayerIgnoresTransform) { verify(); } TEST_F(ScreenCaptureChildOnlyTest, RegressionTest76099859) { SurfaceComposerClient::Transaction().hide(mFGSurfaceControl).apply(true); // Even though the parent is hidden we should still capture the child. verify(); // Verify everything was properly hidden when rendering the full-screen. screenshot()->expectBGColor(0,0); } TEST_F(ScreenCaptureTest, CaptureLayerWithGrandchild) { auto fgHandle = mFGSurfaceControl->getHandle(); Loading Loading
services/surfaceflinger/Layer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1596,7 +1596,7 @@ bool Layer::reparentChildren(const sp<IBinder>& newParentHandle) { return true; } void Layer::reparentChildrenForDrawing(const sp<Layer>& newParent) { void Layer::setChildrenDrawingParent(const sp<Layer>& newParent) { for (const sp<Layer>& child : mDrawingChildren) { child->mDrawingParent = newParent; } Loading
services/surfaceflinger/Layer.h +1 −1 Original line number Diff line number Diff line Loading @@ -287,7 +287,7 @@ public: bool setOverrideScalingMode(int32_t overrideScalingMode); void setInfo(int32_t type, int32_t appId); bool reparentChildren(const sp<IBinder>& layer); void reparentChildrenForDrawing(const sp<Layer>& layer); void setChildrenDrawingParent(const sp<Layer>& layer); bool reparent(const sp<IBinder>& newParentHandle); bool detachChildren(); Loading
services/surfaceflinger/SurfaceFlinger.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -4460,9 +4460,9 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder, ReparentForDrawing(const sp<Layer>& oldParent, const sp<Layer>& newParent) : oldParent(oldParent), newParent(newParent) { oldParent->reparentChildrenForDrawing(newParent); oldParent->setChildrenDrawingParent(newParent); } ~ReparentForDrawing() { newParent->reparentChildrenForDrawing(oldParent); } ~ReparentForDrawing() { oldParent->setChildrenDrawingParent(oldParent); } }; void render(std::function<void()> drawLayers) override { Loading
services/surfaceflinger/tests/Transaction_test.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -2384,6 +2384,17 @@ TEST_F(ScreenCaptureChildOnlyTest, CaptureLayerIgnoresTransform) { verify(); } TEST_F(ScreenCaptureChildOnlyTest, RegressionTest76099859) { SurfaceComposerClient::Transaction().hide(mFGSurfaceControl).apply(true); // Even though the parent is hidden we should still capture the child. verify(); // Verify everything was properly hidden when rendering the full-screen. screenshot()->expectBGColor(0,0); } TEST_F(ScreenCaptureTest, CaptureLayerWithGrandchild) { auto fgHandle = mFGSurfaceControl->getHandle(); Loading