CarSystemUI冷启动耗时分析

在这里插入图片描述

1. 背景说明

  • 项目:Android Automotive CarSystemUI
  • 测试目标:分析 SystemUI 冷启动耗时
  • 测试环境:
  • Android 版本: 16
  • Trace 工具:Perfetto

2. 测试结果

冷启耗时:586.3ms

Sum wall duration会造成重复统计
Sum self duration是准确的冷启耗时时间

3. 测试方法

# 1.先运行命令  
     adb shell perfetto  -o /data/misc/perfetto-traces/full_boot.pftrace   -t 20s -b 256mb
sched freq idle am wm gfx view binder_driver hal dalvik
# 2. 查找 SystemUI 进程
     ps -A | grep systemui
# 3. 杀掉 SystemUI
     kill -9 <systemui_pid>
# 4. 等待 AMS 自动拉起 SystemUI

4. 冷启动时间定义

4.1 起始时间

定义
SystemUI 主线程创建完成,并首次进入 Running 状态。
Trace 判断依据

  • 主线程:
  • com.android.systemui
  • main
  • 状态:
  • Running
    在这里插入图片描述

4.2 结束时间

定义
BottomCarSystemBar 窗口完成最后一次绘制。
即:

  • DeckView 容器完成最终刷新
  • Window 首次稳定显示

终止时间:最后一次绘制BottomCarSystemBar窗口(即dockerview的容器最后一次刷新)

5. CarSystemUI 启动流程

SystemUIOverlayWindowManagerKeyguardViewMediatorCarSystemBarCoreStartablesDaggerCarSystemUIApplicationSystemUIServiceActivityThreadActivityManagerPackageManagerSystemServerZygoteSystemUIOverlayWindowManagerKeyguardViewMediatorCarSystemBarCoreStartablesDaggerCarSystemUIApplicationSystemUIServiceActivityThreadActivityManagerPackageManagerSystemServerZygoteStage 1 - SystemServer BootStage 2 - Start SystemUIStage 3 - Create SystemUI ProcessStage 4 - Application CreateStage 5 - Dagger InjectionStage 6 - Start CoreStartablesStage 7 - CarSystemBar InitStage 8 - Overlay InitStage 9 - Startup Finishedfork() create system_serverstartBootstrapServices()startCoreServices()startOtherServices()getSystemUiServiceComponent()ComponentName()startServiceAsUser()startProcessLocked()fork() create SystemUI processreturn pidbindApplication()onCreate()onCreate()isSecondaryMUMDSystemUI()initialize()create SysUIComponentinject dependenciesstartCoreStartables()start()start()start()start otherscreateSystemBar()buildNavBarWindows()buildNavBarContent()attachNavBarWindows()init()attach()startup completedAndroid Automotive SystemUI Startup Flow

5.1 SystemUI 进程拉起

SystemServer

startSystemUi()

AMS 拉起 com.android.systemui

Zygote fork SystemUI 进程


5.2 Application 初始化

CarSystemUIApplication.onCreate()
主要流程:

  • 初始化 Context
  • 初始化 Dagger
  • 初始化 SystemUIFactory
  • 初始化 Dependency

5.3 Startable 启动

SystemUIApplication.startServicesIfNeeded()
启动核心模块:

SELECT
    SUBSTR(
        REPLACE(name, 'StartServices ', ''),
        LENGTH(REPLACE(name, 'StartServices ', ''))
            - INSTR(REVERSE(REPLACE(name, 'StartServices ', '')), '.') + 2
    ) AS class_name,
    ROUND(dur / 1000000.0, 2) AS dur_ms
FROM slice
WHERE name LIKE 'StartServices%'
ORDER BY dur DESC;
类名耗时(ms)说明
CarSystemBar47.24车机系统栏管理,负责状态栏、导航栏的创建和管理
KeyGestureDialogStartable24.82按键手势对话框启动器,处理手势相关的对话框显示
KeyguardUpdateMonitor19.72锁屏状态监控器,跟踪锁屏状态变化并通知相关组件
KeyguardTransitionCoreStartable17.78锁屏过渡动画控制器,管理锁屏显示/隐藏的过渡效果
AlternateBouncerViewBinder11.55备用解锁界面绑定器,绑定备用解锁UI与数据
DeviceUnlockedInteractor$Activator10.32设备解锁交互器激活器,管理设备解锁流程
SystemUIOverlayWindowManager10.1Overlay窗口管理器,管理系统级Overlay窗口(如通知面板)
QSPipelineCoreStartable6.49快速设置管道启动器,管理快速设置面板的数据流
CommunalMediaStartable4.05共享媒体服务,管理多用户/多显示场景下的媒体播放
ScreenDecorations3.79屏幕装饰管理器,处理圆角、刘海屏适配、安全区域等
PowerUI3.03电源UI管理器,管理电量显示、低电量提醒等
StatusBarSignalPolicy2.83状态栏信号策略,控制信号图标的显示逻辑
ShareToAppChipViewModel2.19分享芯片ViewModel,管理分享功能的UI状态
KeyguardViewMediator1.81锁屏视图中介,协调锁屏的显示和隐藏
UserSwitcherDialogCoordinator1.45用户切换对话框协调器,管理用户切换UI
ThemeOverlayController1.3主题覆盖控制器,管理系统主题的叠加和应用
OngoingCallInteractor1.25进行中通话交互器,管理通话状态和UI显示
ScreenCaptureStartable1.22屏幕截图服务,提供截图功能支持
CommunalSuppressionStartable1.09共享抑制服务,管理共享资源的抑制状态
DisplayInputSinkController1.07显示输入接收器控制器,管理输入事件的接收和分发
QSLargeSpecsCommand1.04快速设置大规格命令,处理大屏设备的快速设置
WMShell1.03WindowManager Shell,窗口管理外壳组件
VolumeUI0.89音量UI管理器,管理音量条和音量控制
SystemEventHandler0.89系统事件处理器,处理系统级事件
KeyguardNotificationVisibilityProvider0.88锁屏通知可见性提供者,控制锁屏上通知的显示
VisualInterruptionDecisionProvider0.75视觉中断决策提供者,决定是否显示打断性UI
NotificationMemoryMonitor0.75通知内存监控器,监控通知内存使用情况
StorageNotification0.66存储通知,管理USB存储等相关通知
QSPanelsCoreStartable0.63快速设置面板启动器,初始化快速设置面板
NotificationGutsManager0.6通知详情管理器,管理通知展开后的详情内容
FeatureFlagsDebugStartable0.6特性标志调试服务,管理特性标志的调试功能
NotificationChannels0.58通知渠道管理,创建和管理通知渠道
KairosCoreStartable0.43Kairos核心服务,与面部识别相关
MotionToolStartable0.41手势工具服务,提供手势相关工具支持
CommunalDreamStartable0.41共享梦境服务,管理多用户场景下的梦境功能
FalsingCoreStartable0.41误触检测服务,检测和防止误触操作
RingtonePlayer0.36铃声播放器,播放来电、通知等铃声
LowLightBehaviorCoreStartable0.33低光行为服务,管理低光环境下的UI行为
KeyguardBiometricLockoutLogger0.26锁屏生物识别锁定日志,记录生物识别锁定事件
CommunalSceneTransitionInteractor0.24共享场景过渡交互器,管理场景切换动画
SideFpsOverlayViewBinder0.24侧边指纹覆盖层绑定器,绑定侧边指纹UI
FlagDependencies0.23标志依赖管理,管理特性标志之间的依赖关系
NotificationRemoteInputManager0.23通知远程输入管理器,处理通知的远程输入
MobileUiAdapter0.2移动UI适配器,适配移动设备的UI
ClusterDisplayController0.18仪表盘显示控制器,管理仪表盘区域的显示
ScreenRecordingCoreStartable0.17屏幕录制服务,提供屏幕录制功能支持
SessionTracker0.16会话追踪器,追踪SystemUI会话状态
DevicePosturingListener0.15设备姿态监听器,监听设备姿态变化
LetterboxBackgroundProvider0.15信箱背景提供者,提供信箱模式的背景
AuthController0.15认证控制器,协调生物识别认证流程
NotificationSettingsRepository0.14通知设置仓库,管理通知相关设置
NotificationRebindingTrackerModule0.12通知重新绑定追踪模块,追踪通知重新绑定
LockscreenSceneTransitionInteractor0.12锁屏场景过渡交互器,管理锁屏场景切换
CarToastUI0.11车机Toast UI,管理Toast消息显示
CommunalAppWidgetHostStartable0.11共享应用组件宿主服务,管理共享AppWidget
OnboardingAffordanceCommands0.1引导提示命令,管理新用户引导提示
CommunalMetricsStartable0.1共享指标服务,收集和上报共享指标
Recents0.09最近任务管理,管理最近使用的应用列表
UnfoldInitializationStartable0.08展开初始化服务,处理折叠屏展开初始化
SysuiStatusBarStateController0.07状态栏状态控制器,管理状态栏状态
CarProfileIconUpdater0.07车机用户头像更新器,更新用户头像
DisplayWindowPropertiesRepository0.07显示窗口属性仓库,管理显示窗口属性
LightBarController0.07灯条控制器,管理灯条的显示和控制
PassengerKeyguardLoadingDialog0.07乘客锁屏加载对话框,乘客屏的锁屏加载UI
ZenModesCleanupStartable0.07禅模式清理服务,清理禅模式相关资源
SecurityControllerStartable0.06安全控制器服务,管理安全相关功能
ShadePrimaryDisplayCommand0.06下拉面板主显示命令,控制主显示的下拉面板
CommunalLoggerStartable0.06共享日志服务,提供共享日志功能
OngoingCallController0.06进行中通话控制器,控制通话UI
CommunalBackupRestoreStartable0.06共享备份恢复服务,管理共享数据的备份恢复
NearbyMediaDevicesManager0.05附近媒体设备管理器,管理附近的媒体设备
DreamSuppressionStartable0.05梦境抑制服务,控制梦境功能的抑制
ConfigurationControllerStartable0.05配置控制器服务,管理系统配置
LowLightMonitor0.05低光监控器,监控低光环境
CarSystemUIShellCommandRegisterer0.05车机SystemUI Shell命令注册器,注册Shell命令
ShadeDialogContextInteractor0.05下拉面板对话框上下文交互器,管理下拉面板对话框
UserFileManagerImpl0.05用户文件管理器实现,管理用户文件
StatusBarContentInsetsViewModelStore0.04状态栏内容内边距ViewModel存储
LightBarControllerStore0.04灯条控制器存储
GrowthCoreStartable0.04增长核心服务,与增长相关的功能
MediaMuteAwaitConnectionCli0.04媒体静音等待连接客户端
StatusBarNotificationChipsInteractor0.04状态栏通知芯片交互器,管理通知芯片
ActivityWindowManager0.04活动窗口管理器,管理应用活动窗口
ClearLogBuffersCommand0.04清除日志缓冲区命令
StatusBarConfigurationControllerStore0.04状态栏配置控制器存储
ExternalDisplayController0.04外部显示控制器,管理外部显示设备
MultiDisplayStatusBarWindowControllerStore0.03多显示状态栏窗口控制器存储
ComposeTracingStartable0.03Compose追踪服务,追踪Compose UI性能
ShadeDisplaysDialogInteractor0.03下拉面板显示对话框交互器
DeviceProvisioningRepository0.03设备配置仓库,管理设备配置信息
BroadcastDispatcherStartable0.03广播分发器服务,管理广播的分发
VendorServices0.03厂商服务,提供厂商特定功能
CarrierConfigCoreStartable0.03运营商配置核心服务,管理运营商配置
CommunalSceneStartable0.03共享场景服务,管理共享场景
CommunalOngoingContentStartable0.02共享进行中内容服务,管理共享的进行中内容
StatusBarModeRepositoryStore0.02状态栏模式仓库存储
SystemEventChipAnimationControllerStore0.02系统事件芯片动画控制器存储
StatusBarIconViewBindingFailureTracker0.02状态栏图标绑定失败追踪器
FlashlightRepositoryImpl0.02手电筒仓库实现,管理手电筒功能
StatusBarContentInsetsProviderStore0.02状态栏内容内边距提供者存储
MediaDataProcessor0.01媒体数据处理器,处理媒体数据
ScreenPinningRequest0.01屏幕固定请求,处理屏幕固定功能
PendingDisplayChangeController0.01待处理显示变更控制器
MediaCarouselInteractor0.01媒体轮播交互器,管理媒体轮播功能

5.4 window创建并刷新

在这里插入图片描述

窗口类名窗口用途说明
SystemUIOverlayWindow通知栏等系统 UI 容器窗口
TopCarSystemBar顶部状态栏窗口
BottomCarSystemBar底部 docker 栏窗口
HeadsUpNotification横幅通知窗口
DisplayBackGestureHandler返回手势窗口

6. 插件加载

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2bf0b0f6953b4cb2a27f553b4e2bd32b.png
插件加载过程可参考这篇文章:https://blog.csdn.net/congqingbin/article/details/160828767?spm=1001.2014.3001.5501

7. 插件加载后加载插件中的UI元素并刷新

在这里插入图片描述

时间范围外:CarKeyguardView展示?目前车机未用到可删除?
[图片]

8. 结论

8.1 探索了systemui冷启耗时统计方法
8.2 冷启可优化部分

     部分服务可优化,1个窗口可删,见上述表格,
     一个线程切换耗时可优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值