Web开发

注册

 

发新话题 回复该主题

百度AppAndroid启动性能优化工 [复制链接]

1#
北京哪治疗白癜风不复发 http://pf.39.net/bdfyy/bjzkbdfyy/

一、前言

启动性能是APP的极为重要的一环,启动阶段出现卡顿、黑屏问题,会影响用户体验,导致用户流失。百度APP在一些比较低端的机器上也有类似启动性能问题,为保留存,需要对启动流程做深入优化。现有的性能工具,无法高效的发现、定位性能问题,归因分析和防劣化成本很高,需要对现有工具进行二次开发,提升效率。

1.1工具选型

做好性能优化,不仅需要趁手的工具,而且对工具的要求还很高,具体来说,必需满足要求:

高性能,保证自身高性能,以防带偏优化方向多维度,能监控多维度信息,帮助全面发现问题易用性,方便的可视化界面,方便分析

目前业界主流的APP性能探测工具有TraceView、CPUProfiler、Systrace、Perfetto。

Perfetto提供了强大的Trace分析模块:TraceProcessor,可以把多种类型的日志文件(Androidsystrace、Perfetto、linuxftrace)通过解析、提取其中的数据,结构化为SQLite数据库,并且提供基于SQL查询的PythonAPI,可通过python实现自动化分析;同时有良好的可视化页面,可通过可视化页面查看火焰图和写SQL进行Trace分析。

从性能、监控维度的丰富程度和提供的配套的分析和可视化工具来选择,Perfetto是最好的选择,但前期由于Perfetto是9.0以后默认内置服务但是默认不可用,Android11服务才默认可用,对低版本系统支持不够,所以我们选择了Systrace+Perfetto工具结合,可覆盖所有Android系统。随着Perfetto持续迭代,增加了对低版本Android系统支持,百度APP也全面切换到了Perfetto为基础采集和分析性能工具。

1.2二次开发

Trace采集

Perfetto收集App的Trace是通过Android系统的atrace收集,需要自己手动添加Trace收集代码,添加Trace采集方式如下:

Java/Kotlin:提供了android.os.Trace类,通过在方法开始和结束点成对添加Trace.beginSection和Trace.endSection;NDK:通过引入trace.h,通过ATrace_beginSection()/Atrace_endSection()添加Trace;Android系统进程:提供了ATRACE_*宏添加Trace,定义在libcutils/trace.h;

在AndroidFramework和虚拟机内部会默认添加一些关键Trace,APP层需要手动添加,监控APP启动流程,有海量的方法,手动添加耗时耗力。百度APP大部分逻辑都是Java/Kotlin编写,Java/Kotlin代码会编译成字节码,在编译期间,可通过gradletransform修改字节码,我们需要开发一套自动插桩的gradle插件,在编译时自动添加APP层Trace收集代码,实现监控APP层所有方法。

防劣化

随着优化持续上线,对性能指标会有一定的正向收益,但是随着版本持续迭代,会有各种劣化问题,为保住优化成果,我们在线下每个版本发布之前都需要做真机启动性能测试,测试流程:

打包:需要打出自动插桩的包,需要一个基准包(上次发布版本的release分支的插桩包)和一个测试包(master分支的插桩包),用来做真机测试。

真机测试:用基准包和测试包手动跑启动相关case,启动PerfettoTrace抓取脚本,抓取Trace日志,会输出基准包Trace日志和测试包Trace日志,用作对比分析。

对比分析:Trace日志通过

分享 转发
TOP
发新话题 回复该主题