开机性能-如何抓取开机systrace
一、理论
1.背景
2.sepolicy修改



Android版本 Api Level SDK
Android 14 (Developer Preview)
Android 13.0(T) 33
Android 12.0(S) 31,32
Android 11.0(R) 30
Android 10.0(Q) 29
Android 9.0(Pie) 28
Android 8.1(Oreo) 27
Android 8.0(Oreo) 26
Android 7.1(Nougat) 25
Android 7.0(Nougat) 24
Android 6.0(Marshmallow) 23
Android 5.1(Lollipop) 22
Android 5.0(Lollipop) 21
Android 4.4W(KitKat Wear) 20
Android 4.4(KitKat) 19
Android 4.3(Jelly Bean) 18
Android 4.2(Jelly Bean) 17
Android 4.1(Jelly Bean) 16
Android 4.0.3(IceCreamSandwich) 15
Android 4.0(IceCreamSandwich) 14
Android 3.2(Honeycomb) 13
Android 3.1(Honeycomb) 12
Android 3.0(Honeycomb) 11
Android 2.3.3(Gingerbread) 10
Android 2.3(Gingerbread) 9
Android 2.2(Froyo) 8
Android 2.1(Eclair) 7
Android 2.0.1(Eclair) 6
Android 2.0(Eclair) 5
Android 1.6(Dout) 4
Android 1.5(Cupcake) 3
Android 1.1(Base) 2
Android 1.0(Base) 1
3. 抓取trace
3.1 QCOM平台
3.1.1 抓取atrace日志
adb push atrace.rc /system/etc/init/atrace.rc
$ adb shell
# setprop persist.traced.enable 0
# setprop persist.debug.atrace.boottrace 1
$ adb shell atrace --async_stop -z -c -o /data/local/tmp/atrace.out
$ python systrace.py --from-file=atrace.out
3.1.2 抓取zygote启动阶段的trace数据
$ adb shell
# setprop persist.debug.atrace.boottrace 0
修改设备上的init.rc文件
首先将设备中的init.rc文件pull出来
$ adb pull /system/etc/init/hw/init.rc
修改init.rc文件

$ adb push init.rc /system/etc/init/hw/
3.2 MTK平台
3.2.1 抓取atrace日志
$ adb shell
# setprop persist.traced.enable 0
# setprop persist.vendor.boot_trace 1
$ adb shell "cat /sys/kernel/tracing/trace" > SYS_FRACE
二、执行操作
如需在启动过程中启用 systrace,请执行以下操作:
在 frameworks/native/cmds/atrace/atrace.rc 中,修改如下:
write /sys/kernel/debug/tracing/tracing_on 0write /sys/kernel/tracing/tracing_on 0
更改为:
write /sys/kernel/debug/tracing/tracing_on 1write /sys/kernel/tracing/tracing_on 1
这将启用跟踪功能(默认处于停用状态)。
在 device.mk 文件中,添加以下:
PRODUCT_PROPERTY_OVERRIDES += debug.atrace.tags.enableflags=802922
PRODUCT_PROPERTY_OVERRIDES += persist.traced.enable=0
在设备专属 init.rc 文件中,添加以下行:
on property:sys.boot_completed=1 // This stops tracing on boot complete
write /d/tracing/tracing_on 0
write /d/tracing/events/ext4/enable 0
write /d/tracing/events/f2fs/enable 0
write /d/tracing/events/block/enable 0
在设备启动后,提取跟踪记录:
adb root && adb shell atrace --async_stop -z -c -o /data/local/tmp/boot_trace
adb pull /data/local/tmp/boot_trace
三、项目中实际应用(MTK QCOM通用)
1.system/core/rootdir/init.rc 添加如下:开机完成关闭trace
on property:sys.boot_completed=1write /d/tracing/tracing_on 0write /d/tracing/events/ext4/enable 0write /d/tracing/events/f2fs/enable 0write /d/tracing/events/block/enable 0
2.frameworks/native/cmds/atrace/atrace.rc
原本start boottrace 触发条件是on late-init persist.debug.atrace.boottrace=1
下面的修改是直接将on late-init 改成了on early-init 并将persist.debug.atrace.boottrace 条件去掉直接触发start boottrace 可以不用使用我下面的修改,可以按照你们需要调整start boottrace 例如可以在init.rc 不同的trigger阶段去启动boottrace service.

3.device/qcom/xxx/xxxx.mk 或者build/target/product/base_system.mk 添加属性配置

4.BoardConfig.mk BOARD_KERNEL_CMDLINE 追加下面字段
BOARD_KERNEL_CMDLINE += trace_buf_size=64M trace_event=cpu_frequency,sched_cpu_util,sched_boost_cpu,cpufreq_interactive,cpu_idle,cpu_frequency,cpu_frequency_limits,sched_wakeup,sched_switch,sched_blocked_reason,sched_cpu_hotplug
高通项目一般在device/qcom/xxxx/BoardConfig.mk
MTK项目一般在device/mediatek/xxxx/BoardConfig.mk
相关文章:

开机性能-如何抓取开机systrace
一、理论 1.背景 抓取开机 trace 需要使用 userdebug 版本,而我们测试开机性能问题时都要求使用 user 版本,否则会有性能损耗问题。因此想要在抓取开机性能trace 时,需要在 user 版本上打开 atrace 功能之后才能抓取 trace,默认 …...

VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置
【分享成果,随喜正能量】若人散乱心,乃至以一花,供养于画像,渐见无数佛。所以发一幅释迦牟尼佛像,与同修善友一起每日在微博上供养,只要有供养之心,便可积累功德。以此回向,愿求者如…...

模电课程设计
主要内容跟本科实验关系很大,可以用来借鉴。 包含文件有:实验报告、Multisim仿真文件,资料很全,有问题可以私信 目录 1、模电课设:用Multisim简单了解二极管 2、模电课设:用Multisim简析三极管与场效应…...

【2023研电赛】兆易创新命题三等奖: 低成本单母线电流永磁同步无感驱动器
本文为2023年第十八届中国研究生电子设计竞赛兆易创新企业命题三等奖以及决赛最佳论文奖分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有…...
原生Js 提取视频中的音频
Js提取视频中的音频 将视频中的音频轨道分离出来,生成 wav 文件播放或下载( Vue3 setup ) 代码实现 template <button><label for"file" id"filename">选择视频文件</label><input type"fi…...
设计模式-备忘录模式(Memento Pattern)
文章目录 前言一、备忘录模式的概念二、备忘录模式的实现三、备忘录优缺点优点:缺点:总结 前言 备忘录模式(Memento Pattern)是一种行为型设计模式,它用于捕获和存储对象的内部状态,以便在以后可以恢复到先…...

PHP对接阿里云虚拟号的实现(号码隐私保护)
fastadmin 封装框架 实现功能:AXN隐私号绑定、解绑; 场景:为店铺手机号开通虚拟号,用户联系店铺展示虚拟号码; 官方开放文档地址:https://help.aliyun.com/document_detail/59655.html?spma2c4g.111742…...

刷新单年发射纪录:SpaceX成功发射62次猎鹰9号火箭
SpaceX一直都致力于推进航天领域的发展。近日,该公司的猎鹰9号火箭再次刷新了单年发射纪录,目前已经成功发射了62次。除此之外,今年SpaceX还发射了一枚猎鹰火箭和一枚巨型火箭。马斯克表示,他的目标是实现每月10次猎鹰飞行&#x…...

项目打包docker镜像 | 上传nexus | jenkins一键构建
文章目录 前言准备实操1、打开docker的远程访问2、编写dockerfile文件3、指定nexus环境4、配置jenkins5、使用jenkins构建 总结 前言 Docker部署项目是指使用Docker容器化技术将应用程序及其依赖项打包成一个独立的、可移植的运行环境,并在各种操作系统和平台上进行…...

ios 运行ipa包 日志查看方式
方法一: 使用ideviceinstaller工具 # 安装ipa命令 brew install ideviceinstaller ideviceinstaller -i xxx.ipa# 查看运行日志 idevicesyslog# idevicesyslog 查找命令 idevicesyslog | grep test -A 3 -B 2 # 输出关键字所在行后3行,前2行) idevic…...

AUTOSARCAN-Tp协议
目录 一.单帧、首帧、连续帧、流控帧 单帧传输 SF单帧: 多帧传输 FF(首帧): CF(连续帧): FC(流控帧): 一.单帧、首帧、连续帧、流控帧 CAN诊断由发送端…...

【设计模式】组合模式实现部门树实践
1.前言 几乎在每一个系统的开发过程中,都会遇到一些树状结构的开发需求,例如:组织机构树,部门树,菜单树等。只要是需要开发这种树状结构的需求,我们都可以使用组合模式来完成。 本篇将结合组合模式与Mysq…...

恒林家居引入纷享销客CRM系统,领跑家居行业营销数字化进程
近日,恒林家居股份有限公司((股票代码:603661以下简称为“恒林家居”)携手纷享销客在湖州召开了CRM项目启动会。双方领导及核心项目人员齐聚一堂,展开了深度交流并达成了重要共识。 作为家居行业的领军企业…...

多线程-锁的种类
1 作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。在多线程编程中为了保障数据的一致性,我们通常需要在使用对象或者方法之前加锁,这时如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会…...
Hive 和 HDFS、MySQL 之间的关系
文章目录 HiveHDFSMySQL三者的关系 Hive、MySQL 和 HDFS 是三个不同的数据存储和处理系统,它们在大数据生态系统中扮演不同的角色,但可以协同工作以支持数据管理和分析任务。 Hive Hive 是一个基于 Hadoop 生态系统的数据仓库工具,用于管理和…...

【面试题】如何实现数组去重的?有几种方式?
前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 【国庆头像】- 国庆爱国 程序员头像!总有一款适合你! 1. 方法一:利用两层循环数组的splice方法 通过两层循环对数组…...

使用TCP方式拉取Canal数据
1 Canal对接Kafka联调 1.1 配置修改 canal.properties 修改 zk: canal.zkServers 10.51.50.219:2181instance.properties 开启配置项: canal.mq.dynamicTopic 是 Canal 的 MQ 动态 Topic 配置项: test_javaedge_01 是kafka 的 topicte…...
Docker安装mysql实战说明
安装前准备 在安装MySQL之前,你需要确保已经正确安装和配置了Docker,可以通过以下命令检查Docker是否已正确安装: docker --version如果Docker已经成功安装,你将看到Docker的版本信息。 下载mysql的镜像 Docker Hub是一个存储…...
前端DOM操作精解:基础概念、方法与最佳实践
引言 本文将深入探讨前端开发中的DOM操作,包括基础概念、常用方法和最佳实践。通过清晰易懂的解释和实际案例分析,我们将一起了解如何最有效地使用DOM操作来提升前端应用的用户体验。 一、DOM操作入门 在深入探讨DOM操作之前,我们先要理解…...
python sorted函数详解2023.9.11
sorted函数详解 1. 输入和输出2. key传入函数 1. 输入和输出 help(sorted) Help on built-in function sorted in module builtins: sorted(iterable, /, *, keyNone, reverseFalse)Return a new list containing all items from the iterable in ascending order.A custom k…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...