You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome DevTools性能图表最后一项的时间计算逻辑咨询

Chrome DevTools Profile自时间(Self-time)计算逻辑及自定义Profile问题解析

一、Self-time(自时间)的计算逻辑

在Chrome DevTools的采样型性能Profile中,Self-time指的是函数自身代码执行消耗的时间,完全不包含调用子函数的耗时,具体计算规则如下:

  • 采样型Profile通过定期抓取CPU调用栈的顶端函数统计耗时,每个sample对应一个栈顶函数的节点ID,timeDeltas是该采样区间的持续时长。
  • 某个函数的Self-time = 所有以该函数为栈顶的sample对应的timeDeltas时长总和。
  • 对比Total-time:Total-time是该函数出现在调用栈中(无论是否为栈顶)的所有采样时长总和,包含子函数的执行耗时。

结合你提供的Profile数据,手动计算各函数的Self-time结果如下:

  • level-0:仅对应1个时长为0的采样,Self-time为0
  • level-3-1:对应1个时长5000的采样,Self-time为5000
  • level-2-2:对应1个时长4000的采样,Self-time为4000
  • level-3-2:对应3个采样(时长1000+500+1000),Self-time为2500
  • level-0-2:对应1个时长1000的采样,Self-time为1000
  • level-1-2:对应1个时长500的采样,Self-time为500
  • level-1、level-2-1没有作为栈顶的采样,Self-time为0

二、你的自定义Profile存在的问题

  1. 采样时长总和与时间范围不匹配
    Profile中startTime为1,endTime为40000,理论总时长为39999,但你的timeDeltas总和仅为13000,这会让DevTools判定存在大量未采样的空白时间,可能导致分析结果异常。

  2. 采样序列未反映合理的调用栈切换流程
    按照你定义的节点父子关系,level-3-1的调用栈应该是ROOT→level-0→level-1→level-2-1→level-3-1,但你的采样直接从level-0跳到level-3-1,缺少中间层级的栈顶采样。虽然DevTools会通过节点父子关系回溯完整调用栈,但这种跳跃式采样不符合实际CPU调用栈的切换逻辑,可能导致Total-time的统计出现偏差。

  3. 可选字段的合理性
    hitCount字段全为0是允许的(采样型Profile可忽略调用次数统计),但如果需要更精准的分析,建议补充实际的函数调用次数。

内容的提问来源于stack exchange,提问作者egor vodopyanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:55:24