精华内容
下载资源
问答
  • Systrace快捷命令
    2016-04-13 20:42:17

    Key

    Description

    w

    Zoom into the trace timeline.

    s

    Zoom out of the trace timeline.

    a

    Pan left on the trace timeline.

    d

    Pan right on the trace timeline.

    e

    Center the trace timeline on the current mouse location.

    g

    Show grid at the start of the currently selected task.

    Shift+g

    Show grid at the end of the currently selected task.

    Right Arrow

    Select the next event on the currently selected timeline.

    Left Arrow

    Select the previous event on the currently selected timeline.

    Double Click

    Zoom into the trace timeline.

    Shift+Double Click

    Zoom out of the trace timeline.

     

        利用Systrace工具尤其适合于应用响应速度慢或者运行卡顿等问题的分析,这里只是以应用启动速度分析简要举例,需要了解更多Systrace工具的使用方法,可以参考Analyzing Display andPerformance

    更多相关内容
  • Android性能工具——Systrace使用

    万次阅读 多人点赞 2019-09-02 09:20:42
    常用快捷键说明: W : 放大横轴,用于查看耗时方法细节; S : 缩小横轴,用于查看整体情况; A : 将面板左移; D : 将面板右移; M : 高亮某一段耗时内容。 文件结构 Systrace的文件结构从上到下...

    一、屏幕刷新机制

    基础概念

    在一个典型的显示系统中,一般包括CPU、GPU、display三个部分, CPU负责计算数据,把计算好数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到buffer里存起来,然后display(有的文章也叫屏幕或者显示器)负责把buffer里的数据呈现到屏幕上。
    显示过程,简单的说就是CPU/GPU准备好数据,存入buffer,display每隔一段时间去buffer里取数据,然后显示出来。display读取的频率是固定的,比如每个16ms读一次,但是CPU/GPU写数据是完全无规律的。

    简单的说,屏幕的刷新包括三个步骤:CPU 计算屏幕数据、GPU 进一步处理和缓存、最后 display 再将缓存中(buffer)的屏幕数据显示出来。

    Screen Tearing(撕裂)

    由于display处理的频率是固定的,而CPU/GPU处理数据的时间是不确定的,因此在早期的设备上,由于是单缓冲的模式,则会有屏幕撕裂的情况发生。

    例如显示周期为0.01秒,则在0.01秒时显示正确,而在0.01秒-0.02秒时,CPU/GPU仅完成了部分工作,则在0.02秒时,屏幕显示的是上部分为2,下部分为1的撕裂画面。

    Double-Buffer

    双缓冲技术,基本原理就是采用两块buffer。一块back buffer用于CPU/GPU后台绘制,另一块framebuffer则用于显示,当back buffer准备就绪后,它们才进行交换。

    为了避免Tearing情况发生,当扫描完一个屏幕后,设备需要重新回到第一行以进入下一次的循环,此时有一段时间空隙,这个时间点就是我们进行缓冲区交换的最佳时间,VSync信号也是在这个时间点产生的。

    VSync

    在android4.1之前,没有采用Vsync信号时,CPU/GPU往Buffer里面写数据是比较随意的,CPU/GPU开始工作的时间不是固定的,而Display处理的频率是固定的,因此,会造成丢帧(Jank)的情况发生,如下图所示。

    在android4.1之后,对Android Display系统进行了重构,实现了Project Butter,引入了三个核心元素,即VSYNC、Triple Buffer和Choreographer。
    Project Butter规定系统一旦收到vsync通知(16ms触发一次),CPU和GPU就立刻开始工作把显示数据写入buffer。

    系统规定收到Vsync信号后,CPU就开始处理屏幕绘制数据,CPU/GPU根据VSYNC信号同步处理数据,可以让CPU/GPU有完整的16ms时间来处理数据,减少了jank。

    Triple Buffer

    双缓存的机制并不是完美的,比如当CPU/GPU工作时间较长时,会发生如下情况:

    当CPU/GPU的处理时间超过16ms时,第一个VSync到来时,缓冲区B中的数据还没有准备好,于是只能继续显示之前A缓冲区中的内容。而B完成后,又因为缺乏VSync信号,它只能等待下一个信号的来临。于是在这一过程中,有一大段时间是被浪费的。
    当下一个VSync出现时,CPU/GPU马上执行操作,此时它可操作的buffer是A,相应的显示屏对应的就是B。这时看起来就是正常的。只不过由于执行时间仍然超过16ms,导致下一次应该执行的缓冲区交换又被推迟了——如此循环反复,便出现了越来越多的Jank。


    三缓存不能解决双缓冲带来的第一次Jank丢失问题,但是当第一次VSync发生后,CPU不用再等待了,它会使用第三个buffer C来进行下一帧数据的准备工作。虽然对缓冲区C的处理所需时间同样超过了16ms,但这并不影响显示屏——第2次VSync到来后,它选择buffer B进行显示;而第3次VSync时,它会接着采用C,而不是像double buffering中所看到的情况一样只能再显示一遍B了。这样子就有效地降低了jank。

    二、App相关的屏幕绘制

    App刷新屏幕流程

    1. 界面上任何一个 View 的刷新请求最终都会走到 ViewRootImpl 中的 scheduleTraversals() 里来安排一次遍历绘制 View 树的任务;
    2. scheduleTraversals() 会先过滤掉同一帧内的重复调用,在同一帧内只需要安排一次遍历绘制 View 树的任务即可,这个任务会在下一个屏幕刷新信号到来时调用 performTraversals() 遍历 View 树,遍历过程中会将所有需要刷新的 View 进行重绘;
    3. 接着 scheduleTraversals() 会往主线程的消息队列中发送一个同步屏障,拦截这个时刻之后所有的同步消息的执行,但不会拦截异步消息,以此来尽可能的保证当接收到屏幕刷新信号时可以尽可能第一时间处理遍历绘制 View 树的工作;
    4. 发完同步屏障后 scheduleTraversals() 才会开始安排一个遍历绘制 View 树的操作,作法是把 performTraversals() 封装到 Runnable 里面,然后调用 Choreographer 的 postCallback() 方法;
    5. postCallback() 方法会先将这个 Runnable 任务以当前时间戳放进一个待执行的队列里,然后如果当前是在主线程就会直接调用一个native 层方法,如果不是在主线程,会发一个最高优先级的 message 到主线程,让主线程第一时间调用这个 native 层的方法;
    6. native 层的这个方法是用来向底层注册监听下一个屏幕刷新信号,当下一个屏幕刷新信号发出时,底层就会回调 Choreographer 的onVsync() 方法来通知上层 app;
    7. onVsync() 方法被回调时,会往主线程的消息队列中发送一个执行 doFrame() 方法的消息,这个消息是异步消息,所以不会被同步屏障拦截住;
    8. doFrame() 方法会去取出之前放进待执行队列里的任务来执行,取出来的这个任务实际上是 ViewRootImpl 的 doTraversal() 操作;
    9. 上述第4步到第8步涉及到的消息都手动设置成了异步消息,所以不会受到同步屏障的拦截;
    10. doTraversal() 方法会先移除主线程的同步屏障,然后调用 performTraversals() 开始根据当前状态判断是否需要执行performMeasure() 测量、perfromLayout() 布局、performDraw() 绘制流程,在这几个流程中都会去遍历 View 树来刷新需要更新的View;

    总结来说,当有屏幕刷新操作时,系统会将View树的测量、布局和绘制等封装到一个Runnable,然后监听VSync信号,等Vsync信号来时,再触发此Runnable。

    三、卡顿分析利器——Systrace工具

    简介

    Systrace是分析Android性能问题的神器,Google IO 2017上更是对其各种强推. 是分析卡顿掉帧问题核心工具,只要能提供卡顿现场,systrace就能很好定位问题。

    原理

    在介绍使用之前,先简单说明一下Systrace的原理:它的思想很朴素,在系统的一些关键链路(比如System Service,虚拟机,Binder驱动)插入一些信息(我这里称之为Label),通过Label的开始和结束来确定某个核心过程的执行时间,然后把这些Label信息收集起来得到系统关键路径的运行时间信息,进而得到整个系统的运行性能信息。Android Framework里面一些重要的模块都插入了Label信息(Java层的通过android.os.Trace类完成,native层通过ATrace宏完成),用户App中可以添加自定义的Label,这样就组成了一个完成的性能分析系统。另外说明的是:Systrace对系统版本有一个要求,就是需要Android 4.1以上。系统版本越高,Android Framework中添加的系统可用Label就越多,能够支持和分析的系统模块也就越多;因此,在可能的情况下,尽可能使用高版本的Android系统来进行分析。

    获取systrace文件

    要想分析卡顿现场,必须先获取到卡顿现场的Systrace文件,获取Systrace文件的方式有两种,一种是通过AndroidSDK/tools目录下,通过monitor.bat用Android Device Monitor可视化工具得到,一种是通过python脚本获取,我本人更喜欢通过脚本获取,因为更方便一点。

    1. 通过Android Device Monitor获取

    1. 点击绿色按钮启动Systrace

    2. 选择抓取Systrace的配置文件

      这里,我们仅仅抓取5秒钟的系统数据,没有选择特别的应用进程,抓取的内容为基础内容。

    3. 点击OK开始抓取

    2. 通过python脚本抓取(推荐)

    1. 装python2.X版本,Systrace脚本不支持3.X版本

    2. 通过python脚本执行AndroidSDK\platform-tools\systrace\目录下的systrace.py文件

    3. 可以配置一些参数,类似于通过Android Device Monitor抓取时步骤2配置的显示信息,若不选择则默认全部抓取。

    4. 配置一些其他实用参数:

      • -o: 指定文件输出位置和文件名
      • -t: 抓取systrace的时间长度
      • -a: 指定特殊进程包名(自己加Label时必须加上)
    5. 抓取脚本示例:

    Systrace文件说明

    准备工具

    1. Chrome浏览器(必须)。
      在地址栏输入chrome://tracing命令,然后将生成的trace.html文件拖进来,或者通过load按钮导入。

    常用快捷键说明:

    • W: 放大横轴,用于查看耗时方法细节;
    • S: 缩小横轴,用于查看整体情况;
    • A: 将面板左移;
    • D: 将面板右移;
    • M: 高亮某一段耗时内容。

    文件结构

    Systrace的文件结构从上到下一般是:

    1. 内核信息(CPU片信息);

    2. SurfaceFlinger(底层绘制信号等信息);

    3. system_server等其他进程信息。

    性能问题分析

    一般用Systrace用来分析卡顿、启动时间慢等问题,还可以用来分析方法耗时等。

    1. 卡顿问题分析

    首先分析一下正常的无卡顿时的表现:
    [外链图片转存失败(img-cN2yB054-1567387228383)(https://i.postimg.cc/43LnJ6hY/6.jpg)]

    当按W并且按M放大高亮每一帧细节的时候,可以看到每一帧的绘制开始都是在16ms以内完成的:

    从某一帧的刷新,我们也可以知道,刷新是从Choreographer的doFrame()开始的,一直到GPU线程绘制完毕结束。

    现在,我们修改代码,在 ListView 的getView()方法延迟100ms,然后抓取systrace,查看一下耗时情况。

    代码:

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            SystemClock.sleep(100);
            if(view != null) {
                ((TextView)view).setText(list.get(i));
                return view;
            }
            TextView tv = new TextView(viewGroup.getContext());
            tv.setText(list.get(i));
            return tv;
        }
    

    从图上,我们可以看见用来标识每一帧耗时的F标志变成了红色,这说明这一帧是耗时特别严重的。

    高亮某一个带红色F的帧:

    从图上,可以看出这一帧耗时达到548ms,其中耗时很大的部分为input,这个input和上面的deliverInputEvent相对应,说明是触摸事件耗时过长(其实是因为我们在主线程sleep了100ms导致的)。
    为什么这一帧耗时是500ms呢?明明我们只sleep了100ms呀。原因是我们是在每一个ListView的getView()方法sleep了100ms,而这次触摸事件刷新出了5个item,每一个item的getView()方法都耗时了100ms(obtainView()会调用getView()),因此耗时达到了500多ms。

    分析卡顿的步骤就是:

    1. 找到卡顿的场景,并抓取卡顿发生时的systrace文件;

    2. 找到发生问题的应用进程的主线程,并通过标红的F图标,找到发生问题的问题帧;

    3. 通过放大和高亮去判断具体是哪一个细节点发生了耗时情况。

    若从systrace文件中看不出来具体是哪一个方法耗时,我们可以自己在代码中加入Label,去查看方法具体耗时(替代TraceView),后面会讲到。

    2. 启动时间分析

    很多时候,我们对App的冷启动时间都有一定的要求,我们当然可以通过adb命令去启动我们的MainActivity,然后查看启动时间,但是那并不是真正意义上应用完全打开的启动时间,而通过Systrace则可以很方便的统计启动时间,并找出耗时的地方。

    这里,我们统计耗时是从用户点击Launcher上的应用图标,到界面完全显示的时间, 那么界面完全显示的时间是哪里?有两个方法,一个是在onWindowFocusChange()方法中打印Label,或者通过MessageQueue.IdelHandler来进行,这里,简单起见我们就用onWindowFocusChange()方法中加Label吧。

    自己加Label主要是通过API:Trace.beginSection("名称")Trace.endSection()来进行,自己的Label有以下需要注意:

    • beginend必须成对出现;
    • Label支持嵌套;
    • beginend必须在同一个线程中;
    • 抓取systrace时,必须指定包名

    代码示例:

    private boolean flag = true;
    private static Handler mHandler = new Handler();
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus && flag) {
            flag = false;
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Trace.beginSection("endTime");
                    SystemClock.sleep(500);
                    Trace.endSection();
                }
            });
        }
    }
    

    systrace文件:

    启动时间计算:
    1、找到Launcher进程中最后一次手指按下的时间点 deliverInputEvent的标示,这里是起点:

    2、终点就是上图中endTime()打印时开始的地方,用图中标示的工具,将两段时间相连,就能得到本次应用的冷启动时间为434ms。

    总结

    • 屏幕绘制的流程为 CPU计算数据 -> GPU绘制界面 -> 数据放入Buffer -> Display从Buffer中取数据呈现;

    • Display刷新的时间是固定的(Android中可以理解为16.6ms),而CPU/GPU计算数据的时间不固定,因此会有很多显示问题(撕裂、丢帧);

    • Systrace可以查看丢帧现场的具体问题点(哪些方法耗时过长导致丢帧);

    • Systrace可以通过添加Label代替TraceView的作用,用来统计方法耗时详情和应用启动时间。

    展开全文
  • Systrace工具

    千次阅读 2016-12-15 14:44:05
    Systrace Walkthrough  Systrace  Analyzing UI Performance with Systrace  Speed up your app Systrace能做什么? 计算容器的性能发现性能的瓶颈 Systrace的使用准备 4.1以上rootAndroid SDK Tools...

    Systrace Walkthrough 
    Systrace 
    Analyzing UI Performance with Systrace 
    Speed up your app

    Systrace能做什么?

    • 计算容器的性能
    • 发现性能的瓶颈

    Systrace的使用准备

    • 4.1以上
    • root
    • Android SDK Tools 20
    • python环境

    Systrace启动

    你可以通过命令行或者Device Monitor两种方式收集Systrace信息,以下以命令行为例介绍收集方式(因为我Device Monitor的方式报错)。 
    首先进入sdk下的platform-tools/systrace目录下: 
     
    然后在命令下执行以下命令来收集数据: 
    python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

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

    参数名意义
    -h,--help帮助信息
    -o <FILE>保存的文件名
    -t N,--time=N多少秒内的数据,默认为5秒,以当前时间点往后倒N个时间
    -b N,--buf-size=N单位为千字节,限制数据大小
    -k <KFUNCS> --ktrace=<KFUNCS>追踪特殊的方法
    -l,--list-categories设置追踪的标签
    -a <APP_NAME>,--app=<APP_NAME>包名
    --from-file=<FROM_FILE>创建报告的来源trace文件
    -e <DEVICE_SERIAL>,--serial=<DEVICE_SERIAL>设备号

    其中标签可选项如下:

    标签名意义
    gfxGraphics
    inputInput
    viewView
    webviewWebview
    vmWindow Manager
    amActivity Manager
    audioAudio
    videoVideo
    cameraCamera
    halHardware Modules
    resResource Loading
    dalvikDalvik VM
    rsRenderScript
    schedCpu Scheduling
    freqCpu Frequency
    membusMemory Bus Utilization
    idleCpu Idle
    diskDisk input and output
    loadCpu Load
    syncSynchronization Manager
    workqKernel Workqueues

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

    上面的命令执行完后,会生成一个html文件: 
     
    打开该文件后,我们会看到如下页面: 

    systrace快捷键

    快捷键作用
    w放大
    s缩小
    a左移
    d右移
    f返回选中区域,切放大选中区域

    Alerts

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

    Frame

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

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

    展开全文
  • 1.Systrace的介绍 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、...

    1.Systrace的介绍

         Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、WindowManagerService等Framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。
     Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。

           在Android平台中, 它主要由3部分组成:
     1.内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的话,必须开启kernel中和ftrace相关的模块。
     2.数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
     3.数据分析工具:Android提供一个systrace.py(python脚本文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集 ftrace统计数据并生成一个结果网页文件供用户查看。
              从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace。


     
    2.Systrace跟踪代码


    (1).应用层代码添加systrace跟踪方式:
       Trace.beginSection(“TEST”);
       Trace.endSection();
    (2).framework的java层代码添加systrace跟踪方式:
      Trace.traceBegin(Trace.TRACE_TAG_VIEW, “performTraversals”);
      Trace.traceEnd(Trace.TRACE_TAG_VIEW);
      也可以使用:
      ATRACE_BEGIN(“TEST”);
      ATRACE_END();
    (3).framework的native代码添加systrace跟踪方式:   
      ATRACE_INIT();
      ATRACE_CALL();
     


    3.Systrace的运行方式


    >sdk包下手动运行:
    $> cd android-sdk/tools/systrace
    $> python systrace.py --set-tags gfx,view,wm
    $> adb shell stop
    $> adb shell start
    $> python systrace.py --disk --time=10 -o mynewtrace.html

     
    >用ADT工具在Eclipse里运行:
     点击下图红圈的启动按钮,就会弹出右边的Android System Trace设置面板。

     

    4.Systrace数据分析

    >当Systrace运行之后,将记录系统预定的跟踪数据,生成一个html文件,如图:

     

    5.Systrace使用示例


    Android流畅程度性能分析:
     (1).将几台链接Eclipse之后,按照上页所述,打开Android System Trace设置面板。
     (2).如果要测试介面流畅度,我们一般只关注图形性能。因此必须选择Graphics和View(还有其他很多选项,如果是在做音频处理或者视频播放的分析测试话,可以选择其他选项)。
     (3).确认运行之后,滚滑要测试的介面,记录跟踪时间,之后我们会得到一个html页面。
     (4).打开html页面后,页面中显示了系统运行情况的概述图;欲查看具体数据可以通过WASD快捷键来完成,W/S 放大/缩小 A/D 左移/右移。
     (5).在页面中有一个surfaceFlinger模块, 此模块是负责绘制Android应用程序UI的服务,此区域如果出现空档,一种情况是没有操作或者滑动到头,没东西需要绘制,这种属于正常;另一种情况就是有问题存在,有其他操作引起时间过长。
     (6).在分析局域,放大后就能看到具体的函数执行情况,点击后能看到每个部分所使用的时间。比如deliverInputEvent是系统提供的触摸事件;performTraversals是开始布局并且绘画显示画面的过程;draw是绘画的过程;对于一个 listview,如果deliverInputEvent过长,很有可能是在adapter中的getView方法中处理时间过长导致。 所以通过Systrace的数据,可以大体上的发现是否存在性能问题。但如果要知道具体情况,就需要用到另外一个工具。 


    6.TraceView的介绍


    通过Systrace分析数据,可以大体上发现是否存在性能问题。

    但如果要知道具体情况,就需要用到另外一个工具TraceView是android的一个可视化的调试工具。

    借助它,你可以具体了解你的代码在运行时的性能表现。

    它能帮你更好了解到代码运行过程的效率,进而改善代码,提高你应用的体验。

    同时TraceView是Android平台特有的数据采集和分析工具,它主要用于分析Android中应用程序的hotspot。

    让我们了解我们要跟踪的程序的性能,并且能具体到method
    Traceview的作用:
     (1). 查看跟踪代码的执行时间,分析哪些是耗时操作。
     (2). 可以用于跟踪方法的调用,尤其是Android Framework层的方法调用关系。
     (3). 可以方便的查看线程的执行情况,某个方法执行时间、调用次数、在总体中的占比等,从而定位性能点。


     
    7.TraceView的运行方式


    手动运行:
     在开始调试的地方,如Activity的onCreate函数,
                          添加Debug.startMethodTracing("tracefilename");
     结束调试的地方,如Activity的onStop函数,
                            添加Debug.stopMethodTracing();
     之后运行你的app一段时间并退出,会在sd卡根目录生成tracefilename.trace这个log文件,记录这段时间内的运行信息。
     将日志文件pull到PC端,cmd到android sdk tools文件夹内(或绑定sdk tools目录到系统path内),运行traceview tracefilename.trace即可打开TraceView分析界面。


    使用DDMS:
        打开devices窗口,选择某个进程,点击右上角的start method profilingddms trace,运行app一段时间后,再点击已变成stop method profiling的该按钮。eclipse会自动弹出debug的标签(可通过菜单File->save as保存数据)。

    界面如下:


    注:这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查。
     

    8.TraceView的数据分析


    Timeline Panel(时间线面板) :


    Timeline Panel又可细分为左右两个Pane:
        (1).左边Pane显示的是测试数据中所采集的线程信息。如图,本次测试数据采集了main线程,两个Binder线程和其它系统辅助线程(例如GC线程等)的信息。
        (2).右边Pane所示为时间线,时间线上是每个线程测试时间段内所涉及的函数调用信息。这些信息包括函数名、函数执行时间等。如图,main线程对应行的的内容非常丰富,而其他线程在这段时间内干得工作则要少得多。
        (3).开发者可以在时间线Pane中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。


    Profile Panel(分析面板):

        分析面板主要展示了某个线程(先在Timeline Panel中选择线程)中各个函数调用的情况,包括CPU使用时间、调用次数等信息。而这些信息正是查找hotspot的关键依据。点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。
        Profile Panel各列信息作用说明 如下:
    Name 该线程运行过程中所调用的函数名
    Incl Cpu Time 某函数占用的CPU时间,包含内部调用其它函数的CPU时间
    Excl Cpu Time 某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间
    Incl Real Time 某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间
    Excl Real Time 某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间
    Call+Recur Calls/Total 某函数被调用次数以及递归调用占总调用次数的百分比
    Cpu Time/Call  某函数调用CPU时间与调用次数的比。相当于该函数平均执行时间
    Real Time/Call 同CPU Time/Call类似,只不过统计单位换成了真实时间 



    9.TraceView使用示例


    通常,查找hotspot包括两种类型的函数:


     第一类是调用次数不多,但每次调用却需要花费很长时间的函数。

    方法:在Profile Panel中,选择按Cpu Time/Call进行降序排序(从上之下排列,每项的耗费时间由高到低),如上图所示。

    展开函数,我们发现getStringsToShow在 Incl Cpu Time %一列中占据了63.3%,它是onCreate子函数耗费时间最长的,而且Calls+Recur Calls/Total列显示其调用次数为1,即它仅仅被调用一次了。这个函数是应用程序实现的,所以极有可能是一个潜在的Hotspot。


     第二类是那些自身占用时间不长,但调用却非常频繁的函数。

    方法:点击Call/Recur Calls/Total列头,使之按降序排列。关注点放在那些调用频繁并且占用资源较多的函数。

    如上图所示。红框处有两个重载的MyMD5.getHashString函数调用,它们各运行了368次,而且占用的CPU时间百分比达到了31.8%和53.2%。很显然,这2处调用就是hotspot,有优化的余地 。


    10.结论


    >如今Android系统日趋稳定,存储容量也越来越大,对源码质量的要求也不断降低。

    但是很多开发工程师在开发的过程中不注重代码质量,不考虑系统性能和用户体验,

    因此开发出的产品往往性能低下,用户体验机差。
    >为了很好的验证产品的性能,目前有很多工具可以用来分析测试Android的性能,比如:dumpsys、Systrace、TraceView、Update Threads(更新线程)、Update Heap(更新堆)、Allocation Tracker(分配跟踪器)等工具,这裡我们仅仅介绍了其中两个。

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

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

    千次阅读 2022-04-04 21:35:44
    Systrace 是谷歌提供的一款工具,用于记录短期内的设备活动,是性能分析的利器。本文主要介绍 systrace 文件的抓取和简单的解析 systrace 图。 首先我们要下载 platform-tools 工具包,这个是可以单独下载的。下载好...
  • systrace介绍

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

    千次阅读 2022-04-03 10:19:21
    Systrace 可以帮助开发者收集Android关键子系统(SurfaceFlinger、WMS等Framework 部分关键模块、服务,View体系系统等)的运行信息。Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子...
  • Systrace 工具

    2020-06-10 09:21:08
    1、Systrace是分析Android设备性能的主要工具。不过,它实际上是其它工具的封装容器(是atrace的主机端封装容器),是用于控制用户空间跟踪和设置ftrace的设备端可执行文件,也是Linux内核中的主要跟踪机制。 2、...
  • 抓取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 系统跟踪概览:...
  • 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 简介 二、Systrace 使用方法 ...六、查看trace 文件的快捷键 七、代码中添加trace 标记方法 八、使用TraceView 分析trace Log 一、Systrace 简介 Systrace 允许你收集和检查设备上运行
  • 2021-09-15 Systrace详解

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

    2020-07-25 18:15:09
    2.SysTrace相关快捷键 SysTrace查看相关快捷键@Google Chrome 快捷键 作用 w 放大 s 缩小 a 左移 d 右移 f 定位并放大选中区域(不显示耗时) m 标记选中区域或者取消选中区域...
  • Android Systrace工具

    2020-07-02 11:36:29
    报告浏览2.1 快捷键2.2 报告阅读 摘抄自:https://developer.android.com/topic/performance/tracing Systrace是Android平台提供的一款用于记录短期内设备活动的工具,记录的结果会集成在一个HTML文件中。 1. ...
  • 本文介绍了如何查看 Systrace 中的线程状态 , 如何对进程的唤醒信息进行分析, 如何解读信息区的数据, 以及介绍了常用的快捷键. 通过本篇文章的学习, 相信你可以掌握进程和线程相关的一些信息, 也知道如何查看复杂的 ...
  • 查看systrace报告的键盘快捷键 键 说明 W 放大跟踪时间轴。 A 在跟踪时间轴上向左平移。 S 缩小跟踪时间轴。 D 在跟踪时间轴上向右平移。 E 以当前鼠标位置为中定位跟踪时间轴。 M ...
  • Systrace的使用总结

    千次阅读 2018-12-03 22:30:49
    快捷键 问题排查 定位到应用:  一直下拉,直至找到包名。有时候包名不显示,只能根据pid查找。(无快捷方法) 主要查看UI Thread. 一直到第一帧绘制出来的时间就是启动时间(绿色的F) 启动...
  • Systrace2 预备知识

    2021-08-01 22:47:29
    本文介绍了如何查看 Systrace 中的线程状态 , 如何对进程的唤醒信息进行分析, 如何解读信息区的数据, 以及介绍了常用的快捷键。通过本篇文章的学习,相信你可以掌握进程和线程相关的一些信息,也知道如何查看复杂的 ...
  • android性能分析之Systrace

    千次阅读 2020-05-15 10:32:14
    -Systrace Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等...
  • 1 模板配置现在我们最常用的快捷键可能是ALT+/,或者在输入一个单词的一部分之后,让它弹出辅助代码。而这些都是通过模板来配置,打开菜单:window-->preferences-->java-->editor-->templates在右边的...
  • systrace的简单介绍及使用

    千次阅读 2020-07-19 17:57:22
    systrace的简单介绍 systrace是 Android 4.1 之后,引入的分析设备性能的主要工具,是Linux内核中的主要跟踪机制。 Systrace 允许你收集和检查设备上运行的所有进程的计时信息。 它包括 Android kernel 的一些数据...
  • } …… } …… } 在自己应用的代码中添加如上代码之后并没有结束,还有一点非常重要,在执行 systrace 命令的时候,需要通过 -a 指定应用包名,这样才会记录、收集到自己应用中添加的 trace 信息,如下所示: ./...
  • Systrace允许您在系统级别收集和检查设备上运行的所有进程的计时信息。 它将来自Android内核的数据(例如CPU调度程序,磁盘活动和应用程序线程)组合起来,以生成...
  • ./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_d
  • 本篇文章主要介绍 Android ...六、查看trace 文件的快捷键 七、代码中添加trace 标记具体分析问题所在 八、使用TraceView 分析trace Log 一、Systrace 简介 Systrace 允许你收集和检查设备上运行的所有进程的计时
  • Systrace工具特别适合用来分析UI的性能。 理论基础:在开发应用时,通常使用60fps的帧率来检测交互是否流畅,及16.66ms/帧 首先确认一点,android studio集成了所有Android SDK下的工具。涉及android SDK的工具...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 251
精华内容 100
关键字:

systrace 快捷键