Android FrameStats时间戳解析异常问题求助
FrameStats时间戳异常问题解决思路
执行dumpsys gfxinfo获取FrameStats数据时,你会发现时间戳直接转换后得到1970年左右的无效日期,这是因为FrameStats里的时间戳并非基于Unix纪元(1970-01-01)的绝对时间,而是设备启动以来的相对纳秒数。
解决步骤:
- 获取设备启动的绝对时间:
可以通过以下方式获取:- 执行命令:
adb shell dumpsys batterystats | grep "Start time",提取启动的Unix时间戳(毫秒级)。 - 或者通过代码计算:用当前系统时间(
System.currentTimeMillis())减去设备运行时长(SystemClock.elapsedRealtime()),得到启动绝对时间。
- 执行命令:
- 转换FrameStats时间戳:
将FrameStats中的纳秒时间除以1000000转换为毫秒,再加上设备启动的绝对时间(毫秒),得到标准Unix时间戳,最后转换为人类可读的日期。
示例计算:
假设设备启动绝对时间为1690000000000毫秒(对应2023-07-23),示例中的IntendedVsync值为146696088396343纳秒:
- 转换为毫秒:
146696088396343 / 1000000 = 146696088毫秒 - 计算绝对时间:
1690000000000 + 146696088 = 1690146696088毫秒 - 转换为日期:对应2023-07-23 04:31:36左右的有效时间
补充说明:
示例数据中的9223372036854775807是Long类型的最大值,代表该帧没有输入事件,属于正常数据,无需特殊处理。
内容的提问来源于stack exchange,提问作者Sarthak Agarwal
相关产品推荐
相关产品推荐

