硬件加速hardwareAccelerated和旋转监听器OrientationEventListener引发的RenderThread崩溃

现象

Native层崩溃:

F/DEBUG   ( 9546): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
F/DEBUG   ( 9546): Build fingerprint: 'Xiaomi/venus/venus:12/SKQ1.211006.001/V13.0.5.0.SKBCNXM:user/release-keys'
F/DEBUG   ( 9546): Revision: '0'
F/DEBUG   ( 9546): ABI: 'arm64'
F/DEBUG   ( 9546): Timestamp: 2022-03-28 11:24:19.745921800+0800
F/DEBUG   ( 9546): Process uptime: 0s
F/DEBUG   ( 9546): Cmdline: com.xxx.xxx
F/DEBUG   ( 9546): pid: 28654, tid: 28782, name: RenderThread  >>> com.xxx.xxx <<<
F/DEBUG   ( 9546): uid: 10372
F/DEBUG   ( 9546): signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
F/DEBUG   ( 9546): Abort message: 'exiting due to SIG_DFL handler for signal 11'
F/DEBUG   ( 9546):     x0  0000000000000000  x1  000000000000706e  x2  0000000000000006  x3  00000074ad49ec60
F/DEBUG   ( 9546):     x4  0000000080808080  x5  0000000080808080  x6  0000000080808080  x7  8080808080808080
F/DEBUG   ( 9546):     x8  00000000000000f0  x9  04a0bbe8354a4d5b  x10 0000000000000000  x11 ffffff80fffffbdf
F/DEBUG   ( 9546):     x12 0000000000000001  x13 00001493d1d15bbe  x14 0022da5e804d9ad2  x15 0000000000000028
F/DEBUG   ( 9546):     x16 00000074a57d6d30  x17 00000074a57b0650  x18 0000007352600000  x19 0000000000006fee
F/DEBUG   ( 9546):     x20 000000000000706e  x21 00000000ffffffff  x22 00000074ad49ee48  x23 00000074ad7f2708
F/DEBUG   ( 9546):     x24 0000000000000040  x25 00000073527f6000  x26 000000000000000b  x27 00000074ad7f2328
F/DEBUG   ( 9546):     x28 0000000000000000  x29 00000074ad49ece0
F/DEBUG   ( 9546):     lr  00000074a57609fc  sp  00000074ad49ec40  pc  00000074a5760a28  pst 0000000000001000
F/DEBUG   ( 9546): backtrace:
F/DEBUG   ( 9546):       #00 pc 000000000008aa28  /apex/com.android.runtime/lib64/bionic/libc.so (abort+168) (BuildId: 94065bf91428f6ae9fb310c478171302)
F/DEBUG   ( 9546):       #01 pc 0000000000002540  /apex/com.android.art/lib64/libsigchain.so (art::SignalChain::Handler(int, siginfo*, void*)+1184) (BuildId: 161c53f67386ada92922750b03eafb01)
F/DEBUG   ( 9546):       #02 pc 00000000000005c0  [vdso] (__kernel_rt_sigreturn+0)
F/DEBUG   ( 9546):       #03 pc 000000000000eddc  /system/lib64/libutils.so (android::RefBase::incStrong(void const*) const+8) (BuildId: 16796d84bdcf185b2112267dbd820c19)
F/DEBUG   ( 9546):       #04 pc 000000000012f62c  /system/lib64/libandroid_runtime.so (android::nativeSetFlags(_JNIEnv*, _jclass*, long, long, int, int)+88) (BuildId: a5083b66961fff465289f8b6e4a455bd)
F/DEBUG   ( 9546):       #05 pc 00000000001983f8  /system/framework/arm64/boot-framework.oat (art_jni_trampoline+120) (BuildId: 68ab7b2bce89e5f1bca3dd69f3bdb76d49ddc9ea)
F/DEBUG   ( 9546):       #06 pc 00000000006f1b88  /system/framework/arm64/boot-framework.oat (android.view.SurfaceControl$Transaction.hide+200) (BuildId: 68ab7b2bce89e5f1bca3dd69f3bdb76d49ddc9ea)
F/DEBUG   ( 9546):       #07 pc 0000000000212520  /apex/com.android.art/lib64/libart.so (nterp_helper+4016) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #08 pc 000000000033105a  /system/framework/framework.jar
F/DEBUG   ( 9546):       #09 pc 0000000000393074  /system/framework/arm64/boot-framework.oat (android.graphics.RenderNode$CompositePositionUpdateListener.positionLost+116) (BuildId: 68ab7b2bce89e5f1bca3dd69f3bdb76d49ddc9ea)
F/DEBUG   ( 9546):       #10 pc 0000000000218964  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #11 pc 0000000000285ff0  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+192) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #12 pc 000000000062e394  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+472) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #13 pc 000000000062e53c  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+96) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #14 pc 000000000047d8ac  /apex/com.android.art/lib64/libart.so (art::JNI<false>::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+624) (BuildId: fe3937ecd54810f2c0342e5633a5d7a7)
F/DEBUG   ( 9546):       #15 pc 0000000000497424  /system/lib64/libhwui.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+124) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #16 pc 000000000049ce38  /system/lib64/libhwui.so (_ZZN7androidL46android_view_RenderNode_requestPositionUpdatesEP7_JNIEnvP8_jobjectlS3_EN26PositionListenerTrampoline14onPositionLostERNS_10uirenderer10RenderNodeEPKNS5_8TreeInfoE$e08e5be7d6b9d462d36dec99da9de1de+200) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #17 pc 00000000003f84a4  /system/lib64/libhwui.so (android::uirenderer::RenderNode::deleteDisplayList(android::uirenderer::TreeObserver&, android::uirenderer::TreeInfo*)+356) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #18 pc 00000000003f82b0  /system/lib64/libhwui.so (android::uirenderer::RenderNode::destroyHardwareResources(android::uirenderer::TreeInfo*)+96) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #19 pc 000000000020abc4  /system/lib64/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer10RenderNode17deleteDisplayListERNS3_12TreeObserverEPNS3_8TreeInfoEE3$_4NS_9allocatorIS9_EEFvPS4_EEclEOSC_$e57263280ae2783a7a89a2e0f9451ccb+80) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #20 pc 00000000003f84a4  /system/lib64/libhwui.so (android::uirenderer::RenderNode::deleteDisplayList(android::uirenderer::TreeObserver&, android::uirenderer::TreeInfo*)+356) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #21 pc 00000000003f82b0  /system/lib64/libhwui.so (android::uirenderer::RenderNode::destroyHardwareResources(android::uirenderer::TreeInfo*)+96) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #22 pc 00000000003d6114  /system/lib64/libhwui.so (android::uirenderer::MarkAndSweepRemoved::~MarkAndSweepRemoved()+300) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #23 pc 00000000003d5f60  /system/lib64/libhwui.so (android::uirenderer::RenderNode::prepareTree(android::uirenderer::TreeInfo&)+172) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #24 pc 00000000004dc594  /system/lib64/libhwui.so (android::uirenderer::RootRenderNode::prepareTree(android::uirenderer::TreeInfo&)+180) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #25 pc 00000000003c0ea4  /system/lib64/libhwui.so (android::uirenderer::renderthread::CanvasContext::prepareTree(android::uirenderer::TreeInfo&, long*, long, android::uirenderer::RenderNode*)+340) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #26 pc 00000000003c0464  /system/lib64/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c1671e787f244890c877724752face20+420) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #27 pc 00000000003d4914  /system/lib64/libhwui.so (android::uirenderer::WorkQueue::process()+160) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #28 pc 00000000003d4674  /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+88) (BuildId: 2e2637f133ef8150686ad4819553cb73)
F/DEBUG   ( 9546):       #29 pc 000000000001358c  /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+264) (BuildId: 16796d84bdcf185b2112267dbd820c19)
F/DEBUG   ( 9546):       #30 pc 0000000000012de8  /system/lib64/libutils.so (thread_data_t::trampoline(thread_data_t const*)+408) (BuildId: 16796d84bdcf185b2112267dbd820c19)
F/DEBUG   ( 9546):       #31 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+264) (BuildId: 94065bf91428f6ae9fb310c478171302)
F/DEBUG   ( 9546):       #32 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 94065bf91428f6ae9fb310c478171302)

不是必现,但是几率有的,越是性能好的手机越是出,每次都是一样的backtrace。

解决方案

考虑到是RenderThread,首先关闭硬件加速,确实有效,但不是最终解决方案。

通过长时间的尝试,发现在屏幕旋转的时候出。于是发现有使用OrientationEventListener#enable()和OrientationEventListener#disable(),删除后问题解决。

思考

OrientationEventListener和硬件加速为何使RenderThread崩溃尚不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值