想想自己写的什么垃圾代码导致Vsync不能及时处理#(不高兴)

想不开?

实际开发中性能问题不好复现?这你就可能需要一些工具来帮你检测这种情况。

首先是Android系统自带的工具(4.1之后的版本),Profile GPU rending(GPU呈现分析),点击打开“以条形展示”之后,手机屏幕下方和上方会出现频谱,这个图有四个颜色的柱子,分别对应:

  • 蓝色:绘制时间,即创建和更新DisplayList的时间。蓝色线较高的地方,代表有可能有些任务需要重新绘制,或者onDrow方法中处理的事情太多了。
  • 红色:执行时间,即Android进行2D渲染DisplayList中的任务的时间。红线较高时,可能是因为重新提交了视图。
  • 橙色:处理时间,即CPU告诉GPU需要渲染一帧的时间,这是一个阻塞调用,因为CPU会一直等GPU的回复命令。如果橙线很高,代表GPU繁忙或者处理任务多
  • 紫色:将资源转移到渲染线程的时间。仅在Android 4.0以上提供。

    效果大概如图:

    其中的绿线代表16ms,那么,每个柱状图超过绿线,说明又一次卡顿(jank)。

    这种效果虽然看起来很直观,但是在开发中难以用于分析。我们可以通过:adb shell dumpsys gfxinfo xxx.xxx.xxx(包名)来输出日志。其实偶尔丢失几帧很正常,但是我们要找出是什么UI问题导致绘制时间较长的。然后就可以找到你的垃圾代码了啦,是不是很厉害呢?


接下来还有更厉害的工具:TraceView

TraceView是AndroidSDK自带的工具,用来查看Trace文件视图。会产生一个图标,可以分析到每个应用每个方法所用的时间。使用TraceView需要先有个Trace日志文件,这个文件的获取方法有两种:

1.在DDMS中使用

首先打开DDMS。AndroidStudio则为Android Device Monitor。但是在AndroidStudio3.0+版本中,ADM已经被弃用了。我们需要在android-sdk/tools/目录的命令行中输入monitor。注意,这里必须安装JDK环境。链接设备后,点击Start Method Profiling。在监控完成之后,点击Stop Method Profiling即可。结束后会自动跳转到TraceView。

2.在代码中使用

这个方法更简单,但是却没有那么方便。直接在代码中需要开始监控的地方调用startMethodTracing()方法,在结束的时候调用stopMethodTracing()方法即可。startMethodTracing需要输入文件名参数,例如startMethodTracing("logs"),将会在SD卡目录下生成名为log.trace的文件。在Android4.4+的版本中,降低了对Trace文件分析次数,从而降低对性能的影响。但是精准度缺不会有很大的偏差。


我们再来说一下,TraceView工具怎么使用。

你写的什么垃圾代码让Vsync命令不能及时处理呢?(1)的更多相关文章

  1. 你写的什么垃圾代码让Vsync命令不能及时处理呢?(2)

    接上篇 1.TraceView Traceview看起来复杂,其实很简单: 上部分图中,X代表时间消耗,Y轴代表各个线程中的方法,且使用了不同颜色表示.面积越款,时间越长. 下部分为分析面板,分析面板 ...

  2. ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...

  3. Guava - 拯救垃圾代码,写出优雅高效,效率提升N倍

    最近在看一个同学代码的时候,发现代码中大量使用了 Google 开源的 Guava 核心库中的内容,让代码简单清晰了不少,故学习分享出 Guava 中我认为最实用的功能. Guava 项目是 Goog ...

  4. Auty自动化测试框架第六篇——垃圾代码回收、添加suite支持

    [本文出自天外归云的博客园] 垃圾代码回收 添加脚本恢复机制,因为框架会自动生成一些代码,如果代码生成后出现问题导致代码没有正常删除掉,则会造成代码垃圾,在auty目录添加recovery.py文件: ...

  5. 使用Swift的代理,闭包来封装一个公用协议减少垃圾代码

    iOS开发中,如果不进行适当的封装,使用协议或者继承类来进行开发,你就会遇到传说中的ViewController(以后简称VC) Hell的问题…… 比如说,我们先声网App中为了调用接口,做简单的判 ...

  6. CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  7. CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  8. python实现统计你一共写了多少行代码

    程序员要保证一定的代码量就必须勤奋的敲代码,但怎么知道自己一共写了多少代码呢,笔者用python写了个简单的脚本,遍历所有的.java,.cpp,.c文件的行数,但是正如大家所知,java生成了许多代 ...

  9. 如何写出无法维护的代码(JAVA版)

    程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...

随机推荐

  1. Postman 发送 Bearer token

    Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key.一个Bearer代表授权范围.有 ...

  2. (转)关于IBM小机P520的面板使用

    原文:http://www.xlgps.com/article/390810.html 经过搜索资料及自己的试验,现将解决方法记录如下.P520控制面板上有三个按钮,按钮上方有一个显示屏,上面显示你操 ...

  3. (转)IBM AIX系统为rootvg实现镜像

    IBM AIX系统为rootvg实现镜像 AIX系统安装的时候,没有选择安装镜像,因此在系统安装完成后,出于安全方面的考虑,决定为rootvg创建镜像. 工具/原料 AIX rootvg lspv c ...

  4. Java之IO(一)InputStream和OutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6964702.html 1.前言 计算机的IO操作一直都是比较重要的一环,IO顾名思义,就是输入输出流.不管是磁盘 ...

  5. 【数组】Best Time to Buy and Sell Stock I/II

    Best Time to Buy and Sell Stock I 题目: Say you have an array for which the ith element is the price o ...

  6. 按照Right-BICEP要求对实验二进行测试

    我的代码实现的功能很简单,在最基本的功能上,包括有无括号(0/1),有无负数(0/1),有无乘除法(0/1)验证程序的正确性,测试用例为8个,2^3个,也就覆盖了所有的代码路径. 测试计划: 基本功能 ...

  7. python笔记06-----常用模块(time,os,sys,random)

    模块 1. 模块的定义和导入 定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py对应的模块名:test) ...

  8. Linux命令-用户、用户组、权限

    参考资料: http://www.linuxidc.com/Linux/2014-07/104445.htm    Linux入门教程:如何手动创建一个Linux用户 http://www.linux ...

  9. Struts动态表单(DynamicForm)

    动态表单的含义是不要手动定义,直接在配置文件中进行定义. 1.手动进行定义 <form-beans > <form-bean name="userForm" ty ...

  10. redis 安装报错 jemalloc/jemalloc.h: No such file or directory。

    对于redis安装的这个错误,我在博客redis 安装 与错误解决办法最后有提及,但是网上大部分文章的对这个问题的解答都是有误的.所以在这里单列出来. 错误内容: jemalloc/jemalloc. ...