一、什么是BugReport和PowerMonitor图形结合呢?
Battery Historian是支持PowerMonitor电流图显示的,具体显示效果如下:我们移动鼠标到PowerMonitor的电流波形时就会显示这个时刻的电流情况。
BugReport和PowerMonitor图形结合好处:从功耗上帝视角快速直观查看电流与功耗异常点的时间锁定关系,快速锁定电流毛刺背后的异常问题原因。
二、BugReport和PowerMonitor图形结合的操作步骤
点开Power Monitor File 按钮
分别将BugReport文件和Power Monitor文件加载进去,最后点击Submit按钮,慢慢等待 Battery Historian 解析出来就好了。
搞功耗的同学应该使用过原生的命令生成BugReport。大家应该会疑问Power Monitor文件文件如何生成?这也是本文主旨,如果感兴趣,可以继续看下去哈。
例如adb bugreport命令,命令结束后,也会告知生成的bugReport文件路径位置
三、如何制作兼容Battery Historian的Power Monitor文件呢?【本文主旨】
3.1 兼容Battery Historian的Power Monitor文件原理
原理:Power Monitor文件只需要满足Battery Historian 要求Unix时间戳和电流值数据(uA)格式就行,中间空格隔开就可以了哈。例如【Unix时间戳 电流值数据】
例如下述文件BH-2025-01-09-19-31-28.csv,没一行都是Unix时间戳 电流值数据格式的数据
3.2 制作Power Monitor文件
3.2.1 PowerMonitor导出 CSV格式文件
具体步骤:PowerTool主界面->Export->选择CSV和1000th导出csv格式,主要这里的命名规则为【PowerMonitor开始抓取时间.csv】为什么需要按PowerMonitor开始抓取时间命名呢?因为我们后续需要解析文件名的开始时间,并将开始时间+时间偏移量,计算出每个电流值对应的Unix时间戳。
例如:2025-01-09-19-31-28.csv,注意哈:时间之间用-分割哈
我们可以看下csv格式内容,但是默认的.csv的时间和电流数据需要转换下格式才能被BugReport识别。故下一步我们需要写个脚本转换下指定格式。
具体就是:Time(s)时间偏移值转换为unix时间戳,电流ms转换下单位,具体mA转换为uA即可
3.2.2 PowerMonitor CSV文件转换为定制BugReport支持的PowerMonitor CSV文件的脚本
我使用的是python的脚本,例如命名pm2bh_python3.py。脚本主要做的事情是将默认的PowerMonitor CSV文件文件内容读取出来。python脚本做的事情具体如下
1.先读取文件名中携带的测试开始时间
2.将测试开始时间+csv文件中的时间偏移量转换为unix时间戳
3.将csv文件中的电流数据将mA单位转换为uA单位
4.最后将新的unix时间戳和uA电流数据保存到新的csv文件中
#_*_ coding:utf-8 _*_
import os
import sys
import time
import datetime
from itertools import islice
help_msg = " usage: pm2bh_python3.py filename.csv"
if len(sys.argv) < 2:
print (help_msg)
sys.exit()
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
print ("argv = ", sys.argv)
print (os.path.basename(sys.argv[1]))
# 根据-符号,解析出文件名的开始时间戳:2025-01-09-19-31-28.csv,故csv格式的文件名写powermonitor开始的时间戳
filename = os.path.basename(sys.argv[1]).split(".")[0].split("-")
# 解析年:例如 2025
year = int(str(filename[0]))
# 解析月:例如 01
month = int(str(filename[1]))
# 解析日:例如 09
day = int(str(filename[2]))
# 解析时:例如 19
hour = int(str(filename[3]))
# 解析分:例如 31
minute = int(str(filename[4]))
# 解析秒:例如 28
second = int(str(filename[5]))
# 将开始时间转换为Unix时间戳,其中减去8*3600转化为UTC+8时区北京时区
test_start_unix_time_stamp = (datetime.datetime(year,month,day,hour,minute,second) - datetime.datetime(1970,1,1)).total_seconds() - 8*3600
f = open(sys.argv[1],"r")
f_out = open("BH-"+os.path.basename(sys.argv[1]),"w")
for line in islice(f, 1, None):
t = line.strip().split(",")
# 测试开始时间+PowerMonitor的时间偏移量
offset_time = float(t[0])
# 计算偏移后的时间戳
offset_time_stamp = offset_time + test_start_unix_time_stamp
# 转换为本地时间datetime对象
local_datetime = datetime.datetime.fromtimestamp(int(offset_time_stamp))
# 转换为UTC时间datetime对象,直接使用浮点数时间戳
utc_datetime = datetime.datetime.utcfromtimestamp(offset_time_stamp)
# 平均电流值,将单位mA转换为uA(微安)
main_avg_current = str(float(t[1]) / 1000)
print("offset_time=" + str(offset_time) + ", offset_time_stamp=" + str(offset_time_stamp) + ", utc_datetime=" + utc_datetime.strftime('%Y-%m-%d %H:%M:%S') + ", main_avg_current=" + main_avg_current + "uA " + "\n")
# Battery Historian 只需要Unix时间戳和电流值数据格式
f_out.write(str(int(offset_time_stamp)) + " " + main_avg_current + " \n")
f_out.close()
3.2.3 执行脚本pm2bh_python3.py filename.csv
cmd窗口下执行:pm2bh_python3.py filename.csv,例如pm2bh_python3.py 2025-01-09-19-31-28.csv
执行完成后会生成如下文件:例如新文件会带BH开头,例如BH-2025-01-09-19-31-28.csv
我们打开BH-2025-01-09-19-31-28.csv文件内容:满足Battery Historian 要求Unix时间戳和电流值数据(uA)就行,中间空格隔开就可以了哈。【Unix时间戳 电流值数据】
3.2.4 BugReport文件和Power Monitor文件加载并显示出图形结合的图
BugReport文件和Power Monitor文件加载进去,最后点击Submit按钮,慢慢等待 Battery Historian 解析出来就好了。、
四、其他方法:直接将pt5格式文件转换为BugReport支持格式
由于默认的pt5格式无法直接可视化查看,故需要从power monitor官方网查看API进行解析出符合BugReport指定的格式。不过脚本会相对复杂些。本次不介绍了,后面有缘再续。
https://www.msoon.com/high-voltage-power-monitor