安卓开机启动性能优化之-bootchart相关工具使用及查看

news2024/12/23 6:22:30

背景:

开机启动相关的详细信息,一般都是可以通过logcat中查看boot_progress相关查看,这种方式查看相对不那么方便,毕竟开机过程中涉及的进程较多,要查看也较多,而且还经常需要查看代码才可以对应起来,但有另一种方式可以通过看bootchart方式更加直观

ubuntu上相关方法

步骤1:

adb shell touch /data/bootchart/enabled

然后重启设备
重启后就会在对应的data/bootchart目录有如下文件
在这里插入图片描述这些日志文件其实就是bootchart绘制图片的基础,下面这些步骤其实就是对这log转换成图表。

步骤2:

安装相关的bootchart的库

test@test:~/demos$ git clone https://gitee.com/wasdzy/bootchart
Cloning into 'bootchart'...
remote: Enumerating objects: 2614, done.
remote: Counting objects: 100% (2614/2614), done.
remote: Compressing objects: 100% (956/956), done.
Receiving objects:  43% (1125/2614), 868.00 KiB | 561.00 KiB/s
remote: Total 2614 (delta 1620), reused 2614 (delta 1620), pack-reused 0
Receiving objects: 100% (2614/2614), 1.85 MiB | 767.00 KiB/s, done.
Resolving deltas: 100% (1620/1620), done.

再进行编译

test@test:~/demos$ cd bootchart/
test@test:~/demos/bootchart$ make

可以看到已经编译出来了pybootchartgui.py文件
在这里插入图片描述
再进行安装

test@test:~/demos/bootchart$ sudo make install
[sudo] password for test: 
install -d /usr/lib/python3.8/site-packages/pybootchartgui
cp pybootchartgui/*.py /usr/lib/python3.8/site-packages/pybootchartgui
install -D -m 755 pybootchartgui.py /usr/bin/pybootchartgui
[ -z "" ] && ( cd /usr/lib/python3.8/site-packages/pybootchartgui ; \
	python3 /usr/lib/python3.8/py_compile.py *.py ; \
	PYTHONOPTIMIZE=1 python3 /usr/lib/python3.8/py_compile.py *.py ); :
install -d /lib/bootchart/tmpfs
install -m 755 -D bootchartd /sbin/bootchartd
install -m 644 -D bootchartd.conf /etc/bootchartd.conf
install -m 755 -D bootchart-collector /lib/bootchart/bootchart-collector
mkdir -p /lib/systemd/system
install -m 0644 bootchart2.service \
       bootchart2-done.service \
       bootchart2-done.timer \
       /lib/systemd/system
install -m 644 -D README /usr/share/docs/bootchart/README
install -m 644 -D README.pybootchart /usr/share/docs/bootchart/README.pybootchart
mkdir -p /usr/share/man/man1
gzip -c bootchart2.1 > /usr/share/man/man1/bootchart2.1.gz
gzip -c bootchartd.1 > /usr/share/man/man1/bootchartd.1.gz
gzip -c pybootchartgui.1 > /usr/share/man/man1/pybootchartgui.1.gz

步骤3:

执行aosp自带的grab-bootchart.sh

test@test:~/disk2/aosp14$ ./system/core/init/grab-bootchart.sh 
adb server version (41) doesn't match this client (39); killing...



* daemon started successfully
Traceback (most recent call last):
  File "/usr/bin/pybootchartgui", line 20, in <module>
    from pybootchartgui.main import main
ModuleNotFoundError: No module named 'pybootchartgui'
gio: file:///home/test/disk2/aosp14/bootchart.png: Error when getting information for file “/home/test/disk2/aosp14/bootchart.png”: No such file or directory
Clean up /tmp/android-bootchart/ and ./bootchart.png when done

发现还是会传递报错找不到,干脆直接依赖编译出来的
手动修改init/grab-bootchart.sh文件

diff --git a/init/grab-bootchart.sh b/init/grab-bootchart.sh
index 2c56698a1..37c5a4eeb 100755
--- a/init/grab-bootchart.sh
+++ b/init/grab-bootchart.sh
@@ -17,6 +17,7 @@ for f in $FILES; do
     adb "${@}" pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/null
 done
 (cd $TMPDIR && tar -czf $TARBALL $FILES)
-pybootchartgui ${TMPDIR}/${TARBALL}
+#pybootchartgui ${TMPDIR}/${TARBALL}
+~/demos/bootchart/pybootchartgui.py ${TMPDIR}/${TARBALL}
 xdg-open ${TARBALL%.tgz}.png
 echo "Clean up ${TMPDIR}/ and ./${TARBALL%.tgz}.png when done"

最重要就是把pybootchartgui直接变成~/demos/bootchart/pybootchartgui.py
再执行

test@test:~/disk2/aosp14$ ./system/core/init/grab-bootchart.sh
parsing '/tmp/android-bootchart/bootchart.tgz'
parsing 'header'
parsing 'proc_stat.log'
parsing 'proc_ps.log'
parsing 'proc_diskstats.log'
merged 0 logger processes
pruned 66 process, 0 exploders, 17 threads, and 0 runs
bootchart written to 'bootchart.png'
Clean up /tmp/android-bootchart/ and ./bootchart.png when done

注意如果有的机器有ImportError: No module named cairo报错,则需要sudo apt-get install python-cairo
执行后自动就打开了表格图:
在这里插入图片描述

windows上相关方法

上面是对于ubuntu系统上,也可以windows上使用,因为上面说过本质其实就是data/bootchart下面日志进行解析生成png
这里可以把日志打包,然后bootchart解析。
adb shell进入设备对日志进行打包:

emulator_x86_64:/data/bootchart #  tar -czvf bcl.tar.gz *log
proc_diskstats.log
proc_ps.log
proc_stat.log

打包好成了 bcl.tar.gz文件,再进行导出用bootchart.jar进行解析生成图片
bootchart.jar下载地址:
https://share.weiyun.com/NdM2ZE4F

接下来在导出日志进行解析

test@test:~/Downloads$ adb pull /data/bootchart/bcl.tar.gz .
test@test:~/Downloads$ java -jar bootchart.jar bcl.tar.gz 
Parsing bcl.tar.gz
Wrote image: ./bcl.png

在这里插入图片描述

bootchart前后对比法:

上面通过图形绘制绘制出开机启动的时间后,可以通过图形大概看出时间点,但是明显图形时间坐标不够精确,那么优化前后有没有什么方法可以可以精确对比出两次优化时间呢?这个android其实也是有自带相关的工具

具体可以参考如下py文件:
system/core/init/compare-bootcharts.py

具体原理可以看这个脚本,就是对比相关主要进程的log的time

在这里插入图片描述

具体的使用对比方式:
log文件打包成bootchart.tgz
在这里插入图片描述
在这里插入图片描述
然后使用如下命令:

test@test:~/Downloads$ ~/disk2/aosp14/system/core/init/compare-bootcharts.py bcl1 bcl
process: baseline experiment (delta)
 - Unit is ms (a jiffy is 9 ms on the system)
------------------------------------
/system/bin/surfaceflinger: 6561 5628 (-933)
/system/bin/bootanimation: 7104 6104 (-1000)
zygote64: 6361 5438 (-923)
zygote: 6361 5447 (-914)
system_server: 17428 15723 (-1704)
bootanimation ends at: 31809 30142 (-1666)

上面就有对比出相关surfaceflinger,bootanimation,system_server时间等

具体详情试看方式:
投屏专题部分:
https://mp.weixin.qq.com/s/IGm6VHMiAOPejC_H3N_SNg

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接:
https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3时间选择器datetimerange在数据库存开始时间和结束时间

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

C++知识点:类和对象(自用)

类和对象 1. 类和对象的关系2. 对象指针3. 在堆上创建对象4. 成员访问限定符5. 名字编码&#xff08;Name Mangling&#xff09;6.构造函数7.构造函数的重载8.初始化列表8. 成员变量初始化的顺序&#xff08;通过初始化列表&#xff09;9. 初始化 const 成员变量10. 析构函数11…

【Web爬虫逆向】“企业预警通”模糊查询公司信息,逆向案例实战

“企业预警通”模糊查询公司信息&#xff0c;逆向案例实战 功能介绍效果演示思路分析1、先找到模糊查询的接口2、分析headers与params中参数并进行构造3、JS逆向&#xff0c;跟栈&#xff0c;找到js中key和dataCategory的生成方法&#xff0c;并完成js补码构造4、成功还原key后…

嵌入式中什么是三次握手

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 在网络数据传输中&#xf…

Mysql的主从复制(重要)和读写分离(理论重要实验不重要)

一、主从复制&#xff1a;架构一般是一主两从。 1.主从复制的模式&#xff1a; mysql默认模式为异步模式&#xff1a;主库在更新完事务之后会立即把结果返回给从服务器&#xff0c;并不关心从库是否接收到以及从库是否处理成功。缺点&#xff1a;网络问题没有同步、防火墙的等…

论文阅读:Deep_Generic_Dynamic_Object_Detection_Based_on_Dynamic_Grid_Maps

目录 概要 Motivation 整体框架流程 技术细节 小结 不足 论文地址&#xff1a;Deep Generic Dynamic Object Detection Based on Dynamic Grid Maps | IEEE Conference Publication | IEEE Xplore 概要 该文章提出了一种基于动态网格图&#xff08;Dynamic Grid Maps&a…

DevExpress WPF中文教程:如何完成GridControl的列和编辑器配置?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

基于微信小程序的校园警务系统/校园安全管理系统/校园出入管理系统

摘要 伴随着社会以及科学技术的发展&#xff0c;小程序已经渗透在人们的身边&#xff0c;小程序慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;小程序这一名词已不陌生&#xff0c;越来越多的学校机构等都会定制一款属于自己个性化的小程…

Exponential Moving Average (EMA) in Stable Diffusion

1.Moving Average in Stable Diffusion (SMA&EMA) 1.Moving average 2.移动平均值 3.How We Trained Stable Diffusion for Less than $50k (Part 3) Moving Average 在统计学中&#xff0c;移动平均是通过创建整个数据集中不同选择的一系列平均值来分析数据点的计算。 …

树莓集团——缔造国际领先的数字媒体产业孵化基地

在数字化浪潮席卷全球的背景下&#xff0c;树莓集团以其卓越的创新能力&#xff0c;正在全力打造一个全球领先的数字媒体产业基地。成都国际数字影像产业园不仅是技术和创意的汇聚地&#xff0c;更是数字内容创新与应用的典范&#xff0c;推动数字媒体产业迈向新的高度。 树莓集…

vue.js入门

目录 一. 框架概述 二. vue常用命令 2.1 插值表达式 2.2 v-text 2.3 v-html 2.4 v-on 2.5 v-model 2.6 v-show 2.7 v-if 2.8 v-else 2.9 v-bind 2.10 v-for 三. vue生命周期函数 一. 框架概述 我们之前写的javaScript代码都是原生的,而框架是在基础语言之上,对其进…

pytorch-梯度下降

梯度下降 y x 2 ∗ s i n ( x ) y ′ 2 x s i n x x 2 c o s x x 1 x − Δ y ′ ( x ) 其中 Δ 表示学习率&#xff0c; y ′ ( x ) 代表 y 在 x 点处关于 x 的梯度。 y x^2 * sin(x) \\ y 2xsinxx^2cosx \\ x_1 x - \Delta y(x) \\ 其中 \Delta 表示学习率&#xff0c…

qt表格模型视图

Qt 提供了一套强大的模型/视图框架&#xff0c;允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中&#xff0c;表格视图&#xff08;TableView&#xff09;和模型&#xff08;TableModel&#xff09;是这种框架的一部分&#xff0c;常用于显示和编辑表格数据。 以下是…

便携式气象仪:科技赋能,让气象观测更智能

随着科技的快速发展&#xff0c;越来越多的领域受益于技术的进步。其中&#xff0c;气象观测领域也不例外。传统的气象观测设备虽然精确可靠&#xff0c;但往往体积庞大、携带不便&#xff0c;且需要专业人员进行操作和维护。而便携式气象仪的出现&#xff0c;则打破了这一局限…

BGP路由反射器

原理概述 缺省情况下&#xff0c;路由器从它的一个 IBGP对等体那里接收到的路由条目不会被该路由器再传递给其他IBGP对等体&#xff0c;这个原则称为BGP水平分割原则&#xff0c;该原则的根本作用是防止 AS内部的BGP路由环路。因此&#xff0c;在AS内部&#xff0c;一般需要每台…

深度解读大语言模型中的Transformer架构

一、Transformer的诞生背景 传统的循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;在处理自然语言时存在诸多局限性。RNN 由于其递归的结构&#xff0c;在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…

《知识点扫盲 · Redis 序列化器》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【2024最新版】Stable diffusion汉化版安装教程(附SD安装包),一键激活,永久免费!

目前广泛使用的Stable Diffusion Web UI简称(SDWebUI)是发布在开源平台Github上的一个Python项目,与通常的软件安装方法不同,这个项目并不是下载并安装即可使用的应用程序,而是需要准备执行环境,编译源码. 如果你是一个新手不会安装,现在可以直接使用一键启动包. 例如:国内的…

【Linux】信号量与生产消费模型

我们已经实现过锁条件变量的PC模型&#xff0c; 但是BlockingQueue并不能进行生产与消费的并发&#xff0c;原因在于我们使用的是STL提供的队列&#xff0c;进行了一个适配&#xff0c;底层的实现可能会修改到成员变量造成未知的错误。 而这次我们选择使用环形队列&#xff08…

python实现盲反卷积算法

python实现盲反卷积算法 盲反卷积算法算法原理算法实现Python实现详细解释优缺点应用领域盲反卷积算法 盲反卷积算法是一种图像复原技术,用于在没有先验知识或仅有有限信息的情况下,估计模糊图像的原始清晰图像和点扩散函数(PSF)。盲反卷积在摄影、医学成像、天文学等领域…