前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让体验更流畅,探索应用性能优化之软件绘制

让体验更流畅,探索应用性能优化之软件绘制

作者头像
软件绿色联盟
发布2022-03-31 15:15:42
4680
发布2022-03-31 15:15:42
举报

对用户来说,使用应用时最希望得到流畅不卡顿的使用体验。而引起卡顿的影响因素有很多,比如:图像绘制、应用启动、页面跳转和事件响应等。软件绿色联盟联合华为终端实验室,对大量应用卡顿现象进行了分析、总结,希望能够为应用开发者提供性能优化建议,共同打造更好的使用体验。

我们将以专题文章的形式对这些影响因素逐个分析,本文将重点分享软件绘制存在的问题及优化方案。

1. 绘制原理

Android绘制View有三个主要的步骤,分别是measure、layout和draw。通过Measure和Layout来确定当前需要绘制的View所在的大小和位置,通过Draw绘制到surface。绘制过程主要是由CPU 来进行Measure、Layout、Record、Execute的数据计算,GPU进行Rasterization(栅格化)、渲染操作。

如果渲染过程中,不使用硬件加速,我们称之为软件绘制,如果使用硬件加速,则称为硬件绘制。简单来说,区分软件绘制还是硬件绘制,主要看systrace日志中draw方法实际是由CPU还是GPU完成的(有没有RenderThread线程参与)。

由于draw方法会涉及非常多的屏幕像素点对应的单元计算,而且重复工作较多,因此,软件绘制会比硬件绘制效率低很多,有时候很多draw对应的计算无法在一帧(60hz屏幕刷新频率对应16.7ms,90hz屏幕刷新频率对应11.1ms)内完成,就会引起丢帧从而带来界面滑动不流畅的使用体验。针对软件绘制问题进行优化,可以有效提升应用性能表现和用户体验。

2. 软件绘制相关问题测试流程

2.1 测试环境

手机型号:mate30 8+128g

系统版本:Android 10.0

屏幕刷新率:60hz

测试范围:

2.2 测试步骤

1)应用安装后启动,完成授权;

2)分别在各应用多个页面滑动,基于人眼主观流畅性体验,针对抓取不流畅页面对应的systrace、applog日志;

3)根据systrace日志,分析不流畅界面丢帧情况;

4)判断出现软件绘制问题的方法:

参考上述表格,有3种方法可以同时用来确认:

  • systrace对应的应用只有UI Thread:
  • systrace对应的应用存在BuildDrawingCache方法:
  • applog会有“enableHardwareAccelerationfalse”打印:

在log中搜索“enableHardwareAcceleration”关键字即可,如果值为false,就是软件绘制:

01-2316:16:38.085 22775 22775 D ViewRootImpl[ZongHeFenLeiListActivity]: enableHardwareAcceleration false

2.3 测试结果

我们发现,上述8款应用的不流畅场景下,图像绘制均采用软件绘制的方式,测试滑动帧率都低于60帧,部分应用甚至低于30帧,卡顿感明显。经华为终端开放实验测试发现,上述应用已在新版本优化该问题,用户可及时更新版本获取更好的使用体验。

3. 软件绘制问题分析

软件绘制在新处理器平台手机上导致应用卡顿问题较多,很多应用甚至主界面都会出现卡顿。这是由于应用在早期设计时,为了兼容低端手机硬件平台性能,默认采用软件绘制方式进行图像绘制。而随着芯片平台的不断发展,大多数应用场景不会再受到手机的性能限制。

而导致软件绘制效率差的原因,主要有有3点,我们可以针对性的进行改进:

  • UI线程中多次的内存复制,每次绘制时,图片解码后,skia绘制时要复制到bitmap格式的缓存,再进行OpenGL绘制到帧Buffer时,要从Bitmap中上传纹理到GPU。
  • 尤其是显示长图,图片的尺寸和大小一般较大,内存的拷贝负载较大,因此会造成绘制时间相对较长。
  • 滑动时,视图会发生变化,因此每次skia生成的bitmap都不同,GPU无法使用缓存的纹理。如果是硬加速,一次将图片纹理上传,后面直接使用缓存的纹理,效率更高。

4. 软件绘制问题优化建议

最理想的情况是全程使用硬件绘制,但还需要避免可能会存在的一些兼容性问题。如何既保证硬件绘制减轻UI线程的负载,又能让getDrawingCache得到需要的图片缓存,是解决这个问题的关键。

当前流畅性体验问题已经远比兼容性问题更加严峻,而软件绘制和硬件绘制的绘制效率差距将近4-5倍,我们建议应用开发者后续默认使用硬件绘制(开启硬件加速),尤其是主界面、列表显示图片较多、图片尺寸较大的场景,优先硬件绘制;对于一些图片尺寸较小、界面滑动不是关键操作路径时,可以考虑软件绘制。

· END ·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件绿色联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 绘制原理
  • 2. 软件绘制相关问题测试流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档