首页 > 编程知识 正文

ngssquirrel工具用来做什么,性能之巅 网络性能分析

时间:2023-05-03 18:31:26 阅读:18731 作者:1771

Systrace介绍,Systrace是安卓平台提供的工具,是记录短期设施活动的工具。 此工具可生成Android内核中数据的摘要报告,包括CPU调度程序、磁盘活动和APP应用程序线程。 此报告有助于您了解如何最佳地提高APP应用程序和游戏性能。

Systrace工具用于显示整个设备正在做什么,但也可以用于标识APP应用程序中的纸箱。 Systrace的开销非常小,因此在打桩测试中可以体验实际的纸箱状况。

Systrace报表示例:

此报告显示了Android设备在一段时间内的系统进程的总体情况,检查捕获的跟踪信息,并突出显示观察到的问题(如接口纸箱和高功耗)。

使用Systrace要使用Systrace分析性能,必须首先找到Systrace工具,然后使用该工具生成. html报告文件。

使用命令行捕获Systreace报告文件的systrace命令systrace命令调用systrace工具以收集和检查设备上系统级运行的所有进程的时间信息

systrace命令是Python脚本,需要做以下准备:

安卓studio将下载并安装最新的安卓SDK工具。 安装Python并将其添加到工作站的运行路径中(请注意,此处需要Python版本2.7 )。 使用USB调试连接将Android4.3(API级)或更高版本的设备连接到开发系统。 可以在Android-SDK/platform-tools/systrace /中的AndroidSDK工具包中使用systrace命令。

例如,sstrace在作者电脑上的位置为/users/apple/library/Android/SDK/platform-tools/systrace。

要为命令语法APP应用程序生成HTML报告,必须使用以下语法从命令行运行systrace :

python systrace.py [ options ] [ categories ]命令和命令选项

示例1:python./systrace.py-t5-omynewtrace.htmlmynewtrace.html是最终产物。 5表示捕获5s的数据。 示例2:python systrace.py-omynewtrace.htmlschedfreqidleamwmgfxviewbinder _ driverhaldalvikcamerainputresmynewtrace.hhhond

提示:要在跟踪输出中显示任务名称,必须将sched类别添加到命令参数中。

要查看连接的设备支持的类别列表命令,请执行以下步骤:

python systrace.py---- list-categories示例:

打开系统报告上述操作将生成HTML文件。 使用chrome浏览器,可以通过在地址栏中输入chrome://tracing/来查看报告。

界面如下(点击Load按钮加载HTML文件即可)。

显示报表元素Systrace将生成包含多个部分的输出HTML文件。 此报告列出了每个进程的线程。 如果特定线程渲染接口帧,则报告还会沿时间轴显示渲染的帧。 如果在报告中从左向右移动,时间将前进。

报告从上到下包括以下部分:

用户交互的第一部分包含一个条形图,表示APP应用程序或游戏中的特定用户交互,如单击设备屏幕。 这些交互可以用作有用的时间戳。

CPU活动的下一部分显示一个条形图,表示每个CPU中的线程活动。 这些栏列出所有APP应用程序(包括APP应用程序和游戏)的CPU活动。

可以展开CPU的活动部分。 展开后,可以确认各CPU的时钟频率。 图1显示了存储在图1中的CPU的活动部分的示例,图2显示了时钟频率展开后的版本。

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

需要仔细检查的直方图是标记为SurfaceView的直方图。 计数指示传递给显示管道并等待在设备屏幕上显示的复合帧缓冲区的数量。 由于大多数设备执行双重或三重缓冲,因此该计数几乎总是0、1或2。

绘制Surface Flinger进程的附加直方图,包括VSync事件和接口线程交换活动,如图所示。

显示框架上画着多色的线,后面排列着很多条。 这些形状表示所创建的特定线程的状态和帧堆栈。 的每个级别都表示beginSection ),或为APP应用程序或游戏定义的自定义跟踪事件的开始。

每个条带顶部的多色线条表示特定线程的一组时间变化状态。 每条直线可以包含以下颜色之一:

绿色:正在执行

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

蓝色:可运行

虽然线程可以执行

目前未进行调度。

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

橙色:不可中断的休眠
线程在遇到 I/O 操作时被阻止或正在等待磁盘操作完成。

紫色:可中断的休眠
线程在遇到另一项内核操作(通常是内存管理)时被阻止。

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

键盘快捷键

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

使用工具帮助定位性能问题

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

通过在时间间隔周围绘制一个矩形来选择所需的时间间隔。使用标尺工具标记或突出显示问题区域。依次点击 View Options > Highlight VSync,以显示每项显示屏刷新操作。如果觉得页面中的信息太多了,想要筛选,可以点击Processes菜单,在弹出列表中进行筛选。
检查界面帧和提醒

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

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

如果所示,选择有问题的帧后,跟踪报告下方会显示一条提醒,用于指明问题所在。

选择运行速度慢的帧后,您可能会在报告的底部窗格中看到一条提醒。

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

Systrace的扩展使用

Systrace(系统跟踪)仅在系统级别显示进程的相关信息,这样导致有时很难知道APP的哪些方法是在给定时间针对系统事件执行的。

例如,我们在解决卡顿问题,当查看系统跟踪信息输出后,你可能会怀疑应用中的某些方法是导致卡顿的因素。例如,如果时间轴显示某个帧的呈现速度较慢是因为 RecyclerView 花费很长时间导致的,这时我们需要更多的信息来进行判断。

如何做呢?

我们可以在相关代码中添加跟踪标记(定义自定义事件),然后重新运行 systrace 以获取更多信息。在新的系统跟踪信息中,时间轴会显示应用中的方法的调用时间和执行时长。

定义自定义事件

Android 平台提供了一个跟踪 API,可用于为特定的代码段添加标签。如果您捕获应用的“调试”版本的新系统跟踪并添加 -a 选项(如以下代码段所示),这些自定义事件便会显示在 Systrace 报告中:

python systrace.py -a com.example.myapp -b 16384 -o my_systrace_report.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

必须提供 -a 选项才能跟踪应用;如果没有此选项,应用的方法将不会显示在 Systrace 报告中。

注意:该方法与使用 Debug 类不同,后者可帮助您通过生成 .trace 文件来检查应用 CPU 的详细使用情况。

代码中添加

在 Android 4.3(API 级别 18)及更高版本中,我们可以在代码中使用 Trace 类来定义随后会出现在 Perfetto 和 Systrace 报告中的自定义事件,如以下代码段所示。

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Trace.beginSection("MyAdapter.onCreateViewHolder"); MyViewHolder myViewHolder; try { myViewHolder = MyViewHolder.newInstance(parent); } finally { // In try and catch statements, always call "endSection()" in a // "finally" block. That way, the method is invoked even when an // exception occurs. Trace.endSection(); } return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Trace.beginSection("MyAdapter.onBindViewHolder"); try { try { Trace.beginSection("MyAdapter.queryDatabase"); RowItem rowItem = queryDatabase(position); dataset.add(rowItem); } finally { Trace.endSection(); } holder.bind(dataset.get(position)); } finally { Trace.endSection(); } } }

注意:如果多次调用 beginSection(),调用 endSection() 只会结束最后调用的 beginSection() 方法。因此,对于嵌套调用(如以下代码段中所示),请务必将每次对 beginSection() 的调用与一次对 endSection() 的调用正确匹配。

此外,我们不能在一个线程上调用 beginSection(),而在另一个线程上结束它;而是必须在同一个线程上调用这两个方法。

总结

通过本文学习了:

性能分析工具Systrace的介绍。Systrace报告文件如何进行采集。如何使用工具来查看Systrace报告文件。如何使用Systrace来分析性能问题。Systrace工具的使用及使用技巧。如何添加和使用自定义事件。

PS:性能优化专栏:《Android性能》持续更新中……

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。