Bootchart抓取 - Android源码分析及时间参数

本文深入探讨了Android系统Bootchart的源码,特别是针对不同版本(5、6-7、8+)的时长控制差异。在Android 5中,可通过/data/bootchart-start设置采集时长,而在Android 8+版本中,时长控制被移除,由init.rc自动管理。作者分析了启动和停止采集的触发条件,并提供了相关源码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文针对Android系统Bootchart部分源码进行了分析,并给出了Android-5、6-7、8+版本的参数差异,解释了8+以上的时长无法手动控制的原因,并对bootchart源码进行了分析

研究背景

主要是网上的资料,关于如何控制采集bootchart时长的方法不一,且尝试过几种方法均无法控制后,遂看了下Android中bootchart源码,分析了生成header、proc_diskstats、proc_ps、proc_stat的过程。

已有的时长控制的方法:

  1. echo $TIME_OUT > /data/bootchart/start
    其中的 $TIME_OUT为时长,比如采集50s,echo 50 > /data/bootchart/start
  2. echo $TIME_OUT> /data/bootchart-start
    与方法1一致, $TIME_OUT为时长。

测试了下,针对我的手机+虚拟机,两种方法均无法控制时长,所以看了下Android源码,分析了下原因。

采集时长控制

通过查看Android源码,发现针对Android-5、6-7、8+版本中bootchart生成变化较多,针对差异较大的时长进行了分析。

Android 5

先上源码链接bootchart.cbootchart.h,挑出关于时间控制的源码。

  • 宏定义文件名
#define LOG_STARTFILE   "/data/bootchart-start"
  • 如果/data/bootchart-start文件中有数值,且不为0,设置timeout
buff[0] = 0;
proc_read( LOG_STARTFILE, buff, sizeof(buff) );
if (buff[0] != 0) {
   
   
    timeout = atoi(buff);
}
  • 如果/data/bootchart-start文件中timeout超过10*60,则设置timeout为10*60。再将timeout转化为具体的count,通过采集的index去跳出采集。
# define BOOTCHART_MAX_TIME_SEC        (10*60) /* max polling time in seconds */
# define BOOTCHART_POLLING_MS   200   /* polling period in ms */
if (timeout == 0)
    return 0;
if (timeout > BOOTCHART_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值