(两百五十)学习systrace

学习

https://developer.android.google.cn/studio/profile/systrace#frames

https://source.android.google.cn/devices/tech/debug/systrace

https://developer.android.google.cn/studio/profile/systrace/navigate-report

 

1.简介

Systrace 是平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。这份报告可帮助您了解如何以最佳方式改善应用或游戏的性能。

图 1 中显示了 Systrace 报告示例:

Systrace 报告的屏幕截图

图 1. Systrace HTML 报告示例,显示了与某个应用的 5 秒交互情况

 

这份报告提供了 Android 设备在给定时间段内的系统进程的总体情况,还会检查所捕获的跟踪信息,以突出显示它所观察到的问题(例如界面卡顿或耗电量高)。

注意:Systrace 工具不会收集有关应用进程中代码执行情况的信息。要详细了解您的应用正在执行哪些方法及其耗用了多少 CPU 资源,请使用 Android Studio 中的 CPU Profiler。您还可以使用 CPU Profiler 生成跟踪日志,然后导入并检查这些日志。

 

2.使用方式

2.1 命令行

https://developer.android.google.cn/studio/profile/systrace/command-line

systrace 命令在 Android SDK Tools 工具包中提供,位于 android-sdk/platform-tools/systrace/

$ python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
        binder_driver hal dalvik camera input res

试了下不支持python3.7,需要特意换成2.7版本,工具比较老

全局选项

全局选项说明
-h | --help显示帮助消息。
-l | --list-categories列出您的已连接设备可用的跟踪类别。

命令和命令选项

命令和选项说明
-o file将 HTML 跟踪报告写入指定的文件。如果您未指定此选项,systrace 会将报告保存到 systrace.py 所在的目录中,并将其命名为 trace.html
-t N | --time=N跟踪设备活动 N 秒。如果您未指定此选项,则 systrace 会提示您通过从命令行按 Enter 键来结束跟踪。
-b N | --buf-size=N使用 N KB 的跟踪缓冲区大小。使用此选项,您可以限制跟踪期间收集到的数据的总大小。
-k functions
| --ktrace=functions
跟踪逗号分隔列表中指定的特定内核函数的活动。
-a app-name
| --app=app-name
启用对应用的跟踪,指定为包含进程名称的逗号分隔列表。应用必须包含 Trace 类中的跟踪检测调用。您应在分析应用时指定此选项。很多库(例如 RecyclerView)都包括跟踪检测调用,这些调用可在您启用应用级跟踪时提供有用的信息。如需了解详情,请转到有关介绍检测应用代码的部分。
--from-file=file-path根据文件(例如包含原始跟踪数据的 TXT 文件)创建互动式 HTML 报告,而不是运行实时跟踪。
-e device-serial
| --serial=device-serial
在已连接的特定设备(由对应的设备序列号标识)上进行跟踪。
categories包含您指定的系统进程的跟踪信息,如 gfx 表示用于渲染图形的系统进程。您可以使用 -l 命令运行 systrace,以查看已连接设备可用的服务列表。

本地windows执行有点问题,之前在ubuntu下执行是好的

C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace>C:\Python27\python systrace.py -o .\test\mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res
Traceback (most recent call last):
  File "systrace.py", line 48, in <module>
    from systrace import run_systrace
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\systrace\systrace\run_systrace.py", line 41, in <module>
    from devil import devil_env
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\systrace\systrace\..\..\devil\devil\devil_env.py", line 32, in <module>
    import dependency_manager  # pylint: disable=import-error
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\dependency_manager\dependency_manager\__init__.py", line 29, in <module>
    from .archive_info import ArchiveInfo
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\dependency_manager\dependency_manager\archive_info.py", line 9, in <module>
    from dependency_manager import exceptions
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\dependency_manager\dependency_manager\exceptions.py", line 5, in <module>
    from py_utils import cloud_storage
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\common\py_utils\py_utils\cloud_storage.py", line 22, in <module>
    from py_utils import lock
  File "C:\Users\83535\AppData\Local\Android\Sdk\platform-tools\systrace\catapult\common\py_utils\py_utils\lock.py", line 20, in <module>
    import win32con
ImportError: No module named win32con

 

2.2 开发者选项

https://developer.android.google.cn/studio/profile/systrace/on-device

  • 启用开发者选项(如果尚未启用此选项)。
  • 打开开发者选项设置屏幕。
  • 调试部分中,选择系统跟踪。此时会打开“系统跟踪”应用,其中显示了应用菜单。
  • 在应用菜单中,启用显示“快捷设置”图块,如图 2 所示。系统会将系统跟踪图块图块添加到快捷设置面板中,如图 1 所示:

导出trace

cd /path-to-traces-on-my-dev-machine && \
      adb pull /data/local/traces/ .

通过消息或通过 ADB 共享跟踪记录时,报告本身位于 .ctrace 文件中。您可以使用此文件生成跟踪记录的 HTML 报告。为此,请在终端窗口中运行以下命令:

    cd /path-to-traces-on-my-dev-machine && \
      systrace --from-file trace-file-name.ctrace

如果您还没有 systrace 命令行程序,可以从 GitHub 上的 Catapult 项目下载它,也可以直接从 Android 开源项目下载

本地试了下导出的文件名叫做trace-raphael-QKQ1.190825.002-2020-05-16-21-58-47.perfetto-trace

之前接触过现在不是只能以html形式打开systrace了,还有个叫做perfetto的工具。

https://ui.perfetto.dev/#!/

打开界面是这样的

 

3.查看

典型报告的元素

Systrace 会生成包含多个部分的输出 HTML 文件。该报告列出了每个进程的线程。如果给定线程会渲染界面帧,该报告还会沿时间轴指明所渲染的帧。当您在报告中从左向右移动时,时间会向前推移。

报告从上到下包含以下几个部分。

用户互动

第一部分包含表示应用或游戏中的具体用户互动(例如点按设备屏幕)的条形图。这些互动可用作有用的时间标记。

这个没看到

CPU 活动

下一部分显示了表示每个 CPU 中的线程活动的条形图。这些条形会显示所有应用(包括您的应用或游戏)中的 CPU 活动。

CPU 活动部分可以展开,展开后您就可以查看每个 CPU 的时钟频率。图 1 展示了一个收起后的 CPU 活动部分示例,图 2 展示了显示时钟频率的展开后版本:

参考网站图加载不出来,吐了

自己抓的trace可以看到settings跑在哪个核上,在cpu4上跑了会,又跑到cpu5上了,说明一个进程不是绑定在一个核上的。

 

系统事件

此部分中的直方图会显示特定的系统级事件,例如特定对象的纹理计数和总大小。

值得仔细检查的直方图是标记为 SurfaceView 的直方图。计数表示已传递到显示管道并等待显示在设备屏幕上的组合帧缓冲区的数量。由于大多数设备都会进行双重或三重缓冲,因此该计数几乎总为 0、1 或 2。

描绘 Surface Flinger 进程(包括 VSync 事件和界面线程交换工作)的其他直方图,如图 3 所示:

待探究

 

显示帧

这一部分通常是报告中最顶部的部分,描绘了一条多色线条,后面是成堆的条形。这些形状表示已创建的特定线程的状态和帧堆栈。堆栈的每个层级代表对 beginSection() 的调用,或您为应用或游戏定义的自定义跟踪事件的开头。

注意:界面线程(即通常运行您的应用或游戏的主线程)始终会显示为第一个线程。

每个条形堆上方的多色线条表示特定线程随时间变化的一组状态。每段线条可以包含以下颜色之一:

绿色:正在运行

线程正在完成与某个进程相关的工作或正在响应中断。

蓝色:可运行

线程可以运行但目前未进行调度。

白色:休眠

线程没有可执行的任务,可能是因为线程在遇到斥锁定时被阻止。

橙色:不可中断的休眠

线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。

紫色:可中断的休眠

线程在遇到另一项内核操作(通常是内存管理)时被阻止。

注意:在 Systrace 报告中,您可以点击该线条以确定该线程在给定时间由哪个 CPU 控制。

可以看到如下图的UI线程是跑在cpu 3上的

 

键盘快捷键

下表列出了查看 Systrace 报告时可以使用的键盘快捷键:

说明
W放大跟踪时间轴。
A在跟踪时间轴上向左平移。
S缩小跟踪时间轴。
D在跟踪时间轴上向右平移。
E以当前鼠标位置为中定位跟踪时间轴。
M高亮当前选区。

 

调查性能问题

与 Systrace 报告互动时,您可以检查记录期间的设备 CPU 使用情况。如需浏览 HTML 报告方面的帮助,请查看键盘快捷键部分,或点击报告右上角的 ? 按钮。

以下各部分介绍了如何检查报告中的信息以查找和修复性能问题。

识别性能问题

浏览 Systrace 报告时,您可以通过执行以下一项或多项操作来更轻松地识别性能问题:

  • 通过在时间间隔周围绘制一个矩形来选择所需的时间间隔。
  • 使用标尺工具标记或突出显示问题区域。
  • 依次点击 View Options > Highlight VSync,以显示每项显示屏刷新操作。

检查界面帧和提醒

注意:本节中的内容只面向托管式代码,因为 Systrace 是通过查看系统基于 Java 的 Choreographer 来提供帧信息。如需面向原生代码(特别是游戏)的指导,请参阅关于帧速率一致性的讨论。

如图 4 所示,Systrace 报告列出了渲染界面帧的每个进程,并指明了沿时间轴渲染的每个帧。在 16.6 毫秒内渲染的必须保持每秒 60 帧稳定帧速率的帧会以绿色圆圈表示。渲染时间超过 16.6 毫秒的帧会以黄色或红色圆圈表示。

注意:在搭载 Android 5.0(API 级别 21)或更高版本的设备上,渲染帧的工作拆分为界面线程和渲染线程。在以前的版本中,创建帧的所有工作都是在界面线程中完成的。

点击某个帧圆圈可将其突出显示,并提供有关系统为渲染该帧所做工作的其他信息,包括提醒。此报告还会显示系统在渲染该帧时执行的方法。您可以调查这些方法以确定界面卡顿的可能原因。

如下图所示可以看到两个线程,UI和RenderThread

选择运行速度慢的帧后,您可能会在报告的底部窗格中看到一条提醒。图 5 中显示的提醒会指明帧的主要问题是在 ListView 回收和重新绑定上花费了太多时间。指向跟踪记录中相关事件的链接可详细说明系统在此期间执行的操作。

要查看此工具在您的跟踪记录中发现的每条提醒以及设备触发每条提醒的次数,请点击窗口最右侧的 Alerts 标签,如图 6 所示。Alerts 面板可帮助您了解跟踪记录中出现的问题以及这些问题导致出现卡顿的频率。您可以将此面板视为要修正的错误列表。通常情况下,只需对一个区域进行细微改动或改进即可移除整组提醒。

 

如果您发现在界面线程上执行的工作太多,请使用以下方法之一来帮助确定哪些方法占用了过多的 CPU 时间:

  • 如果您想了解哪些方法可能会导致瓶颈,请在这些方法中添加跟踪标记。要了解详情,请参阅有关如何在代码中定义自定义事件的指南。
  • 如果您不确定界面瓶颈的来源,请使用 Android Studio 中提供的 CPU Profiler。您可以生成跟踪日志,然后使用 CPU Profiler 导入和检查这些日志。

这边官方文档缺了很多图,自己补充了些,看了不是很明白。。。

待后续补充

 

相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP注意不是CSDN APP哦 </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页