无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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ó)家法律
分宜县| 博客| 德保县| 滁州市| 揭西县| 柞水县| 梁河县| 积石山| 乳山市| 凤城市| 嵊泗县| 耿马| 墨脱县| 陆丰市| 汪清县| 青阳县| 海南省| 岳普湖县| 乡宁县| 吉安市| 怀化市| 玛沁县| 阿合奇县| 阜平县| 河间市| 土默特左旗| 东乡族自治县| 承德市| 肃南| 兴和县| 临城县| 桃园县| 康乐县| 万全县| 土默特左旗| 吉水县| 临沭县| 林口县| 循化| 尚义县| 古交市|