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

背景:

开机启动相关的详细信息,一般都是可以通过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; doadb "${@}" pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/nulldone(cd $TMPDIR && tar -czf $TARBALL $FILES)
-pybootchartgui ${TMPDIR}/${TARBALL}
+#pybootchartgui ${TMPDIR}/${TARBALL}
+~/demos/bootchart/pybootchartgui.py ${TMPDIR}/${TARBALL}xdg-open ${TARBALL%.tgz}.pngecho "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.mzph.cn/diannao/50381.shtml

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

相关文章

Linux系统上安装zookeeper

百度网盘 通过网盘分享的文件&#xff1a;zookeeper_linux 链接: https://pan.baidu.com/s/1_hybXZVwTRkotz0VbwbSMw?pwd8888 提取码: 8888 1.将压缩包拖进虚拟机 2.解压压缩包 cd /ruanjian/zookeeper/ tar -zxvf apache-ZooKeeper-3.7.2-bin.tar.gz3. 进入到conf目录 cd …

《python程序语言设计》第6章12题 显示字符,使用下面的函数头,编写一个打印字符的函数

def printChars(ch1, ch2, numberPerLine):a ord(ch1)b ord(ch2)count 0for i in range(a, b 1):count 1print(chr(i), end" ")if count % numberPerLine 0:print()printChars("1", "Z", 10)

以FastGPT为例提升Rag知识库应用中的检索召回命中率

提升Rag知识库应用中的检索召回命中率 在构建Rag&#xff08;Retrieval-Augmented Generation&#xff09;知识库应用时&#xff0c;检索召回知识片段的命中率是至关重要的。高效、准确的检索机制是确保AI系统能够精准响应用户查询的基础。当前&#xff0c;FastGPT主要采用三种…

使用python中的特殊字典——defaultdict

专栏总目录 一、defaultdict说明 在Python中是一个特殊类型的字典&#xff0c;它是collections模块中的一个类defaultdict的实例。这个字典与普通的字典dict不同之处在于&#xff0c;当你试图访问一个不存在的键时&#xff0c;defaultdict会自动创建一个新条目&#xff0c;其值…

Oracle核心进程详解并kill验证

Oracle核心进程详解并kill验证 文章目录 Oracle核心进程详解并kill验证一、说明二、核心进程详解2.1.PMON-进程监控进程2.2.SMON-系统监控进程2.3.DBWn-数据库块写入进程2.4. LGWR-日志写入器进程2.5. CKPT-检查点进程 三、Kill验证3.1.kill ckpt进程3.2.kill pmon进程3.3.kill…

智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界

一、方案背景 科技高速发展的今天&#xff0c;工地施工已发生翻天覆地的变化&#xff0c;传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题&#xff0c;人力资源的不足也进一步加剧了监管不到位的局面&#xff0c;严重影响了施工进度质量和安全。 视频监控…

中小企业数字化转型的关键五步,你了解吗?

在信息技术迅猛发展的当下&#xff0c;数字化转型已成为中小企业提升竞争力、实现可持续发展的关键策略。在数字化转型过程中&#xff0c;工业软件作为贯穿生产全流程的智能化引擎&#xff0c;其选择与应用显得尤为关键。那么&#xff0c;中小企业应如何科学合理的规划数字化转…

Vue前端页面嵌入mermaid图表--流程图

一、安装Mermaid 首先&#xff0c;你需要在你的项目中安装Mermaid。可以通过npm或yarn来安装&#xff1a; npm install mermaid --save # 或者 yarn add mermaid结果如图&#xff1a; 二、Vue 方法一&#xff1a;使用pre标签 使用ref属性可以帮助你在Vue组件中访问DOM元素 …

数据结构 | LinkedList与链表

前言 ArrayList底层使用连续的空间,任意位置(尤其是0位置下标)插入或删除元素时,需要将该位置后序元素 整体 往前或往后搬移,故时间复杂度为O(N). 优点(给定一个下标,可以快速查找到对应的元素,时间复杂度为O(1))增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗.增容一…

【权威发布】第二届雷达、信号与信息处理国际会议(RSIP 2024)

第二届雷达、信号与信息处理国际会议 2024 International Conference on Radar, Signal and Information Processing 【1】会议简介 第二届雷达、信号与信息处理国际会议是一次聚焦雷达技术、信号处理及信息处理领域最新研究成果和前沿趋势的盛会。会议旨在汇聚国内外雷达与信号…

【Django】anaconda环境变量配置及配置python虚拟环境

文章目录 配置环境变量配置python虚拟环境查看conda源并配置国内源在虚拟环境中安装django 配置环境变量 control sysdm.cpl,,3笔者anaconda安装目录为C:\ProgramData\anaconda3 那么需要加入path中的有如下三个 C:\ProgramData\anaconda3 C:\ProgramData\anaconda3\Scripts C:…

【C++】类和对象(三)完结篇

个人主页 创作不易&#xff0c;感谢大家的关注&#xff01; 文章目录 ⭐一、再探构造函数1.初始化列表 &#x1f389;二、类型转换&#x1f3e0;三、static成员&#x1f3dd;️四、友元⏱️五、内部类&#x1f388;六、匿名对象&#x1f3a1;七、在拷贝对象时的编译器优化 ⭐一…

火焰传感器 - 从零开始认识各种传感器【第十六期】

火焰传感器|从零开始认识各种传感器 1、什么是火焰传感器 火焰传感器是一种用于检测火焰或火光的传感器。它可以快速、准确地检测到周围环境中火源的存在&#xff0c;从而在火灾发生之初及时向消防人员或相关机构发送报警信息&#xff0c;以便及时采取措施进行火灾扑救。此外…

C# 贪吃蛇游戏

贪吃蛇游戏可分为手动玩法和自动玩法 冯腾飞/贪吃蛇

【网络安全学习】 SQL注入01:基础知识

&#x1f4bb; 1. 什么是SQL注入 SQL注入是一种针对Web程序中数据库层的安全漏洞的攻击方式。它利用了程序对用户输入数据合法性的判断或过滤不严&#xff0c;允许攻击者在设计不良的程序中添加额外的SQL语句&#xff0c;从而执行计划外的命令或访问未授权的数据。攻击者可以通…

Docker搭建私有仓库harbor(docker 镜像仓库搭建)

Harbor介绍 Docker容器应用的开发和运行离不开可靠的镜像管理&#xff0c;虽然Docker官方也提供了公共的镜像仓库&#xff0c;但是从安全和效率等方面考虑&#xff0c;部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目…

Android statsd 埋点简析

源码基于&#xff1a;Android U 0. 前言 最近在研究 Android 自带的系统数据指标采集功能&#xff0c;框架依旧很严谨、完美&#xff0c;这里做个分享。 1. Android S 之后变化 stats 的代码从 framework 或 system/core 中转移到了 packages/modules/StatsD 目录中。 2. 框架…

IEC104转MQTT网关轻松将IEC104设备数据传输到Zabbix、阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition云平台

随着工业4.0的深入发展和物联网技术的广泛应用&#xff0c;IEC 104&#xff08;IEC 60870-5-104&#xff09;作为电力系统中的重要通信协议&#xff0c;正逐步与各种现代监控、管理和云平台实现深度融合。IEC104转MQTT网关BE113作为这一融合过程中的关键设备&#xff0c;其能够…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

通过IEC104转MQTT网关轻松接入阿里云平台

随着智能电网和物联网技术的飞速发展&#xff0c;电力系统中的传统IEC 104协议设备正面临向现代化、智能化转型的迫切需求。阿里云作为全球领先的云计算服务提供商&#xff0c;其强大的物联网平台为IEC 104设备的接入与数据处理提供了强大的支持。本文将深入探讨钡铼网关在MQTT…