Android性能优化–Systrace工具(1)

本文详细介绍了Systrace工具,一种用于快速记录Android设备活动的平台工具,它结合内核数据帮助开发者诊断和优化应用性能,包括CPU调度、磁盘活动和UI线程问题。文章还指导了如何获取和分析Systrace报告,以及如何使用各种命令参数定制报告内容。
摘要由CSDN通过智能技术生成

========

Systrace是一个平台提供的工具,可以在很短的时间内记录设备活动。该工具生成一个报告,该报告结合了Android内核中的数据,例如CPU调度程序,磁盘活动和应用程序线程。报告可帮助您确定如何最好地改善应用或游戏的性能。

chrome查看trace报告

报告提供了Android设备在给定时间段内的系统进程的总体情况。该报告还检查捕获的跟踪信息,以突出显示它所观察到的问题,例如UI jank或高功耗。

通过sdk自带的脚本工具获取想要的报告,报告只能用Chrome浏览器分析查看

获取Systrace报告文件

==============

使用sdk的工具生成报告文件

工具:/sdk/platform-tools/systrace

![](https://img-blog.csdnimg.cn/20200301031839545.png)

systrace脚本工具

可以通过设定脚本参数得到自己想要的报告内容

通过命令查看连接设备所支持的类型列表

python systrace.py --list-categories

可以看到可以分析的模块十分全面从硬件到软件、从底层到上层app、从view到渲染引擎基本全覆盖,配合上Profiler、MAT、hprof-conv、Hierarchy view、OverDraw工具可谓是一剑在手天下我有

image.png

获取报告的命令参数

./systrace.py -h

| Commands | options | 描述 |

| — | — | — |

| -h | –help | 显示帮助信息 |

| -l | –list-categories | 列出所连接设备可用的跟踪类别 |

| -o | file | 将HTML跟踪报告写入指定的文件。如果未指定此选项,systrace请将报告保存到与其相同的目录中并为其命名。 systrace.pytrace.html |

| -t N | –time=N | 跟踪设备活动N秒。如果未指定此选项,则systrace提示您通过从命令行按Enter键来结束跟踪。 |

| -b N | –buf-size=N | 使用N千字节的跟踪缓冲区大小。此选项允许您限制跟踪期间收集的数据的总大小。 |

| -k functions | –ktrace=functions | 跟踪以逗号分隔的列表中指定的特定内核函数的活动。 |

| -a app-name | –app=app-name | 启用应用程序的跟踪,指定为以逗号分隔的进程名称列表 。应用程序必须包含来自Trace类的跟踪检测调用 。每当您分析应用程序库时,都应指定此选项,例如 RecyclerView,包括跟踪检测调用,这些调用在启用应用程序级跟踪时提供有用信息。有关更多信息,请转到有关如何检测应用程序代码的部分。 |

| –from | -file=file-path | 从文件创建交互式HTML报告,例如包含原始跟踪数据的TXT文件,而不是运行实时跟踪。 |

| -e device-serial | –serial=device-serial | 在特定连接设备上进行跟踪 |

| categories |   | 包括您指定的系统进程的跟踪信息,例如gfx用于呈现图形的系统进程。您可以systrace使用该-l命令运行以查看所连接设备可用的服务列表。 |

| –walt | WALT trace options | 测量手机和计算机上物理传感器和输出的延迟 |

获取报告

无时间限制,需要enter键开始

./systrace.py -o trace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

加时间参数

./systrace.py -o trace.html -t 12 sched freq idle am wm gfx view binder_driver hal dalvik camera input res

完成后使用chrome打开得到的文件即可

获取报告的命令执行,file路径为报告文件路径

Android9以上版本也可以通过开发者模式获取

次方式不推荐使用

打开系统跟踪

开启记录

停止记录

分享记录文件

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

cd / path-to-traces-on-my-dev-machine && \

systrace –from-file trace-file-name .ctrace

但是需要systrace命令行程序

报告分析

====

Systrace生成包含一系列部分的输出HTML文件。该报告列出了每个进程的线程。如果给定线程呈现UI帧,则报告还指示沿时间线的呈现帧。当在报告中从左向右移动时,时间会向前传递。

报告从上到下包含以下部分

  • UI交互活动

第一部分包含表示应用或游戏中特定用户交互的条形图,例如点击设备屏幕。这些相互作用充当有用的时间标记

UI交互活动

  • CPU活动

显示了表示每个CPU中的线程活动的条形图。条形图显示所有应用程序(包括您的应用程序或游戏)的CPU活动。

折叠的CPU活动部分的示例

折叠图

CPU活动部分是可扩展的,允许您查看每个CPU的时钟频率

CPU活动(展开视图),显示Systrace报告中的CPU时钟频率

  • 系统事件

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

系统级事件

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

描述Surface Flinger过程的其他直方图,包括VSync事件和UI线程交换工作,如下图

Systrace报告中的Surface Flinger示例图

  • 显示框架

显示框架

这一部分,通常是报告中最多的部分,描绘了一条彩色线条,后面是成堆的条形图。这些形状表示已创建的特定线程的状态和帧堆栈。

UI线程或应用程序或游戏通常运行的主线程始终显示为第一个线程。

帧堆栈信息

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

绿色:Running

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

蓝色:Runnable

线程可以运行但当前没有安排。

白色:Sleeping

线程没有工作要做,可能是因为线程在互斥锁上被阻塞。

橙色:Uninterruptable sleep(不间断的睡眠)

线程在I / O上被阻塞或等待磁盘操作完成。

紫色:Interruptable sleep(可以中断睡眠)

线程在另一个内核操作(通常是内存管理)上被阻塞。

  • 报告分析操作快捷键

| key | 描述 |

| — | — |

| W | 放大时间轴 |

| A | 在跟踪时间线上左移 |

| S | 缩小时间轴 |

| D | 在跟踪时间轴上向右平移 |

| E | 将跟踪时间轴置于当前鼠标位置的中心 |

| M | 选中当前帧 |

| 1 | 将当前活动的选择模型更改为“选择”模式。对应于鼠标选择器工具栏中显示的第一个按钮 |

| 2 | 将当前活动的选择模型更改为“平移”模式。对应于鼠标选择器工具栏中显示的第二个按钮 |

| 3 | 将当前活动的选择模型更改为“缩放”模式。对应于鼠标选择器工具栏中显示的第3个按钮 |

| 4 | 将当前活动的选择模型更改为“计时”模式。对应于鼠标选择器工具栏中显示的第4个按钮 |

| G | 在当前所选任务的开头显示网格 |

| Shift + G | 在当前所选任务的末尾显示网格 |

| 左键 | 在当前选定的时间轴上选择上一个事件 |

| 右键 | 选择当前所选时间轴上的下一个事件 |

自定义systrace数据获取

===============

以上数据默认仅在系统级别向显示有关进程的信息,因此有时很难知道应用程序或游戏的哪些方法在给定时间相对于系统事件执行。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

总而言之,成功是留给准备好的人的。无论是参加什么面试,都要做好充足的准备,注意好面试的礼仪和穿着,向面试官表现出自己的热忱与真诚就好。即使最后没有过关,也要做好经验的总结,为下一次面试做好充足准备。

这里我为大家准备了一些我在面试后整理的面试专题资料,除了面试题,还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家,希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

毕竟不管遇到什么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

么样的面试官,去面试首先最主要的就是自己的实力,只要实力够硬,技术够强,就不怕面试拿不到offer!

[外链图片转存中…(img-tB5v1ocr-1712229328900)]

[外链图片转存中…(img-dBAFN516-1712229328900)]

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

[外链图片转存中…(img-St5Zxzke-1712229328901)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值