最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

安卓的 bootchart 是如何工作的

2022-04-11 22:47 作者:BDZNH  | 我要投稿

想要分析安卓的啟動(dòng)過程中的詳細(xì)信息,比如耗時(shí)、CPU/IO占用情況,我們可以通過這樣一條命令

然后重啟安卓設(shè)備。開機(jī)之后,執(zhí)行命令

這個(gè) sh 腳本長(zhǎng)這個(gè)樣子

腳本做的事情實(shí)際上就是,把安卓上邊的 /data/bootchart 文件夾拉取下來之后,通過 tar 命令把文件夾內(nèi)的 header proc_stat.log proc_ps.log proc_diskstats.log 壓縮成一個(gè) tgz 文件,然后交給 pybootchartgui 處理成一個(gè)png。這個(gè)png圖片里面就會(huì)顯示安卓啟動(dòng)過程的信息了。
通常,你能得到這樣一張類似這樣的圖片(下圖是小米手機(jī)的示例)


bootchart 是如何工作的呢?

查看 init.rc

這里可以看到,bootchart 每次開機(jī)的時(shí)候都 start 一下,這里是做了什么事情呢?

從文件 system/core/init/bootchart.cpp 里面可以看到

從這里可以看出來,如果識(shí)別到第 1 個(gè)參數(shù)是 start,執(zhí)行了 do_bootchart_start ,do_bootchart_start 內(nèi)又判斷文件`/data/bootchart/enabled`,如果文件存在則開了一個(gè)線程執(zhí)行 bootchart_thread_main ,這個(gè)函數(shù)體內(nèi)容如下

可以看到,這里開了一個(gè)循環(huán),每過 200ms ,檢查一下 g_bootcharting_finished 是否為 true,不為 true 則讀取一邊系統(tǒng)的節(jié)點(diǎn)

  1. state_log --> /proc/state

  2. disk_log --> /proc/diskstats

  3. proc_log 則是讀取一遍 /proc/pid/cmdline和stat。

bootchart 什么時(shí)候停止呢?
回到 init.rc

從這里知道,bootchart 在屬性 sys.boot_completed 變?yōu)?1 時(shí)停止記錄。
停止記錄時(shí),init 將 g_bootcharting_finished 置為 false,跳出,于是記錄log的線程停止。

那么什么時(shí)候 sys.boot_completed 變成 1 呢?
查看文件 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

安卓啟動(dòng)完成時(shí),這個(gè)屬性被設(shè)置為 1 ,于是 bootchart 停止記錄這個(gè)時(shí)候,應(yīng)用會(huì)收到開機(jī)完成的廣播。。安卓啟動(dòng)流程可以上網(wǎng)查閱,本文不再敘述。

安卓的 bootchart 是如何工作的的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
西充县| 潞城市| 南木林县| 论坛| 华坪县| 芦山县| 汶上县| 万全县| 思南县| 江永县| 航空| 兴安县| 巴彦淖尔市| 泾川县| 襄樊市| 巴楚县| 寿宁县| 错那县| 葫芦岛市| 南丹县| 阿拉善盟| 泗水县| 辉南县| 石渠县| 平顺县| 新余市| 黄石市| 荣昌县| 绿春县| 健康| 玉树县| 深水埗区| 辽阳市| 武隆县| 会东县| 固原市| 新营市| 玉龙| 德格县| 年辖:市辖区| 泰来县|