弹幕场景密集渲染在安卓平台卡顿的问题咨询 #642
-
大佬好,最近基于tgfx去做了一套弹幕,在之前的讨论里沟通了下,之前提到鸿蒙底层线程调度的缺陷,导致小核任务很慢,所以通过提供的API set(TGFX_USE_THREADS OFF),关闭底层多线程,demo基本流畅。最近在做安卓平台的适配,用的surfaceview,发现无论TGFX_USE_THREADS打开与关闭都很卡顿,比鸿蒙上效果差很多,demo进行了安卓适配,测出来也很卡。Tgfx是刚更新的代码,想咨询下大佬是用的不规范,还是说需要额外的能力开发,比如说已经试过
目前用了华为P10 一加ACE2 PRO测过 都不行 很卡 ,surfaceview 应该比提供的demo里TextureView效果要好 ,但也卡帧,下面是测试的demo ,tgfx 版本是6月11号的 |
Beta Was this translation helpful? Give feedback.
Replies: 7 comments 36 replies
-
你稍等一下,下周应该文字图集相关的功能就上线了,到时候更新一下最新代码再测试一下,文本渲染相关性能应该会有大幅的提升。如果还有问题在那个基础上我们再继续排查。 |
Beta Was this translation helpful? Give feedback.
-
@yuerolling 在原帖下回复太长了都折叠了不方便阅读,我们都开新的回复吧。关于Android TextureView帧率不稳定会抖动的问题可以参考这个文章:https://zhuanlan.zhihu.com/p/147322501 核心应该是因为你开启了异步渲染,然后有的帧渲染太快了,反而可能一帧上屏了两次导致有一帧没显示出来。这个确实是Android系统的设计问题。可以参考下这篇文章的分析过程看看有没有绕过的方法。 1.你把EGLDevice里的VSYNC禁用的代码注释掉就流畅了是麽?那要确认一下你上层的帧刷新回调是从哪来的?用了ValueAnimator吗?理论上用了那个应该就已经是和VSYNC同步的了。如果你已经用了ValueAnimator,还是出现不流畅的问题。能否帮忙录制两个对比视频我们确认一下,就是EGLDevice上注释掉那句话和不注释分别跑一下。如果确认是这个表现。那可能Android上还是要强制开VSYNC的我们就移除这行代码。 2.这个Bug @richardshan0614 还在排查中,是BUG我们都会解决掉的。 文字相关的我们还会持续优化,你提的场景一次draw 10个文字肯定是快于分别draw的。但是理论上差距没有特别明显。因为我们这块和Skia的机制不一样,Skia的每次draw都会创建实际的Op,然后再判断能否合并,合并之后再销毁Op。这样就平白多了特别多的计算。我们内部的处理是先加到pending列表,无法继续合并之后最终才创建一个Op,没有任何冗余的计算。但建议是能合并的尽量合并,多次draw额外的开销主要是各种bounds检查。批量计算一次bounds然后判断是否相交会稍微少点计算量。 |
Beta Was this translation helpful? Give feedback.
-
@domchen 好的大佬 ,本身用TextureView 或者SurfaceView这个异步渲染肯定是要的,我一会去研究下你推荐的那个方案 关于流畅的问题,我参考你的建议以及我之前的回调分别用下面两种方式 Choreographer.getInstance().postFrameCallback 和ValueAnimator,核心代码如下:
我结合资料简单跟了下valueAnimator 的源码,其实它底层也是通过AnimationHandler调用的 Choreographer.getInstance().postFrameCallback能力,不过可能做了插帧,补帧操作,我测试了三种方案
下面是我分别对应的方案1,2,3的视频,考虑网络的问题,我这里基本各自切了10秒左右,大佬可以下下来,用播放器看看,网页看的话,可能网页回裁帧,都比较卡,另外这里视频只是参考,其中视频一种的卡顿因为卡的比较随机,卡的频率也未知,所以实际效果可能更差 |
Beta Was this translation helpful? Give feedback.
-
@yuerolling 1.现在默认已经启用了vsync。 2.字形错乱问题,我在小米 13 确实容易复现,在小米 12 上没有复现问题。我还在排查,问题修复后会及时同步。 |
Beta Was this translation helpful? Give feedback.
-
@richardshan0614 如果有一加手机的话 可以试试 一加,我在一加上很容易复现,特别是开启缓存image的方案 更容易出现 |
Beta Was this translation helpful? Give feedback.
-
@richardshan0614 我pull 的今天的代码 试了几次 确实ok 了,现在字基本OK了,等大佬有较大的性能提示 我再进一步 测试,关于字体路径的问题 ,有什么好的 参考意见么,就是如下的代码 static const std::string FallbackFontFileNames[] = {"/system/fonts/NotoSansCJK-Regular.ttc", |
Beta Was this translation helpful? Give feedback.
-
@domchen @richardshan0614 现在文字基本满足需求 ,近期可能考虑 上线文字渲染相关的,不知道能否提供一个tag版本 |
Beta Was this translation helpful? Give feedback.
@yuerolling .字形错乱问题已经解决 更新代码试试