android开发,  Computer Science

Android开机问题分析工具Bootchart使用方法(一)

  1. 安装环境
  2. 修改代码
  3. 运行bootchart
  4. 处理数据
  • 安装环境
linux下执行
sudo apt-get install bootchart
sudo apt-get install pybootchartgui
  • 修改代码
当执行发生一下错误提示后
parsing 'bootchart/bootchart.tgz'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
merged 0 logger processes
pruned 223 process, 0 exploders, 13 threads, and 1 runs
False
Traceback (most recent call last):
  File "/usr/bin/bootchart", line 23, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/dist-packages/pybootchartgui/main.py", line 137, in main
    render()
  File "/usr/lib/python2.7/dist-packages/pybootchartgui/main.py", line 128, in render
    batch.render(writer, res, options, filename)
  File "/usr/lib/python2.7/dist-packages/pybootchartgui/batch.py", line 41, in render
    draw.render(ctx, options, *res)
  File "/usr/lib/python2.7/dist-packages/pybootchartgui/draw.py", line 282, in render
    draw_chart(ctx, IO_COLOR, True, chart_rect, [(sample.time, sample.util) for sample in disk_stats], proc_tree)
  File "/usr/lib/python2.7/dist-packages/pybootchartgui/draw.py", line 201, in draw_chart
    yscale = float(chart_bounds[3]) / max(y for (x,y) in data)
ZeroDivisionError: float division by zero

修改下列代码内容(位于python安装目录下)

draw.py
将200, 201行由: 
 xscale = float(chart_bounds[2]) / max(x for (x,y) in data)
 yscale = float(chart_bounds[3]) / max(y for (x,y) in data)
 改为: 
 xscale = float(chart_bounds[2]) / max(0.00001, max(x for (x,y) in data))
 yscale = float(chart_bounds[3]) / max(0.00001, max(y for (x,y) in data))

parsing.py:
 在156行后添加: 
 if interval == 0:
 interval = 1
 修改后如下: 
 sums = [ a - b for a, b in zip(sample1.diskdata, sample2.diskdata) ]
 if interval == 0:
 interval = 1

 samples.py:
 在81行后添加: 
 if interval == 0:
 interval = 1
 修改后如下: 
 def calc_load(self, userCpu, sysCpu, interval):
 if interval == 0: 
 interval = 1

  • 运行bootchart

bootchart位于手机 data/bootchart目录下

使用bootchart时执行目录下的enabled文件
touch data/bootchart/enabled

重新开机即可记录时间数据,开机完成后会在统计目录下生成4个文件:
header
process_diskstats.log
proc_ps.log
proc_stat.log

  • 处理数据

最后处理数据

第一步打包数据压缩
可以使用自带的脚本,位于AOSP下的system/core/init 下的grap-bootchart.sh,但这里仅仅需要打包而已,不需要这么麻烦
将上述4个文件pull出来直接压缩也行
tar -czf bootchart.tgz *
得到bootchart.tgz文件即压缩成功

第二步交给bootchart去处理数据得到png图片
执行bootchart bootchart.tgz 即可生成png图片进行问题分析

留言

您的邮箱地址不会被公开。 必填项已用 * 标注