Creator3.2.0 Android上 Renderer的渲染时间变长!

  • Creator 版本: 3.2.0

  • 目标平台: Android

  • 首个报错: Android 启动运行
    2021-07-21 18:59:50.102 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘spine|sprite-vs:vert|sprite-fs:frag’ compilation succeeded.
    2021-07-21 18:59:50.107 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘…/Blur|sprite-vs:vert|sprite-fs:frag|USE_TEXTURE1’ compilation succeeded.
    2021-07-21 18:59:50.122 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘planar-shadow|planar-shadow-vs:vert|planar-shadow-fs:frag’ compilation succeeded.
    2021-07-21 18:59:50.125 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘planar-shadow|planar-shadow-vs:vert|planar-shadow-fs:frag|USE_INSTANCING1’ compilation succeeded.
    2021-07-21 18:59:50.131 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘skybox|sky-vs:vert|sky-fs:frag’ compilation succeeded.
    2021-07-21 18:59:50.137 20821-20897/com.cocos.android I/Cocos: 18:59:50 [INFO]: Shader ‘deferred-lighting|lighting-vs|lighting-fs|CC_USE_FOG4’ compilation succeeded.
    2021-07-21 18:59:51.030 20821-20871/com.cocos.android W/libEGL: EGLNativeWindowType 0x701135e010 disconnect failed
    2021-07-21 18:59:51.031 20821-20871/com.cocos.android D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
    2021-07-21 18:59:51.040 20821-20821/com.cocos.android I/ViewRootImpl: jank_removeInvalidNode all the node in jank list is out of time
    2021-07-21 18:59:51.048 20821-20821/com.cocos.android V/ActivityThread: Skipping handle non-activity callbacks for app:com.cocos.android
    2021-07-21 19:00:43.448 20821-20859/com.cocos.android I/m.cocos.androi: Starting profile saver IsSaveProfileNow end.

  • 之前哪个版本是正常的: 2.4.x是正常的

  • 编辑器操作系统:Mac

  • 重现概率: 必现

相同的代码,在web端浏览器里跑,Render才1ms,打包到Android 140ms多

下面是Android上跑的效果


代码Demo在下面
testAndroidES.zip (19.4 KB)

我主要是想做一个全局的特效,通过Camera 的targetTexture实现,
主要实现代码在EffectBlurMask.ts文件里。
看Android日志,有一句
com.cocos.android W/libEGL: EGLNativeWindowType 0x701135e010 disconnect failed

@jare @jjyinkailejj @panda
求引擎组大佬们帮忙看下! :kissing_smiling_eyes:

插下眼
刚刚试了下,Creator3.2.1 Android上渲染这套代码一样卡
@jare @jjyinkailejj @panda

已经建 issue 跟进了。

@wstcok2003 你是用什么设备测试的,系统版本信息也麻烦给一下。

3.3 版本继续优化性能,用 3.3 版本测试结果是:

  • p40 60 帧,rendering time 12 ms
  • 小米8: 32 帧,rendering time 28 ms

荣耀 COR-AL10
Android9

这个 demo 里有两个问题:

  • 两个 camera 的 priority 设反了,数字越小越先画,应该先画 RT,现在的顺序是先画 back buffer,相当于每帧都是在采样上一帧(这个对性能影响最严重,在移动端直接就多了两次全屏 load 操作)
  • RT 上的 sprite 只需要画一次,它们的 layer 应该和 RT camera 的 visibility 对应,并和主 camera visibility 不同,现在是在两个 camera 都各画了一次(这个对于简单场景倒是性能影响不大)

修改后的 scene 文件可以参考一下:

scene.zip (3.3 KB)

至于 web 和原生端性能差别较大,这点大概率是 ANGLE 后端自行做了优化,而我们原生段只是相对简单直接的封装,建议还是以修复明显问题后的性能测试为准。

2赞

用了你的方法,替换里文件,打包到apk,在android上跑依然很卡,到达renderer 达到192
不过非常感谢您的讲解,让我对camera有了更清晰的认识