前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具
#####################以下分割线#####################
英文原文在这里
在 Android 上,Perfetto 绑定数据源,以从设备电源管理单元(如果支持)显示电源计数器。
电池计数器
此数据源已在 Android 10 (Q) 中引入,要求设备上存在电源管理硬件。这在大多数谷歌Pixel智能手机上都可用。
现代智能手机配备了功率监控IC,能够测量流入和流出电池的电荷。这允许Perfetto观察整个设备(SoC,显示器,通信基带和所有其他硬件单元的结合)从电池中释放的总电荷和瞬时电荷。
简化框图:
battery-counters.png
这些计数器报告:
- 剩余电池容量(以 % 为单位)。
- 剩余电池电量(以微安时 (μAh) 为单位)。
- 瞬时(通常是小时间窗口内的平均值)电流,单位为微安 (μA)
这些计数器的存在和分辨率取决于设备制造商。在平台级别,此数据是通过轮询Android IHealth HAL获得的。有关硬件规格和分辨率的更多详细信息,请参阅测量设备功率。
插入 USB 时测量电荷
电池计数器测量流入和流出电池的电荷。如果设备插入 USB 线,您可能会观察到负瞬时电流和总电量增加,表示电荷流入电池(即充电)而不是流出。
这可能会使实验室环境中的测量出现问题。对此的已知解决方法是:
- 使用专用的USB集线器,允许从主机不再通过USB端口供电。这允许在测试运行时不再充电。
- 在Root的手机上,电源管理 IC 驱动程序允许断开 USB 充电,同时保持 USB 数据链路处于活动状态。此功能是 SoC的功能,不是通用的,也不会通过任何 HAL 公开。例如,在 Pixel 2 上,在root 下运行: echo 1 > /sys/devices/soc/800f000.qcom,spmi/spmi-0/spmi0-02/800f000.qcom,spmi:qcom,pmi8998@2:qcom,qpnp-smb2/power_supply/battery/input_suspend。请注意,在大多数设备中,内核 USB 驱动程序会保持唤醒锁以保持 USB 数据链路处于活动状态,因此即使关闭屏幕,设备也永远不会完全挂起。
UI
battery-counters-ui.pngSQL
select ts, t.name, value from counter as c left join counter_track t on c.track_id = t.id
截屏2023-10-13 23.06.32.png
跟踪配置
跟踪原型:BatteryCounters
配置原型: AndroidPowerConfig
示例配置(安卓):
data_sources: {
config {
name: "android.power"
android_power_config {
battery_poll_ms: 250
battery_counters: BATTERY_COUNTER_CAPACITY_PERCENT
battery_counters: BATTERY_COUNTER_CHARGE
battery_counters: BATTERY_COUNTER_CURRENT
}
}
}
示例配置(Chrome OS 或 Linux):
data_sources: {
config {
name: "linux.sysfs_power"
}
}
设备电源轨监视器 (ODPM)
此数据源已在 Android 10 (Q) 中引入,需要设备上的专用硬件。此硬件在大多数生产手机上尚不可用。
最新版本的 Android 在硬件子系统级别引入了对更高级电源监控的支持,称为“设备上电源轨监控器”(ODPM)。这些计数器测量(一组)硬件单元消耗的电量。
与电池计数器不同,它们不受电池充电/放电状态的影响,因为它们测量电池下游的功率。
电源轨计数器的存在和分辨率取决于设备制造商。在系统级别,这些数据是通过轮询{Android IPowerStats HAL](https://cs.android.com/android/platform/superproject/+/main:hardware/interfaces/power/stats/1.0/IPowerStats.hal)获得的。
Google员工:请参阅go/power-rails-internal-doc,了解如何更改Pixel设备上的故障导轨选择的说明。
简化框图:
power-rails.png
跟踪配置
跟踪原型:PowerRails
配置原型:AndroidPowerConfig
示例配置:
data_sources: {
config {
name: "android.power"
android_power_config {
battery_poll_ms: 250
collect_power_rails: true
# Note: it is possible to specify both rails and battery counters
# in this section.
}
}
}
相关数据源
请参阅 CPU -> 频率变化数据源
#####################以上分割线#####################
后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议
网友评论