开机性能优化时间对比法-通过events日志部分实战

android系统开机流程归纳总结 一,首先我们要正确的抓取ylog日志 对ylog-ap-current-时间节点-android文件夹下的python文件进行解压。 得到0000日志。 二,然后我们可通过下面日志中的关键字来过滤出关键日志 Event log recorded: boot_progress_start (616) - 20433 ms Event log recorded: //boot_progress_st... 阅读详情

背景:

在很多同学做开启时间性能优化相关工作时候,经常用的比较多的方法肯定是抓取开机的perfetto或者systrace方法,这种方法当然是比较准确,一般抓取这个时候都是开始准备比较细微的局部优化。这个开机perfetto抓取方法已经在前面blog有进行介绍
性能优化:官方文档抓取开机trace给perfetto分析–Recording traces on Android boot
今天来给大家介绍另一种开机启动根据event日志log来进行粗略的瓶颈定位和检验优化成果指标的方式。

log日志查看开机过程实战:

涉及开机流程核心log如下

    'boot_progress_start',
    'boot_progress_preload_start',
    'boot_progress_preload_end',
    'boot_progress_system_run',
    'boot_progress_pms_start',
    'boot_progress_pms_system_scan_start',
    'boot_progress_pms_data_scan_start',
    'boot_progress_pms_scan_end',
    'boot_progress_pms_ready',
    'boot_progress_ams_ready',
    'boot_progress_enable_screen',
    'sf_stop_bootanim',
    'wm_boot_animation_done',

抓取方式:
需要使用adb logcat -b all或者-b events来抓取所有日志才可以

adb logcat -b all | grep -E "boot_p|sf_stop|wm_boot" 
adb logcat -b events | grep -E "boot_p|sf_stop|wm_boot"

使用后结果如下:

adb logcat -b all | grep -E "boot_p|sf_stop|wm_boot" 
03-29 05:23:06.836   903   903 I boot_progress_start: 11143
03-29 05:23:08.586   903   903 I boot_progress_preload_start: 12894
03-29 05:23:13.004   903   903 I boot_progress_preload_end: 17311
03-29 05:23:14.077  1700  1700 I boot_progress_system_run: 18384
03-29 05:23:15.547  1700  1700 I boot_progress_pms_start: 19854
03-29 05:23:16.374  1700  1700 I boot_progress_pms_system_scan_start: 20681
03-29 05:23:19.149  1700  1700 I boot_progress_pms_data_scan_start: 23456
03-29 05:23:19.198  1700  1700 I boot_progress_pms_scan_end: 23505
03-29 05:23:19.531  1700  1700 I boot_progress_pms_ready: 23838
03-09 15:55:58.370  1700  1700 I boot_progress_ams_ready: 27043
03-09 15:56:00.644  1700  1773 I boot_progress_enable_screen: 29318
03-09 15:56:08.079   998  1327 I sf_stop_bootanim: 36753
03-09 15:56:08.080  1700  1773 I wm_boot_animation_done: 36754

上面都是毫秒为单位,有了这个时间指标就可以拿来作为优化前后对比,或者各个机器之间的䶏。

它们分别代表各个阶段意义如下:

boot_progress_start

代表着Android屏幕点亮,开始显示启动动画,标志着kernel启动完成,本例中可以看出kernel启动耗时

boot_progress_preload_start

Zygote启动

boot_progress_preload_end

Zygote结束

boot_progress_system_run

SystemServer ready,开始启动Android系统服务,如PMS,APMS等

boot_progress_pms_start

PMS开始扫描安装的应用

boot_progress_pms_system_scan_start

PMS先行扫描/system目录下的安装包

boot_progress_pms_data_scan_start

PMS扫描/data目录下的安装包

boot_progress_pms_scan_end
PMS扫描结束

boot_progress_pms_ready
PMS就绪

boot_progress_ams_ready
AMS就绪

boot_progress_enable_screen
AMS启动完成后开始屏幕,从此以后屏幕才能响应用户的触摸,它在WindowManagerService发出退出开机动画的时间节点之前,而真正退出开机动画还会花费少许时间,具体依赖animation zip 包中的desc.txt。

sf_stop_bootanim
SF设置service.bootanim.exit属性值为1,标志系统要结束开机动画了,可以用来跟踪开机动画结尾部分消耗的时间

wm_boot_animation_done
开机动画结束,这一步用户能直观感受到开机结束

以上log可能过多,这里进行一下相关分类

Kernel part : boot_progress_start
Zygote time : boot_progress_preload_end - boot_progress_preload_start
/system Scan time : boot_progress_pms_data_scan_start - boot_progress_pms_system_scan_start
/data Scan time : boot_progress_pms_scan_end- boot_progress_pms_data_scan_start
Home activity start time : boot_progress_enable_screen- boot_progress_ams_ready

日志来源的源码:

有时候想要了解上面日志具体是在哪个时候进统计打印的时间,需要查询相关的源码,那么一般如何查找boot_progress_*相关日志打印的代码呢?

这里有个技巧哈,因为是events日志打印出来的,所以可以直接代码中进行查找,但是查找如果自己grep这个日志的tag会有如下结果:

grep boot_progress_enable_screen ./ -rn

./base/services/core/java/com/android/server/am/EventLogTags.logtags:11:3050 boot_progress_enable_screen (time|2|3)

发现只是找到了EventLogTags,所以要进行一下转换,转换方式如下:

boot_progress_enable_screen去除下划线"_"而且首字母大写,变成如下:
BootProgressEnableScreen
然后使用这个字符进行grep既可以。

grep BootProgressEnableScreen ./ -rn
./base/services/art-wear-profile:6289:PLcom/android/server/am/EventLogTags;->writeBootProgressEnableScreen(J)V
./base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java:97:import static com.android.server.am.EventLogTags.writeBootProgressEnableScreen;
./base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java:6337:            writeBootProgressEnableScreen(SystemClock.uptimeMillis());

可以看看ActivityTaskManagerService.java:6337行

在这里插入图片描述
更多framework实战开发干货,请关注下面“千里马学框架”

Android 分析EventLog 一.查看EventLog 使用命令: logcat -b events 二.logtags生成 2.1开机event log分析 1.获取开机时的event log: logcat -b events | grep boot_progress 输出: I boot_progress_start: 20726 I boot_progress_preload_start: 23255 I boot_progress_preload_end: 26806 I boot_progress_system_ru 阅读详情

相关推荐

Android开机时间优化

优化开机时间

gary_qing的博客 1731

Android开机速度优化

问题描述 开机时间相对参考机过慢,大约慢15s左右。Android 系统7.0。 问题分析 开机问题涉及的层次较多,大致有bootloader-->kernel-->Zygote-->PMS-->AMS-->Launcher 可以借助bootchart来分析,也可以直接通过log分析。不幸的是本项目机器因未知原因导致无法抓取到bootchart。 幸好在我浏览源码时发现了一个神器perfboot工具。具体在system/core/init/perfboot.py。 运行该

Venus 的博客 7983

ARM Linux平台Nginx编译部署实战:从源码构建到性能优化

在ARM架构的Linux环境中部署Web服务时,Nginx作为高性能的HTTP服务器和反向代理服务器,其编译与配置过程与x86平台存在显著差异。理解Nginx的模块化架构和工作原理,对于构建定制化、高性能的服务至关重要。通过源码编译,开发者可以针对特定ARM CPU特性进行优化,集成必要的第三方模块,并确保依赖库(如OpenSSL)的版本兼容性,从而充分发挥ARM平台在能效比和特定场景下的优势。这种深度定制能力在嵌入式设备、边缘计算节点以及采用鲲鹏、飞腾等处理器的服务器环境中具有重要价值。本文聚焦于ARM

weixin_30902251的博客 676

Android启动过程

SystemServer启动过程 1.设置时间、时区、语言等; 2.startBootstrapServices:读配置,启动开机必备的服务:AMS、PMS等等 startCoreServices:其他重要服务,DropBox、电池、应用使用情况服务等 startOtherServices:通知、蓝牙、wifi等设备相关服务。 3.在AMS的systemReady 中调用startHomeActivityLocked 启动launcher。 4.Launcher启动后,会在Activit...

风和先行的专栏 3609

ESP32+LVGL动画开发:原理、实践与性能优化指南

嵌入式GUI是物联网设备与用户交互的核心技术,而LVGL作为专为资源受限环境设计的开源图形库,常与ESP32这类双核MCU搭配使用,在小尺寸TFT屏幕上实现流畅的按钮位移、淡入淡出、进度条滚动等动画效果。LVGL动画的本质并非逐帧播放图片,而是对控件属性进行插值计算,这样既能保持代码轻量,又能有效控制内存和CPU占用,适合低成本屏显方案。在智能家居面板、仪表盘、充电桩等场景中,LVGL动画能大幅提升交互反馈的直观性。实际开发中,开发者需要关注RAM、Flash、屏幕刷新率及帧缓冲策略,并合理选择Arduin

weixin_30247307的博客 511

Android性能分析:Systrace与Perfetto抓取方法全解析

在移动应用性能优化领域,系统追踪是诊断卡顿、掉帧等问题的核心技术手段。其原理基于内核的ftrace框架,通过在关键路径插入标记点,记录事件的时间戳和持续时间,形成可视化时间轴。这项技术的核心价值在于,能够从系统层面提供客观证据链,帮助开发者定位从应用层到内核层的性能瓶颈。在Android生态中,系统追踪主要应用于UI渲染分析、启动优化、功耗调试等场景。本文聚焦于Android性能分析中的Systrace与Perfetto工具链,详细对比了Atrace与Perfetto的演进关系,并提供了从命令行到图形化界面

weixin_30430169的博客 391

安卓开机时间优化,就认这2招

在很多同学做性能优化相关工作时候,都会避免不了有个开机时间优化的任务,但是如何优化整个开机时间,开机涉及的各个阶段太多了,具体哪里是开机时间瓶颈呢?优化后如何测试自己的开机时机呢?想要抓取开机启动整个过程的trace,放到perfetto上进分析,但是发现开机过程中无法连接上设备,没办法抓到完整的trace,所以perfetto无法分析出整个开机过程。准备好一个config文件,主要用于配置perfetto抓取时候的相关配置,比如要抓哪些tag等,是否也抓取日志等,这个配置官网给了一个最简单的版本。

learnframework的博客 343

Android系统启动流程完全指南:从电源键到桌面

操作系统从硬件上电到用户界面就绪,期间要经过固件引导、内核初始化、系统服务启动等多个环节。Android作为移动操作系统,其启动流程在通用机制之上引入了独特的进程孵化与系统服务管理方式,例如Zygote作为应用进程孵化器,SystemServer集中管理核心服务。理解这套流程,不仅有助于优化开机速度、定位反复重启或卡在开机动画等异常,更是系统定制、设备移植和车机开发中的工程基础。本文从底层Bootloader到Linux内核,再到init进程、Zygote和SystemServer,最后到Launcher显

weixin_34115824的博客 373

Android 性能优化 【总篇:深入浅出】

本篇的主要针对整机性能的一个解读,主要拆解整机性能有哪些小的领域,对应的测试用例是怎么样的,这类问题优化思路是怎么样的。各家厂商针对性能的测试都设计了不同的用例,因此针对性能测试其实是比较五花八门的。我这里凭着经验来总结一下通常都有哪些场景和性能测试相关。

qq_27672101的博客 513

安卓启动性能优化:使用bootchart分析启动瓶颈与优化策略

在嵌入式系统和移动开发领域,系统启动性能是衡量用户体验和产品竞争力的关键指标。启动过程涉及从内核初始化到用户空间服务就绪的复杂时序,传统盲测方法效率低下。性能分析工具通过采集进程CPU、磁盘I/O和时序数据,生成可视化图表,帮助开发者透视启动黑盒。其技术价值在于以极低开销实现无侵入式监控,精准定位如Zygote预加载、服务初始化阻塞等瓶颈。在安卓系统优化场景中,该工具能有效识别CPU密集型任务和磁盘I/O瓶颈,指导并行化初始化、调整服务启动顺序等优化实践。本文聚焦bootchart这一启动分析利器,详解其数

weixin_34090562的博客 615

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

RK3568开机动画卡顿或黑屏?排查persist.sys.bootvideo参数与视频编码的避坑实战

本文深入解析RK3568设备在Android11系统下开机动画卡顿或黑屏问题的排查方法,重点探讨persist.sys.bootvideo参数配置与视频编码优化技巧。通过实战案例分享,提供从参数调优、编码规范到系统级性能优化的完整解决方案,帮助开发者快速定位并解决开机动画异常问题。

aodaidi6752的博客 543

Ubuntu 18.04下Freesurfer 7.2.0安装全攻略:从下载到环境配置一步到位

本文详细介绍了在Ubuntu 18.04系统上安装Freesurfer 7.2.0的完整流程,包括系统准备、依赖安装、下载解压、环境配置、许可证获取及性能优化。Freesurfer作为神经影像分析的重要工具,支持皮层重建和体积分割等复杂任务,适用于阿尔茨海默症等神经系统疾病研究。指南还提供了常见问题解决方案和实际应用案例,帮助用户快速搭建高效的神经影像分析平台。

omega的博客 996

Linux日志系统全链路解析:从syslog到ELK/Loki的架构与实战

日志是系统可观测性的基石,它记录了软件运行时的关键事件与状态信息。其核心原理在于将程序运行过程中的离散事件,按照特定格式(如syslog标准)进行序列化并持久化存储,为问题诊断、安全审计和性能分析提供原始数据。在Linux生态中,这一价值通过rsyslog/journald等守护进程、以及grep/awk/sed等强大的文本处理工具得以实现,使得运维人员能够从海量数据中快速定位问题。随着系统规模扩大,集中式日志分析平台(如ELK栈或Loki)成为必然选择,它们通过收集、解析、索引和可视化,将分散的日志转化为

weixin_30681121的博客 367

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3566

深入解析SPLL单相软件锁相环:从SOGI原理到PI系数调优实践

本文深入解析SPLL单相软件锁相环技术,从SOGI原理到PI系数调优实践,详细介绍了其在数字电源设计中的应用。通过数学推导和实际调试经验,帮助工程师快速掌握锁相环的核心参数计算和优化方法,提升电网相位追踪的精确度和响应速度。

weixin_30316097的博客 382

Linux VFS原理与性能优化实战指南

虚拟文件系统(VFS)作为Linux内核的核心子系统,通过统一的抽象接口实现了对多种文件系统的支持。其工作原理基于四大对象模型:超级块管理文件系统元数据,inode描述文件实体,dentry缓存加速路径查找,file对象关联进程操作。在存储性能优化领域,VFS的dentry缓存机制和文件系统选择策略直接影响IO吞吐量,特别是在处理海量小文件或混合负载场景时尤为关键。通过调整/proc/sys/fs/dentry-state参数可以优化目录项缓存,而ext4/XFS/Btrfs等文件系统的特性差异决定了不同业

weixin_30367873的博客 320

LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南

本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。

info6的博客 263

UE5蓝图交互实战:事件驱动与状态切换实现汽车动态交互

在游戏开发与实时交互应用领域,事件驱动编程是实现动态反馈的核心范式。其原理在于通过特定事件(如用户输入、系统信号)触发预设逻辑,而非顺序执行,这能高效响应用户操作并管理复杂状态。这种模式的技术价值在于提升交互实时性与系统可维护性,广泛应用于UI响应、游戏机制、物联网控制等场景。以虚幻引擎5(UE5)的蓝图可视化脚本系统为例,它深度集成了事件驱动模型,开发者可通过关键节点如Event BeginPlay进行初始化、Event Tick处理帧更新,并利用Flip-Flop等工具管理开关状态。本文聚焦于一个具体应

weixin_33829657的博客 899

用 Docker 一键部署 SillyTavern酒馆 mac/windows/linux通用教程,我再也不手动折腾了!

本文介绍了如何使用 Docker 一键部署 SillyTavern 项目,适用于 Mac、Windows 和 Linux 系统。SillyTavern 是一个本地部署的大语言模型聊天界面,支持多种插件和扩展。文章详细说明了安装 Docker、拉取项目、启动容器、配置白名单、启用插件等步骤,并提供了常见问题的解决方法。通过 Docker 部署,用户可以避免繁琐的手动配置,快速搭建和运行 SillyTavern,适合希望简化部署流程的用户。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2623

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 724

Nginx入门到实战:核心架构、反向代理与负载均衡配置详解

Web服务器是承载网站与应用的核心基础设施,负责处理客户端请求并返回响应。其高性能的实现原理通常基于事件驱动与非阻塞I/O模型,通过多进程/线程架构有效管理并发连接。这种技术价值在于能够极大提升服务的吞吐量与稳定性,支撑高并发访问场景。在实际工程中,反向代理与负载均衡是Web服务器的关键应用,用于分发流量、隐藏后端架构并提升系统扩展性。本文聚焦于Nginx这一高性能Web服务器,深入解析其多进程模型、事件驱动机制,并通过实战演示如何配置反向代理实现请求转发,以及利用upstream模块搭建负载均衡集群,从而

weixin_34413802的博客 342

从理论到实践:AI设备维护系统的架构实现

第一部分:理论基石——从设备维护的演进讲起,理解AI如何重塑维护模式;第二部分:架构设计——详解六层高可用系统架构,明确各层职责与技术选型;第三部分:核心技术——拆解数据处理、特征工程、模型训练、部署等关键环节的实现细节;第四部分:实践落地——8步流程带你从需求到上线,附代码示例与工具链;第五部分:案例研究——风电齿轮箱预测性维护系统的真实案例,从问题到方案再到效果;第六部分:挑战与展望——探讨当前技术瓶颈与未来趋势(数字孪生、联邦学习等)。准备好了吗?

大数据洞察的博客 1251

Nginx从入门到实战:核心原理、配置详解与生产环境优化指南

在Web服务器领域,事件驱动与非阻塞异步架构是实现高并发处理的关键技术原理。这种架构通过高效管理连接,显著提升了服务的吞吐量和资源利用率,是现代高性能Web服务器的技术基石。其技术价值在于能够以少量进程支撑海量并发连接,为构建稳定、高效的在线服务提供了核心支撑。在应用场景上,它广泛服务于反向代理、负载均衡、静态资源分发和API网关等。本文聚焦于Nginx,深入解析其基于Master-Worker进程模型的工作机制,并结合实战案例,详细讲解从基础安装、核心配置到性能优化与安全加固的全流程,帮助读者掌握这一在现

weixin_33857679的博客 423

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从零构建私人智能助手:QClaw模块化配置与自动化实战

自动化与效率提升是现代软件开发和个人工作流优化的核心诉求。其基本原理在于通过预设规则和触发条件,让系统自动执行重复性任务,从而解放人力、减少错误。在技术实现上,模块化架构和低代码配置是关键,前者通过插件化设计保证系统的可维护性和可扩展性,后者则降低了自动化流程的构建门槛,让开发者能快速组合触发器、条件和动作。这种技术组合的价值在于能深度定制个性化工作流,实现信息聚合与智能响应。典型的应用场景包括自动生成每日简报、基于上下文的智能提醒以及跨应用的工作流串联。本文将以QClaw框架为例,具体演示如何利用其模块化

425

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 性能优化【篇五:应用启动分析流程】

本篇主要围绕Android性能优化,应用启动类性能问题为主题,先结合MTK的文档阐述应用启动流程,然后结合MTK的分析思路,其他厂商的思路,和我之前有段时间研究过某音的TOP300分析思路的案例,进行说明。

qq_27672101的博客 410

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 面试福利:安卓系统framework开发面试题目汇总
下一篇: 重学wms:你知道什么是AdjacentTask吗?分屏模式的判断方法
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值