OutputLayer的析构方法解读

背景:

分析SurfaceFlinger的合成trace发现如下:
在这里插入图片描述执行collectVisibleLayers时候具体还会触发destroyLayer操作,还是个跨进程的
在这里插入图片描述明显属于在finalizePendingOutputLayers触发的调用

在这里插入图片描述看到了finalizePendingOutputLayers明显好像没啥啊,没看到有调用destroyLayer啊,但是Trace中确实有展示对应destroyLayer,这个是为啥?

通过堆栈追踪:

经过堆栈添加如下:
在这里插入图片描述

1:46.840 12577 12577 D HidlComposer: #00 pc 0000000000133940  /system/bin/surfaceflinger (android::Hwc2::HidlComposer::destroyLayer(unsigned long, unsigned long)+80)
01-11 11:51:46.866 12577 12577 D destroyLayer: #00 pc 0000000000133950  /system/bin/surfaceflinger (android::Hwc2::HidlComposer::destroyLayer(unsigned long, unsigned long)+96)
01-11 11:51:46.866 12577 12577 D destroyLayer: #01 pc 000000000013e89c  /system/bin/surfaceflinger (android::HWC2::impl::Layer::onOwningDisplayDestroyed()+104)
01-11 11:51:46.866 12577 12577 D destroyLayer: #02 pc 0000000000141410  /system/bin/surfaceflinger (android::HWC2::impl::Layer::~Layer()+28)
01-11 11:51:46.866 12577 12577 D destroyLayer: #03 pc 000000000021bcb4  /system/bin/surfaceflinger (android::compositionengine::impl::OutputLayerCompositionState::~OutputLayerCompositionState()+104)
01-11 11:51:46.866 12577 12577 D destroyLayer: #04 pc 000000000021bc14  /system/bin/surfaceflinger (std::__1::unique_ptr<android::compositionengine::impl::OutputLayer, std::__1::default_delete<android::compositionengine::impl::OutputLayer> > android::compositionengine::impl::createOutputLayerTemplated<android::compositionengine::impl::OutputLayer>(android::compositionengine::Output const&, android::sp<android::compositionengine::LayerFE>)::OutputLayer::~OutputLayer()+20)
01-11 11:51:46.866 12577 12577 D destroyLayer: #05 pc 00000000001e8404  /system/bin/surfaceflinger (std::__1::shared_ptr<android::compositionengine::impl::Display> android::compositionengine::impl::createOutputTemplated<android::compositionengine::impl::Display, android::compositionengine::CompositionEngine>(android::compositionengine::CompositionEngine const&)::Output::finalizePendingOutputLayers()+152)
01-11 11:51:46.866 12577 12577 D destroyLayer: #06 pc 00000000001edf24  /system/bin/surfaceflinger (android::compositionengine::impl::Output::collectVisibleLayers(android::compositionengine::CompositionRefreshArgs const&, android::compositionengine::Output::CoverageState&)+188)
01-11 11:51:46.866 12577 12577 D destroyLayer: #07 pc 00000000001edd70  /system/bin/surfaceflinger (android::compositionengine::impl::Output::rebuildLayerStacks(android::compositionengine::CompositionRefreshArgs const&, std::__1::unordered_set<android::sp<android::compositionengine::LayerFE>, android::compositionengine::LayerFESpHash, std::__1::equal_to<android::sp<android::compositionengine::LayerFE> >, std::__1::allocator<android::sp<android::compositionengine::LayerFE> > >&)+276)
01-11 11:51:46.866 12577 12577 D destroyLayer: #08 pc 00000000001ed948  /system/bin/surfaceflinger (android::compositionengine::impl::Output::prepare(android::compositionengine::CompositionRefreshArgs const&, std::__1::unordered_set<android::sp<android::compositionengine::LayerFE>, android::compositionengine::LayerFESpHash, std::__1::equal_to<android::sp<android::compositionengine::LayerFE> >, std::__1::allocator<android::sp<android::compositionengine::LayerFE> > >&)+56)
01-11 11:51:46.866 12577 12577 D destroyLayer: #09 pc 00000000001e5c88  /system/bin/surfaceflinger (android::compositionengine::impl::CompositionEngine::present(android::compositionengine::CompositionRefreshArgs&)+120)
01-11 11:51:46.866 12577 12577 D destroyLayer: #10 pc 00000000001a7828  /system/bin/surfaceflinger (android::SurfaceFlinger::composite(long, long)+1628)
01-11 11:51:46.866 12577 12577 D destroyLayer: #11 pc 0000000000183fb0  /system/bin/surfaceflinger (android::impl::MessageQueue::Handler::handleMessage(android::Message const&)+116)
01-11 11:51:46.866 12577 12577 D destroyLayer: #12 pc 0000000000017500  /system/lib64/libutils.so (android::Looper::pollInner(int)+376)
01-11 11:51:46.866 12577 12577 D destroyLayer: #13 pc 0000000000017328  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112)
01-11 11:51:46.866 12577 12577 D destroyLayer: #14 pc 000000000018462c  /system/bin/surfaceflinger (android::impl::MessageQueue::waitMessage()+84)
01-11 11:51:46.866 12577 12577 D destroyLayer: #15 pc 000000000018cbec  /system/bin/surfaceflinger (android::scheduler::Scheduler::run()+28)
01-11 11:51:46.866 12577 12577 D destroyLayer: #16 pc 00000000001e5640  /system/bin/surfaceflinger (main+1992)
01-11 11:51:46.866 12577 12577 D destroyLayer: #17 pc 000000000004a1f4  /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+96)

堆栈打印出来就很明显啦,那就是在

        mCurrentOutputLayersOrderedByZ = std::move(mPendingOutputLayersOrderedByZ);

赋值时候就会导致mCurrentOutputLayersOrderedByZ析构,从而一系列的析构方法回调

更多framework干货请关注“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值