精华内容
下载资源
问答
  • systrace-systrace

    2020-12-15 10:34:06
    Android手机抓取systrace工具
  • 用实例非常详细的systrace使用方法技巧,对于cpu分片,surfaceflinger,application,sync,binder,anim等做了详细的讲解
  • Systrace

    2020-10-26 16:02:40
    Systrace 是Android4.1中新增的性能数据采样和分析工具,它可帮助开发者收集Android关键子系统 如SurfaceFlinger、WindowManagerService等Framework部分关键模块、服务、View系统等 Google IO 2017上更是对其各种...

    因为最近用的比较多,专

    一、 Systrace

    Systrace 是Android4.1中新增的性能数据采样和分析工具,它可帮助开发者收集Android关键子系统

    如SurfaceFlinger、WindowManagerService等Framework部分关键模块、服务、View系统等

    Google IO 2017上更是对其各种强推。Systrace其实和TraceView很像,都是统计一些方法(或者是一个执行阶段)的耗时,然后在一个有时间轴的图表上展示出来。不同的是,TraceView是收集所有方法的耗时信息和嵌套关系,这使得TraceView本身的性能消耗很大,反而影响了实际的运行环境。Systrace则采用了不同的思路,通过有限的Label先粗略统计出一个阶段的耗时,定位到问题以后,在慢慢细化和进一步测算分析。

    监视和跟踪Android系统的行为:

    1.CPU周期都用在哪里

    2.每个线程、进程在指定时间内都在干嘛。

    3.功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等

    4. 会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供给你建议的解决方案。

    它主要由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。

    常用标签

    不论是DDMS还是命令行,都可以在启动trace前指定采集哪些系统预置的标签。下面把一些常用的标签类别列举如下:

    • Graphics: Graphic系统的相关信息,包括SerfaceFlinger,VSYNC消息,Texture,RenderThread等;分析卡顿非常有效。
    • Input:
    • View System: View绘制系统的相关信息,比如onMeasure,onLayout等;对分析卡顿比较有帮助。
    • Window Manager:
    • Activity Manager: ActivityManager调用的相关信息;用来分析Activity的启动过程比较有效。
    • Application:
    • Resource Loading:
    • Dalvik VM: 虚拟机相关信息,比如GC停顿等。
    • CPU Scheduling: CPU调度的信息;你能看到CPU在每个时间段在运行什么线程;线程调度情况,比如锁信息。

     

    二、使用和分析

    2.1 Device Monitor by selecting Tools > Android > Monitor.

    这里写图片描述

    每次抓取前,最好清理一下

    2.2 绿色、黄色、红色来区分当前界面的性能等级分别是优、良、差。当遇到红色的时候肯定当前的性能需要优化。

    抓取的Trace报告提供了Android系统进程在特定时间段内的整体情况。 例如在显示Activity或动画时卡顿,Systrace会提供关于如何解决这些问题的建议。
    但是,systrace不会在应用程序进程中收集有关代码执行的信息

    在运行Android 5.0(API级别21)或更高版本的设备上, UI 渲染的工作主要由UI ThreadRenderThread两个线程完成。

    在之前的版本中,创建渲染框架的所有工作都是在UI Thread上完成的。

    找到分析进程对应的ui线程,线程的纵向信息记录的是调用关系,横向信息记录的是调用顺序

    obtainView ---> inflate--- Te

     

    三、添加 tag 分析

    从Android 4.3( 18)开始,使用Trace类,可以在代码中添加更加详细的标记。使用Trace.beginSection(String)开始一段追踪,使用Trace.endSection()结束最近的一次追踪。

     app层 自定义 TAG

    
    import Android.os.Trace;
    
    Trace.beginSection(String sectionName)�
    ... ...
    Trace.EndSection() 
    
    

     Framework 层自定义 TAG

    
    import Android.os.Trace; 
    
    Trace.traceBegin(long traceTag, String methodName)
    ... ...
    Trace.traceEnd(long traceTag)
    
    

    . Native 层自定义 TAG

    
    #include<utils/Trace.h> 
    ATRACE_BEGIN("TEST");
    ... ...
    ATRACE_END();
    

     

    Systrace无法帮你定位到代码里面的具体到某一行代码,但是我们可以通过Alerts和Frames来能基本上优化了不足的地方,然后我们可以根据TraceView来分析具体函数花了多长时间来进一步优化代码提高性能。

     

    Alerts和Frames两栏

    这个警告指出了,有一个View#draw()方法执行了比较长的时间。我们可以在下面看到问题的描述、链接,甚至是相关的视频。

    下面我们看Frames这一行,可以看到这里展示了被绘制出来的每一帧,并且用绿、黄、红三颜色来区分它们在绘制时的性能。我们选一个红色帧来瞅瞅:

    在最下方,我们看到了与这一帧所相关的一些警告。

    在这三个警告中,有一个是我们上面所提到的(View#draw())。接下来我们在这一帧处放大并在下方展开“Inflation during ListView recycling”这条警告:

    我们可以看到警告部分的总耗时32毫秒,远高于了我们对保障60fps所需的16.6毫秒绘制时间。同时还有更多的ListView每个条目的绘制时间,大约是6毫秒每个条目,总共五个。而Description描述项中的内容会帮助我们理解问题,甚至提供问题的解决方案。回到我们上一张图片,我们可以在“inflate”这一个块区处放大,并且观察到底是哪些View在被填充过程中耗时比较严重。

     

    下面是另外一个渲染过慢的实例:

    在选择了某一帧之后,我们可以按“m”键来高亮这一帧,并且在上方看到了这一部分的耗时,如图,我们看到了这一阵的绘制总共耗时大约19毫秒。而当我们展开这一帧唯一的一个警告时,我们发现了“Scheduling delay”这条错误。

    Scheduling delay(调度延迟)的意思就是一个线程在处理一块运算的时候,在很长一段时间都没有被分配到CPU上面做运算,从而导致这个线程在很长一段时间都没有完成工作。我们选择这一帧中最长的一块,从而得到更加详细的信息:

     

    在红框区域内,我们看到了“Wall duration”,他代表着这一区块的开始到结束的耗时。之所以叫作“Wall duration”,是因为他就像是墙上的一个时钟,从线程的一开始就为你计时。

    而CPU Duration一项中显示了实际CPU在处理这一区块所消耗的时间。

    很显然,两个时间的差距还是非常大的。整个区块耗时18毫秒,而在这之中CPU只消耗了4毫秒的时间去运算。这就有点奇怪了,所以我们应该看一下在这整个过程之中,CPU去干吗了。

    可以看到,所有四个线程都非常的繁忙。

    选择其中的一个线程会告诉我们是哪个程序在占用他,在这里是一个包名为com.udinic.keepbusyapp的程序。在这里,由于另外一个程序占用CPU,导致了我们的程序未能获得足够的CPU资源。

    但是这种情况其实是暂时的,因为被其他后台应用占用CPU的情况并不多见,但仍有其他应用的线程或是主线程占用CPU。而Systrace也只能为我们提供一个概览,他的深度是有限的。所以要找到我们app中到底是什么让我们的CPU繁忙,我们还要借助另一个工具——Traceview。

     

     

     

    展开全文
  • systrace.rar

    2021-07-09 09:53:31
    此工具是方便mtk 平台打systrace
  • systrace.zip

    2020-06-02 10:55:04
    在androidq上的systrace包,这个是在执行sys trace的时候,配合python执行的包,在windows下运行,需要先安装python.
  • 本文是 Systrace 系列文章的第一篇,主要是对 Systrace 进行简单介绍,介绍其简单使用方法;如何去看 Systrace;如何结合其他工具对 Systrace 中的现象进行分析。本系列的目的是通过 Systrace 这个工具,从另外一个...

    本文是 Systrace 系列文章的第一篇,主要是对 Systrace 进行简单介绍,介绍其简单使用方法;如何去看 Systrace;如何结合其他工具对 Systrace 中的现象进行分析。

    本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 系统整体的运行,同时也从另外一个角度来对 Framework 进行学习。也许你看了很多讲 Framework 的文章,但是总是记不住代码,或者不清楚其运行的流程,也许从 Systrace 这个图形化的角度,你可以理解的更深入一些。

    系列文章目录

    Systrace 简介

    Systrace 基础知识 - Systrace 预备知识

    Systrace 基础知识 - Why 60 fps ?

    Systrace 基础知识 - SystemServer 解读

    Systrace 基础知识 - SurfaceFlinger 解读

    Systrace 基础知识 - Input 解读

    Systrace 基础知识 - Vsync 解读

    Systrace 基础知识 - Vsync-App :基于 Choreographer 的渲染机制详解

    Systrace 基础知识 - MainThread 和 RenderThread 解读

    Systrace 基础知识 - Binder 和锁竞争解读

    Systrace 基础知识 - CPU Info 解读

    正文

    Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

    Systrace 的功能包括跟踪系统的 I/O 操作、内核工作队列、CPU 负载以及 Android 各个子系统的运行状况等。在 Android 平台中,它主要由3部分组成:

    内核部分:Systrace 利用了 Linux Kernel 中的 ftrace 功能。所以,如果要使用 Systrace 的话,必须开启 kernel 中和 ftrace 相关的模块。

    数据采集部分:Android 定义了一个 Trace 类。应用程序可利用该类把统计信息输出给ftrace。同时,Android 还有一个 atrace 程序,它可以从 ftrace 中读取统计信息然后交给数据分析工具来处理。

    数据分析工具:Android 提供一个 systrace.py( python 脚本文件,位于 Android SDK目录/platform-tools/systrace 中,其内部将调用 atrace 程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集 ftrace 统计数据并生成一个结果网页文件供用户查看。 从本质上说,Systrace 是对 Linux Kernel中 ftrace 的封装。应用进程需要利用 Android 提供的 Trace 类来使用 Systrace.

    关于 Systrace 的官方介绍和使用可以看这里:Systrace

    Systrace简单使用

    使用 Systrace 前,要先了解一下 Systrace 在各个平台上的使用方法,鉴于大家使用Eclipse 和 Android Studio 的居多,所以直接摘抄官网关于这个的使用方法,不过不管是什么工具,流程是一样的:

    手机准备好你要进行抓取的界面

    点击开始抓取(命令行的话就是开始执行命令)

    手机上开始操作(不要太长时间)

    设定好的时间到了之后,会将生成 Trace.html 文件,使用 Chrome 将这个文件打开进行分析

    一般抓到的 Systrace 文件如下format,png

    Command Line Usage

    命令行形式比较灵活,速度也比较快,一次性配置好之后,以后再使用的时候就会很快就出结果(强烈推荐)

    Systrace 工具在 Android-SDK 目录下的 platform-tools 里面,下面是简单的使用方法

    $ cd android-sdk/platform-tools/systrace

    $ python systrace.py

    复制代码

    可以在 Bash 中配置好对应的路径和 Alias,使用起来还是很快速的。另外 User 版本所抓的 Systrce 文件所包含的信息,是比 eng 版本或者 Userdebug 版本要少的,建议使用 Userdebug 版本的机器来进行 debug,这样既保证了性能,又能有比较详细的输出结果.

    抓取结束后,会生成对应的 Trace.html 文件,注意这个文件只能被 Chrome 打开。关于如何分析 Trace 文件,我们下面的章节会讲。不论使用那种工具,在抓取之前都可以选择参数,下面说一下这些参数的意思:

    -h, --help Show the help message.(帮助)

    -o  Write the HTML trace report to the specified file.(即输出文件名,)

    -t N, --time=N Trace activity for N seconds. The default value is 5 seconds. (Trace抓取的时间,一般是 : -t 8)

    -b N, --buf-size=N Use a trace buffer size of N kilobytes. This option lets you limit the total size of the data collected during a trace.

    -k

    —ktrace= Trace the activity of specific kernel functions, specified in a comma-separated list.

    -l, --list-categories List the available tracing category tags. The available tags are(下面的参数不用翻译了估计大家也看得懂,贴官方的解释也会比较权威,后面分析的时候我们会看到这些参数的作业的):

    gfx - Graphics

    input - Input

    view - View

    webview - WebView

    wm - Window Manager

    am - Activity Manager

    audio - Audio

    video - Video

    camera - Camera

    hal - Hardware Modules

    res - Resource Loading

    dalvik - Dalvik VM

    rs - RenderScript

    sched - CPU Scheduling

    freq - CPU Frequency

    membus - Memory Bus Utilization

    idle - CPU Idle

    disk - Disk input and output

    load - CPU Load

    sync - Synchronization Manager

    workq - Kernel Workqueues Note: Some trace categories are not supported on all devices. Tip: If you want to see the names of tasks in the trace output, you must include the sched category in your command parameters.

    -a

    —app= Enable tracing for applications, specified as a comma-separated list of package names. The apps must contain tracing instrumentation calls from the Trace class. For more information, see Analyzing Display and Performance.

    —link-assets Link to the original CSS or JavaScript resources instead of embedding them in the HTML trace report.

    —from-file= Create the interactive Systrace report from a file, instead of running a live trace.

    —asset-dir= Specify a directory for the trace report assets. This option is useful for maintaining a single set of assets for multiple Systrace reports.

    -e

    —serial= Conduct the trace on a specific connected device, identified by its device serial number.

    上面的参数虽然比较多,但使用工具的时候不需考虑这么多,在对应的项目前打钩即可,命令行的时候才会去手动加参数:

    我们一般会把这个命令配置成Alias,配置如下:

    alias st-start='python /sdk/platform-tools/systrace/systrace.py'

    alias st-start-gfx-trace = ‘st-start -t 8 gfx input view sched freq wm am hwui workq res dalvik sync disk load perf hal rs idle mmc’

    复制代码

    这样在使用的时候,可以直接敲 st-start 即可,当然为了区分和保持各个文件,还需要加上 -o xxx.html .上面的命令和参数不必一次就理解,只需要记住如何简单使用即可,在分析的过程中,这些东西都会慢慢熟悉的。

    一般来说比较常用的是

    -o : 指示输出文件的路径和名字

    -t : 抓取时间(最新版本可以不用指定, 按 Enter 即可结束)

    -b : 指定 buffer 大小(一般情况下,默认的 Buffer 是够用的,如果你要抓很长的 Trae , 那么建议调大 Buffer )

    -a : 指定 app 包名 (如果要 Debug 自定义的 Trace 点, 记得要加这个)

    关于我 && 博客

    关于我 , 非常希望和大家一起交流 , 共同进步 .

    博客内容导航

    优秀博客文章记录 - Android 性能优化必知必会

    一个人可以走的更快 , 一群人可以走的更远

    更多内容可以进入 Android Performance 查看

    b739ec46bb5c46d9c0aa4ce35ba1ea56.png

    关于找一找教程网

    本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

    本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

    [Android Systrace 基础知识 -- Systrace 简介]http://www.zyiz.net/tech/detail-136282.html

    展开全文
  • 在windows系统下,抓取Android 4.4 的systrace
  • Systrace工具

    2021-06-05 12:46:18
    [Systrace Walkthrough](https://developer.android.com/intl/zh-cn/tools/performance/systrace/index.html)> [Systrace](http://developer.android.com/intl/zh-cn/tools/help/systrace.html#options)>...

    > [Systrace Walkthrough](https://developer.android.com/intl/zh-cn/tools/performance/systrace/index.html)

    > [Systrace](http://developer.android.com/intl/zh-cn/tools/help/systrace.html#options)

    > [Analyzing UI Performance with Systrace](http://developer.android.com/intl/zh-cn/tools/debugging/systrace.html#app-trace)

    > [Speed up your app](http://blog.udinic.com/2015/09/15/speed-up-your-app?from=timeline&isappinstalled=0)

    # Systrace能做什么?

    * 计算容器的性能

    * 发现性能的瓶颈

    # Systrace的使用准备

    * 4.1以上

    * root

    * Android SDK Tools 20

    * python环境

    # Systrace启动

    你可以通过命令行或者Device Monitor两种方式收集Systrace信息,以下以命令行为例介绍收集方式(因为我Device Monitor的方式报错)。

    首先进入sdk下的platform-tools/systrace目录下:

    ![](https://box.kancloud.cn/2015-12-31_56849d354432b.jpg)

    然后在命令下执行以下命令来收集数据:

    `python systrace.py --time=10 -o mynewtrace.html sched gfx view wm`

    上面的参数–time为间隔时间,-o为文件名,更详细的参数信息如下:

    | 参数名 | 意义 |

    | --- | --- |

    | `-h,--help` | 帮助信息 |

    | `-o ` | 保存的文件名 |

    | `-t N,--time=N` | 多少秒内的数据,默认为5秒,以当前时间点往后倒N个时间 |

    | `-b N,--buf-size=N` | 单位为千字节,限制数据大小 |

    | `-k --ktrace=` | 追踪特殊的方法 |

    | `-l,--list-categories` | 设置追踪的标签 |

    | `-a ,--app=` | 包名 |

    | `--from-file=` | 创建报告的来源trace文件 |

    | `-e ,--serial=` | 设备号 |

    其中标签可选项如下:

    | 标签名 | 意义 |

    | --- | --- |

    | gfx | Graphics |

    | input | Input |

    | view | View |

    | webview | Webview |

    | vm | Window Manager |

    | am | Activity Manager |

    | audio | Audio |

    | video | Video |

    | camera | Camera |

    | hal | Hardware Modules |

    | res | Resource Loading |

    | dalvik | Dalvik VM |

    | rs | RenderScript |

    | sched | Cpu Scheduling |

    | freq | Cpu Frequency |

    | membus | Memory Bus Utilization |

    | idle | Cpu Idle |

    | disk | Disk input and output |

    | load | Cpu Load |

    | sync | Synchronization Manager |

    | workq | Kernel Workqueues |

    以上标签并不支持所有机型,还有要想在输出中看到任务的名称,需要加上sched.

    上面的命令执行完后,会生成一个html文件:

    ![](https://box.kancloud.cn/2015-12-31_56849d356992a.jpg)

    打开该文件后,我们会看到如下页面:

    ![](https://box.kancloud.cn/2015-12-31_56849d35c7d9b.jpg)

    # systrace快捷键

    | 快捷键 | 作用 |

    | --- | --- |

    | w | 放大 |

    | s | 缩小 |

    | a | 左移 |

    | d | 右移 |

    | f | 返回选中区域,切放大选中区域 |

    ![](https://box.kancloud.cn/2015-12-31_56849d3606c69.jpg)

    # Alerts

    Alerts一栏标记了以下性能有问题的点,你可以点击该点查看详细信息,右边侧边栏还有一个Alerts框,点击可以查看每个类型的Alerts的数量:

    ![](https://box.kancloud.cn/2015-12-31_56849d3674b15.jpg)

    # Frame

    在每个包下都有Frame一栏,该栏中都有一个一个的`F`代表每一个`Frame`,用颜色来代表性能的好坏,依次为`绿-黄-红`(性能越来越差),点击某一个`F`,会显示该Frame绘制过程中的一些Alerts信息:

    ![](https://box.kancloud.cn/2015-12-31_56849d36c6c64.jpg)

    如果你想查看Frame的耗时,可以点击某个F标志,然后按`m`键:

    ![](https://box.kancloud.cn/2015-12-31_56849d3718f7f.jpg)

    展开全文
  • 性能分析工具Systrace的使用详解

    万次阅读 2020-11-04 19:23:54
    Systrace介绍 Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了Android内核中的数据,例如CPU调度程序、磁盘活动和应用线程。这份报告可帮助我们了解如何以最佳...

    Systrace介绍


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

    Systrace 工具用于显示整个设备在做些什么,不过也可用于识别应用中的卡顿。Systrace 的系统开销非常小,因此你可以在插桩测试期间体验实际卡顿情况。

    Systrace报告示例:
    在这里插入图片描述

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

    Systrace使用方法详解


    要想使用Systrace分析性能,我们首先需要找到Systrace工具,以及使用该工具生成一份.html的报告文件。

    使用命令行捕获Systreace报告文件

    systrace命令

    systrace命令会调用Systrace工具,以收集和检查设备上在系统一级运行的所有进程的时间信息。

    systrace命令是一个Python脚本,所以需要进行如下准备:

    1. Android Studio下载并安装最新的Android SDK Tools。
    2. 安装Python并将其添加到工作站的执行路径中(注意,这里要求Python2.7版本)。
    3. 使用USB调试连接将搭载Android 4.3(API 级别 18)或更高版本的设备连接到开发系统。

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

    例如,作者电脑上sstrace位置为:/Users/apple/Library/Android/sdk/platform-tools/systrace。

    命令语法

    要为应用生成HTML报告,我们需要使用以下语法从命令行运行systrace:

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

    在这里插入图片描述

    示例1:
    python ./systrace.py -t 5 -o mynewtrace.html
    
    • mynewtrace.html是最终的生成产物。
    • 5代表捕获5s的数据。
    示例2:
    python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
            binder_driver hal dalvik camera input res
    

    mynewtrace.html之后的参数,表示类别列表。

    提示:如果要在跟踪输出中查看任务名称,必须在命令参数中添加 sched 类别。

    查看已连接设备支持的类别列表

    命令如下:

    python systrace.py --list-categories
    

    示例:

    在这里插入图片描述

    打开System报告

    通过以上操作,会生成一个HTML文件,我们可以使用chrome浏览器,地址栏输入chrome://tracing/ 来查看报告。

    界面如下(点击Load按钮加载HTML文件即可):
    在这里插入图片描述

    查看报告元素

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

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

    用户互动

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

    CPU 活动

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

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

    在这里插入图片描述

    系统事件

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

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

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

    显示帧

    描绘了一条多色线条,后面是成堆的条形。这些形状表示已创建的特定线程的状态和帧堆栈。堆栈的每个层级代表对 beginSection() 的一次调用,或您为应用或游戏定义的自定义跟踪事件的开头。
    在这里插入图片描述

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

    • 绿色:正在运行
      线程正在完成与某个进程相关的工作或正在响应中断。

    • 蓝色:可运行
      线程可以运行但目前未进行调度。

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

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

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

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

    键盘快捷键

    下表列出了查看 Systrace 报告时可以使用的键盘快捷键:
    在这里插入图片描述

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

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

    1. 通过在时间间隔周围绘制一个矩形来选择所需的时间间隔。
    2. 使用标尺工具标记或突出显示问题区域。
    3. 依次点击 View Options > Highlight VSync,以显示每项显示屏刷新操作。
    4. 如果觉得页面中的信息太多了,想要筛选,可以点击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性能》持续更新中……

    展开全文
  • title: Systrace for Linux-使用 systrace 分析 linux & android 的调度问题 date: 2020-11-21 20:22 author: gatieme tags: - scheduler - linux - debug categories: - scheduler thumbnail: blogexcerpt: ...
  • 一、Systrace 简介 二、Systrace 使用方法 三、使用命令行抓取 Systrace 四、使用Systrace 检测UI 性能 五、使用Systrace 检测卡顿丢帧问题 六、查看trace 文件的快捷键 七、代码中添加trace 标记方法 八、...
  • 抓取Systrace方法汇总

    2021-05-24 09:26:45
    了解 Systrace:https://source.android.google.cn/devices/tech/debug/systrace 浏览Systrace报告:https://developer.android.google.cn/topic/performance/tracing/navigate-report 系统跟踪概览:...
  • android 性能优化-Systrace分析UI性能android 性能优化-Systrace分析UI性能
  • 2021-09-15 Systrace详解

    2021-09-15 15:16:05
    Systrace介绍 Systrace 是Android平台提供的一款工具,用于记录短期内的设备活动。该工具会生成一份报告,其中汇总了Android内核中的数据,例如CPU调度程序、磁盘活动和应用线程。这份报告可帮助我们了解如何以最佳...
  • Systrace工具解析

    千次阅读 2020-08-19 19:54:25
    文章目录Systrace工具解析前言1 Systrace 简介2 Systrace 预备知识3 Why 60 fps4 SystemServer 解读5 SurfaceFlinger 解读6 Input 解读7 Vsync 解读8 Vsync-App :基于 Choreographer 的渲染机制详解9 MainThread 和...
  • systrace介绍

    千次阅读 2020-06-13 15:27:24
    1、什么是systrace? Systrace是Android4.1引入的性能分析工具。利用ftrace,在系统关键位置都有埋点,主要用于分析系统调用耗时问题,可以自定义trace标签来细化调用栈 2 、为什么要用systrace,像腾讯的PerfDog不...
  • Systrace 解析

    千次阅读 2018-10-29 18:35:57
    上图基本就能说清systrace的整个框架: 1、systrace调用atrace抓取目标机的trace数据; 2、systrace把trace数据和’prefix.html’、‘suffix.html’、'systrace_trace_viewer.html’合成一个’trace.html’文件...
  • 而 (Perfetto) 工具可以从一个整机运行的角度来展示问题发生的过程,方便我们去初步定位问题 Systrace 流畅性实战目前包括下面三篇 Systrace 流畅性实战 1 :了解卡顿原理[1] Systrace 流畅性实战 2 :案例分析: ...
  • Systrace从入门到放弃

    千次阅读 2020-06-30 19:07:40
    什么是Systrace Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View...
  • Systrace 基础知识系列 系列文章 Systrace 响应速度实战 1 :了解响应速度原理 Systrace 响应速度实战 2 :响应速度实战分析-以启动速度为例 Systrace 响应速度实战 3 :响应速度延伸知识(本文) Systrace 基础知识...
  • systrace

    2018-11-28 19:31:00
    systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。在Android平台中,它主要由3部分组成:内核部分:Systrace利用了LinuxKernel中的ftrace功能。所以,如果要使用...
  • Systrace简介 一般来说,我们的机器以60帧/秒显示时,用户会感觉机器很流畅,如果显示时出现丢帧的情况,需要知道当前整个系统所处的状态,这个时候Systrace便是最佳的工具选择。 Systrace是Android4.1中新增的性能...
  • 对开发者来说就非常重要了 本文是响应速度系列的第二篇,主要是以 Android App 冷启动为例,讲解如何使用 Systrace 来分析 App 冷启动 Systrace (Perfetto) 工具的基本使用如果还不是很熟悉,那么需要优先去补一下 ...
  • Android systrace tool, calls atrace tool via ADB. However, I don't understand very well the format of the traces file. Apparently it is very similar to linux ftrace tool with some differences. The mai...
  • 系统跟踪 在Android内核源代码中分析系统调用。 这是Amrita Vishwa Vidyapeetham完成的论文工作的一部分。 该脚本以一个参数执行。 该参数对应于kerenl源的路径。 该脚本要求Android源代码的根目录中存在pattern....
  • Systrace 性能分析

    千次阅读 2019-04-26 10:07:00
    在构建功能,修复bug,整理代码之后,你应该花一些时间来关注应用的性能。应用画像素和执行操作的速度和流畅度影响了用户体验。 Android应用运行在一个共享资源的环境中... Systrace工具允许你收集和审查应用和Andr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,783
精华内容 1,913
关键字:

systrace