ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

systrace

2022-04-29 15:05:15  阅读:153  来源: 互联网

标签:systrace Systrace 渲染 UI Android 卡顿


一、SysTrace简介

Systrace是android性能调试优化的常用工具,它可以收集进程的活动信息,如界面布局、UI渲染、binder通信等;也可以收集内核信息,如cpu调度、IO活动、中断等;这些信息会统一时间轴,在Chrome浏览器中显示出来,非常方便工程师性能调试、优化卡顿等工作。

Systrace允许你监视和跟踪Android系统的行为(trace)。它会告诉你系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至你可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供给你建议的解决方案。但是不能确定具体有问题的代码在哪里,这里可用用traceview工具。在Android平台中,Systrace主要由3部分组成:   
内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的话,必须开启kernel中和ftrace相关的模块。   
数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。   
数据分析工具:Android提供一个systrace.py(python脚本文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。 从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace.

Systrace 允许你收集和检查设备上运行的所有进程的计时信息。 它包括Androidkernel的一些数据(例如CPU调度程序,IO和APP Thread),并且会生成HTML报告,方便用户查看分析trace内容。 如果想分析Android系统或者某个app的卡顿性能或者渲染问题,这时候Systrace 就非常有用。
首先我们需要抓取Systrace文件,然后分析并找出引起系统卡顿,或者app反应慢的原因,最好在源码上解决引起卡顿、响应慢的问题。

二、使用命令行抓取 Systrace

1. 使用命令行抓取Systrace的准备工作

抓取systrace之前,请完成以下步骤:

  1. 下载并安装Android SDK Tools
  2. 安装Python ,并将其包含在系统环境变量的path中。
  3. 连接手机,打开开发者选项中的USB Debug选项 。
  4. 查找Systrace脚本,存储路径如下:android-sdk/platform-tools/systrace/

2. 使用命令行抓取 Systrace的语法

使用命令行抓取 Systrace的语法如下:
python systrace.py [options] [categories]

3. 使用命令行抓取 Systrace举例

例如,以下命令调用systrace10秒钟内记录设备进程,包括图形进程,并生成一个名为mynewtraceHTML报告:

python systrace.py --time=10 -o mynewtrace.html gfx

如果不指定任何类别或选项,systrace将生成包含所有可用类别的报告,并使用默认设置。 可用的类别取决于您使用的连接设备。



三、使用Systrace 检测UI 性能

systrace对于检查应用程序的UI性能特别有用,因为它可以分析您的代码和帧速率,进而识别问题区域,同时提供可工参考的解决方案。

使用Systrace 检测UI 性能

首先,按照以下步骤进行操作:

  1. 连接手机并运行您的app
  2. 使用以下命令运行systrace:
    python systrace.py view --time = 10
  3. 操作您的应用 10秒后,systrace生成一个HTML报告。
  4. 使用网络浏览器打开HTML报告。

使用Chrome 打开生成的trace 文件,检测记录期间设备CPU使用情况,丢帧情况,卡顿耗时情况等等。

四、使用Systrace 检测卡顿丢帧问题

如下Systrace报告列出了每个进程呈现UI frame,并显示沿着时间线的每个渲染帧。 在绿色框架圆圈中,是指在16.6ms内呈现每秒稳定60帧。 花费16.6ms以上渲染的帧用黄色红色圆圈表示

UI渲染帧率查看

在运行Android 5.0(API级别21)或更高版本的设备上, UI 渲染的工作主要由UI ThreadRenderThread两个线程完成。 在之前的版本中,创建渲染框架的所有工作都是在UI Thread上完成的。

点击一个F圆圈,它可以提供系统为渲染该frame 完成所包含的工作信息,包括警报,丢帧,建议等。
同时它还向您展示了在渲染该frame时系统正在执行的方法,因此您可以调查这些方法是否导致UI jank

点击黄色或红色帧按钮,会分析提示此帧卡顿的信息

选择黄色的frame后,您可能会在报告的底部窗格中看到如上提示信息。
上图中显示的Alert , 主要问题是在ListView回收和重新bind中花费了太多的时间。 trace中有相关事件的链接,点击可以获取更多关于系统在这段时间内正在做什么的事情。

要查看Systrace中发现的每个Alert以及设备触发Alert的次数,请单击窗口最右侧的Alerts选项卡,如下图所示。
Alerts面板可帮助您查看发生了哪些问题,以及发生的频率。 将Alert面板看作是要修复的错误列表, 通常情况下,一个区域的微小变化或改进就可以消除应用程序中的全部Alert。

    Alert 分析面板     Frame Input File Metrics Alerts 等面板

如果你的代码在UI Thread上做太多的工作,你需要找出哪些方法消耗了太多的CPU时间
一种方法是添加systrace(请参阅检测应用代码)到您认为会导致这些卡顿或者导致慢的方法地方,然后查看这些函数调用是否显示在systrace中。 如果您不确定哪些方法可能会在UI线程上造成卡顿,请使用Android Studio的内置CPU Profiler,或者生成跟踪日志并使用Traceview查看它们。



参考链接
https://www.jianshu.com/p/75aa88d1b575

https://www.jianshu.com/p/0090d1428714

https://www.sohu.com/a/404342135_467784

https://blog.csdn.net/vicwudi/article/details/100191529

标签:systrace,Systrace,渲染,UI,Android,卡顿
来源: https://www.cnblogs.com/ArsenalfanInECNU/p/15667873.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有