Code Monkey home page Code Monkey logo

Comments (9)

kevingpqi123 avatar kevingpqi123 commented on June 26, 2024

关于 ANR 问题:
1、首先要明确一个问题,不是所有的 pag 文件的性能都是一样的,如果遇到性能的问题,首先是排查素材,如果素材很复杂,首先去优化素材而不是其它的,如果素材很简单出现了卡顿,那才需要去排查是否是使用问题

业界没有可以兼容所有复杂素材的动效渲染方案,根本的解决办法就是分机型下发素材,不要期望复杂素材(含有 BMP 预合成的素材)可以在所有机型上没有卡顿问题

对于 pag sdk,可以这么理解,本来这些动效是自己需要代码实现的,性能本质上和动效的复杂度强相关,现在 pag sdk 将这些动效实现封装成了 SDK

2、使用层面,pag 内部已经做了多线程相关的处理,只有一个场景需要注意,避免播放的过程中去直接销毁,销毁的操作在主线程,但异步渲染需要主环境的 surface ,因此这里存在等待,需要注意的就是这一个点,这是使用中最普遍的问题

3、如果你们实现功能的时候很蹩脚或者耗费了很多精力,这种实现方案大概率都不是最优的,这种场景我们没有办法覆盖,只能说你们遇到了这类问题确定方案的时候最好事先咨询下
根据目前的对接情况:
问题1 占比 60%、问题2 占比 30%,问题3 占比 10%

如果不涉及全屏播放、文本编辑、占位图替换和实色图层修改颜色,PAGView 可以切换至 PAGImageView,PAGImageView 支持缓存渲染结果,可以大幅降低概率(但不能从根本解决,首次渲染的时候仍有可能出现)。

from libpag.

peter100u avatar peter100u commented on June 26, 2024

我们的产品线上也是大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源,而且海外机型也特别复杂,能否提供一个方案,解析pag资源遇到性能问题,能提供警告日志回调,业务方可以针对资源优化呢

from libpag.

peter100u avatar peter100u commented on June 26, 2024

看到您说的第二种情况, “只有一个场景需要注意,避免播放的过程中去直接销毁”,我看到我们业务有一种情况,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊的点在于: pagviewListener的onAnimationCancel回调的时候,也重新获取下个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这里的 onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁的意思呢

from libpag.

kevingpqi123 avatar kevingpqi123 commented on June 26, 2024

我们的产品线上也是大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源,而且海外机型也特别复杂,能否提供一个方案,解析pag资源遇到性能问题,能提供警告日志回调,业务方可以针对资源优化呢

pag 官网上面的文档建议系统阅读下,可以避免很多问题,我们提供了桌面预览工具,可以定性去查看一些素材的性能:
https://pag.art/docs/profiler.html
如果桌面端预览性能栏有红色,在中低端机上大概率会出现卡顿
https://pag.art/docs/optimization.html
还有严格控制 BMP 预合成的数量,这些都是和性能强相关

from libpag.

kevingpqi123 avatar kevingpqi123 commented on June 26, 2024

看到您说的第二种情况, “只有一个场景需要注意,避免播放的过程中去直接销毁”,我看到我们业务有一种情况,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊的点在于: pagviewListener的onAnimationCancel回调的时候,也重新获取下个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这里的 onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁的意思呢

如果是多个 pag 文件顺序播放,可以了解下 pag 的组合模式,自己创建一个 PAGComposition,然后将多个 pag 文件添加进来,通过 setStartTime 可以设置相对于主时间轴的开始时间,使用一个 PAGView 就可以实现你这边的需求,而且不需要你提到的那些设置,pag 支持多个原子素材的自由组合,具体用法可以参考下 pag 的官方 demo,性能肯定比你现在的方案要好很多

from libpag.

AtomHong avatar AtomHong commented on June 26, 2024

非常感谢回复

from libpag.

peter100u avatar peter100u commented on June 26, 2024

看到您说的第二种情况, “一个场景需要注意,避免播放但去销毁”,我们见到的业务都是这样。 情况是,我们的礼物数据是一个队列,播放完成后再获取一个新的资源,每次播放完都会设置重新设置pAGView.visibility = View.GONE,然后重新加载资源,特殊点在于: pagviewListener的onAnimationCancel函数的时候,也重新获取下一个资源同时设置 pAGView.visibility = View.GONE,再次加载, 这个onAnimationCancel是否就是异常情况,pAGView.visibility = View.GONE就是销毁

如果是多个 pag 文件顺序播放,可以了解下 pag 的组合模式,自己创建一个 PAGComposition,然后将多个 pag 文件添加进来,通过 setStartTime 可以设置相对于主时间轴的开始时间,使用一个 PAGView 就可以实现你这边需要的,而且不需要你提到的那些设置,pag 支持多个原子素材的自由组合,具体用法可以参考下 pag 的官方演示,性能肯定比你现在的方案要好很多

感谢回复,现在的业务逻辑太复杂了,礼物队列的维护逻辑太多了,变化太多了,您这个方案,改动起来风险太大了

from libpag.

peter100u avatar peter100u commented on June 26, 2024

@kevingpqi123 您好, 希望给提供其他方案或者定位问题,

  1. 大量的org.libpag.PAGAnimator.finalize() timed out after 10 seconds,但是线上pag资源多大上千个资源, 无法手动排除资源问题;
  2. 不能使用多个 PAGComposition,然后将多个 pag 文件添加进来,因为礼物具备优先级各种逻辑,不是顺序播放,
  3. pAGView.visibility = View.GONE是否就是销毁pagview呢
    希望能提供一些建议,线上org.libpag.PAGAnimator.finalize() timed out after 10 seconds实在太多了

from libpag.

YauLam avatar YauLam commented on June 26, 2024

"避免播放的过程中去直接销毁",这个销毁指的是freeCache,还是removPAGView,亦或是其他什么呢

from libpag.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.