美文网首页
AB7和CB7 ARSticker切换资源与拍视频性能分析

AB7和CB7 ARSticker切换资源与拍视频性能分析

作者: azmohan | 来源:发表于2019-05-06 21:26 被阅读0次

背景

CB7手机Camera的ARSticker模式,切换资源、预览、拍视频比AB7手机慢与卡。需要分析原因。并拆分性能瓶颈点。

手机信息

手机代号 CPU 版本 GPU 版本
AB7 MT6765V 4xCortex-A53 2.3Ghz 4xCortex-A53 1.8Ghz IMG GE8320 680Mhz
CB7 MT6761V 4xCortex-A53 2.0Ghz IMG GE8320 660Mhz

通过CPU和GPU的对比,CPU相差很大,GPU相差不大,切换资源和预览卡,都是和GPU相关的,应该不会有很大的差别。

systrace分析预览卡顿

cb7_draw整体图.jpg ab7_draw整体图.jpg

具体耗时:


cb7性能点.jpg

从上面的图,可以看出,性能点不在GPU,CB7和AB7 GPU画图,相差不大

真正的差异:
  1. 关键点检测(Contending for pthread mutex)等锁
  2. 频繁的触发GC.

关于第1点,CB7手机 cpu的性能确实差好多,第2点,CB7手机内存是3GB的,AB7是6GB的,也是差了好多。现在最重要的问题是,这两点哪个对此性能影响最大?

确定2点的影响率

对比测试,找了一台X625B的手机,内存是3GB,MT6762平台,GPU和61平台的差不多,CPU是8核的。systrace如下:

x625b整体图1.jpg x625b整体图2.png

从上图看:只有CPU的差异的时候,onDrawFrame快一倍,一个平均70ms,一个平均30ms.说明这个性能瓶颈就是和CPU正相关的。在仔细看GC的触发频率,3G内存的平台是一样的,都是500ms一次,这是GC的正常触发机制。可以排除内存不是此性能瓶颈的因素,CPU就是此性能的关键因素

初步解决方案

CPU的性能瓶颈是硬伤,可以通过优化算法提升速度,主要的算法是关键点检测,但是这个比较难,需要第三方优化。我们想到方案是缩小用于检测yuv数据,可以提升速度,理论依据:

  • yuv数据量小,相机吐数据的速度快
  • yuv数据量小,用于检测关键点检索次数也小,速度会快

目前测试640x480的yuv数据传给第三方,发现三方引擎会卡死,三方目前表示不支持。正在push三方支持。

切换资源慢

由于切换ARSticker资源是应用自己调用的接口,没有添加Trace.beginSection和Trace.endSection,所以systrace是没有相关信息的。看了代码如果添加trace,和加log的效果一样,所以确定加log分析。

把加载资源分解如下:
  1. 从Asset中读取资源文件,可以体现IO性能
  2. 三方解释资源接口
  3. 资源上传GPU.
Log如下:

01-02 21:14:33.878 23623 24931 E CamAp_ARMode: azmohan start load
01-02 21:14:33.878 23623 24931 I CamAp_ARMode: azmohan read Assets io begin
01-02 21:14:33.923 23623 24931 E CamAp_ARMode: azmohan read data size = 1778464
01-02 21:14:33.923 23623 24931 E CamAp_ARMode: azmohan read Assets io end, spent time : 45 ms
01-02 21:14:33.923 23623 24931 I CamAp_ARMode: azmohan invoke fuCreateItemFromPackage begin
01-02 21:14:36.239 23623 24931 I CamAp_ARMode: azmohan invoke fuCreateItemFromPackage end,spent time : 2300 ms
01-02 21:14:36.271 23623 24931 E CamAp_ARMode: azmohan notify GPU load resource,mEffectItem = 1
01-02 21:14:36.271 23623 24931 E CamAp_ARMode: azmohan end load,spent time : 2345 ms
01-02 21:14:36.275 23623 23648 I CamAp_ARMode: azmohan GPU load resource begin
01-02 21:14:36.275 23623 23648 I CamAp_ARMode: azmohan GPU load resource end,spent time : 0 ms

主要是第三方接口 faceunity.fuCreateItemFromPackage(itemData)太耗时,需要2.3s,要push三方解决

cpu性能

我们这边测试enablePlugin,设置false,可以节省30%的CPU,测试drawFrame平均耗时40ms,比70ms有很大提升,并且接近30帧(33ms)的要求

总结

主要性能瓶颈在cpu,目前解决方案:
  1. 关掉enablePlugin,可以提升cpu性能,已验证。但是就没有了美颜效果
  2. 传入较小的yuv数据用于关键点检测,三方还要调整接口,未验证
资源切换的性能瓶颈在三方fuCreateItemFromPackage接口,需要push三方解决.

相关文章

网友评论

      本文标题:AB7和CB7 ARSticker切换资源与拍视频性能分析

      本文链接:https://www.haomeiwen.com/subject/dfddoqtx.html