libpag icon indicating copy to clipboard operation
libpag copied to clipboard

Android平台 PAGDecoder.readFrame 崩溃

Open deng81416754 opened this issue 1 year ago • 5 comments

【版本信息】

4.4.25

【平台信息】

Android 原生 Android 14 (SDK 34)

机型:samsung a14 系统芯片:Samsung Exynos 850

Image

【预期的表现】

【实际的情况】

google play 捕获到了崩溃

"tgfx_JNIEnvironment" tid=232 Native
  #00  pc 0x000000000008ec1c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
  #01  pc 0x00000000000935cc  /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex+144)
  #02  pc 0x00000000000a08ec  /apex/com.android.runtime/lib64/bionic/libc.so (sem_wait+108)
  #03  pc 0x000000000180f63c  /vendor/lib64/egl/libGLES_mali.so (cframep_context_inc_used_resources+36)
  #04  pc 0x00000000008779ec  /vendor/lib64/egl/libGLES_mali.so (gles_fb_gen_framebuffers+172)
  #05  pc 0x0000000000867964  /vendor/lib64/egl/libGLES_mali.so (glGenFramebuffers+56)
  #06  pc 0x000000000025f314  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #07  pc 0x00000000002d3808  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #08  pc 0x00000000002da3c4  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #09  pc 0x00000000001ce744  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #10  pc 0x00000000001cce70  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #11  pc 0x00000000002de864  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #12  pc 0x0000000000159f54  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGSurface::draw+576) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #13  pc 0x000000000015837c  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGPlayer::flushInternal+160) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #14  pc 0x00000000001582a0  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGPlayer::flush+88) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #15  pc 0x000000000014e7b8  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #16  pc 0x00000000001559b4  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::renderFrame+176) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #17  pc 0x0000000000155494  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::readFrameInternal+600) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #18  pc 0x000000000015569c  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::readFrame+96) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #19  pc 0x00000000001bbe18  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (Java_org_libpag_PAGDecoder_readFrame+112) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  at org.libpag.PAGDecoder.readFrame (Native method)
  at org.libpag.c$a.a (SourceFile:3)
  at org.libpag.PAGImageView.a (SourceFile:86)
  at org.libpag.PAGImageView.flush (SourceFile:12)
  at org.libpag.PAGImageView.onAnimationUpdate (SourceFile:7)
  at org.libpag.PAGAnimator.onAnimationUpdate (SourceFile:3)

"tgfx_JNIEnvironment" tid=233 Native
  #00  pc 0x000000000008ec1c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
  #01  pc 0x00000000000935cc  /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex+144)
  #02  pc 0x00000000000a08ec  /apex/com.android.runtime/lib64/bionic/libc.so (sem_wait+108)
  #03  pc 0x000000000180f63c  /vendor/lib64/egl/libGLES_mali.so (cframep_context_inc_used_resources+36)
  #04  pc 0x00000000008779ec  /vendor/lib64/egl/libGLES_mali.so (gles_fb_gen_framebuffers+172)
  #05  pc 0x0000000000867964  /vendor/lib64/egl/libGLES_mali.so (glGenFramebuffers+56)
  #06  pc 0x000000000025f314  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #07  pc 0x00000000002d3808  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #08  pc 0x00000000002da3c4  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #09  pc 0x00000000001ce744  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #10  pc 0x00000000001cce70  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #11  pc 0x00000000002de864  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #12  pc 0x0000000000159f54  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGSurface::draw+576) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #13  pc 0x000000000015837c  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGPlayer::flushInternal+160) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #14  pc 0x00000000001582a0  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGPlayer::flush+88) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #15  pc 0x000000000014e7b8  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #16  pc 0x00000000001559b4  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::renderFrame+176) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #17  pc 0x0000000000155494  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::readFrameInternal+600) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #18  pc 0x000000000015569c  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (pag::PAGDecoder::readFrame+96) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  #19  pc 0x00000000001bbe18  /data/app/~~xkQFTxbOkS_0Toq7xcH07w==/com.voicechat.whistr-RYsNbVfxvy8NLOFLsGunkA==/split_config.arm64_v8a.apk (Java_org_libpag_PAGDecoder_readFrame+112) (BuildId: 78e1594ce961af15582a273cc2f02b665aa03b5d)
  at org.libpag.PAGDecoder.readFrame (Native method)
  at org.libpag.c$a.a (SourceFile:3)
  at org.libpag.PAGImageView.a (SourceFile:86)
  at org.libpag.PAGImageView.flush (SourceFile:12)
  at org.libpag.PAGImageView.onAnimationUpdate (SourceFile:7)
  at org.libpag.PAGAnimator.onAnimationUpdate (SourceFile:3)

【Demo及附件】

stacktrace.log

deng81416754 avatar Feb 26 '25 11:02 deng81416754

怎么说?没有动静?

lianyagang avatar Apr 14 '25 07:04 lianyagang

怎么说?没有动静?

你也遇到了吗

deng81416754 avatar Apr 14 '25 07:04 deng81416754

怎么说?没有动静?

你也遇到了吗

线上一堆,都拍ANR第二位了~~~~~好家伙,完全不知道为什么

lianyagang avatar Apr 14 '25 07:04 lianyagang

PAG 频繁设置setPath,引发的decoderInfo 被持有锁导致的anr,解决方案。是如果path相同,不再设置了。释放资源出来。林北找到原因了

lianyagang avatar Apr 14 '25 14:04 lianyagang

protected void initDecoderInfo() { synchronized (decoderInfo) { if (!decoderInfo.isValid()) { if (_composition == null) { _composition = getCompositionFromPath(_pagFilePath); } if (decoderInfo.initDecoder(_composition, width, height, _maxFrameRate)) { if (_pagFilePath != null) { _composition = null; } } if (!decoderInfo.isValid()) { return; } } refreshMatrixFromScaleMode(); freezeDraw.set(false); } }

`public boolean flush() { if (!decoderInfo.isValid()) { initDecoderInfo(); if (!decoderInfo.isValid()) { postInvalidate(); return false; } } if (decoderInfo.hasPAGDecoder()) { _numFrames = decoderInfo.numFrames(); } _currentFrame = PAGImageViewHelper.ProgressToFrame(animator.progress(), _numFrames); if (!handleFrame(_currentFrame)) { forceFlush = false; return false; }

forceFlush = false;
postInvalidate();
return true;

}`

lianyagang avatar Apr 14 '25 14:04 lianyagang