Chrome:CPU 配置文件解析器正在修复 n 个缺失的样本

2024-03-06

我正在使用 Chrome 的性能选项卡来研究页面的性能,偶尔会收到如下警告:

DevTools:CPU 配置文件解析器正在修复 4 个丢失的样本。

有谁知道这意味着什么?到目前为止,谷歌搜索此警告尚未返回任何结果......


当遇到这种情况时,需要考虑的可能有用的事项如下。

As Chrome 582017年发布,在分析性能方面做了一些改变。例如:

  1. Timeline面板更名为表现 panel.
  2. Profiles面板更名为Memory panel.
  3. 记录 Javascript CPU 配置文件菜单移至开发工具 → 右侧三个点 → 更多工具 → Javascript Profiler。 (OldJavascript Profiler 版本)

除此之外,还会看到警告消息 (DevTools:CPU 配置文件解析器正在修复N缺少样品。)被写入控制台窗口时共享同一底部节点的两个调用堆栈之间存在单个(程序)样本。另外,根据源代码,样本数应大于或等于 3。

上面写的评论_fixMissingSamples方法中的CPUProfileDataModel.js文件解释了这种情况如下;

// Sometimes sampler is not able to parse the JS stack and returns
// a (program) sample instead. The issue leads to call frames belong
// to the same function invocation being split apart.
// Here's a workaround for that. When there's a single (program) sample
// between two call stacks sharing the same bottom node, it is replaced
// with the preceeding sample.

根据这些信息,我们可以跟踪代码并检查行为。

CPUProfileDataModel.js

 let prevNodeId = samples[0];
 let nodeId = samples[1];
 let count = 0;
 for (let sampleIndex = 1; sampleIndex < samplesCount - 1; sampleIndex++) {
   const nextNodeId = samples[sampleIndex + 1];
   if (nodeId === programNodeId && !isSystemNode(prevNodeId) && !isSystemNode(nextNodeId) &&
       bottomNode(idToNode.get(prevNodeId)) === bottomNode(idToNode.get(nextNodeId)) {
     ++count;
     samples[sampleIndex] = prevNodeId;
   }
   prevNodeId = nodeId;
   nodeId = nextNodeId;
 }
 if (count) {
   Common.console.warn(ls`DevTools: CPU profile parser is fixing ${count} missing samples.`);
 }

看起来,它只是比较与当前节点相关的前一个和下一个节点,就好像它们具有相同的底部节点一样(实际上是比较父节点)。另外,上一个和下一个节点不应该是系统(程序/gc/空闲函数)节点,当前节点应该是“程序”节点。如果是这种情况,则将样本数组中的当前节点设置为前一个节点。

idle: 等待处理
program:本机代码执行
垃圾收集器:垃圾收集帐户

此外,从“性能”→“捕获设置”禁用 Javascript 示例会导致细节和调用堆栈减少,因为忽略了所有调用堆栈。在这种情况下不应出现警告消息。

但是,由于这个警告是关于采样器的,它说无法解析 JS 堆栈和调用帧被分割,所以它似乎不是很重要的考虑因素。

资源:

https://github.com/ChromeDevTools/devtools-frontend/tree/master/front_end/sdk https://github.com/ChromeDevTools/devtools-frontend/tree/master/front_end/sdk
https://github.com/ChromeDevTools/devtools-frontend/blob/master/front_end/sdk/CPUProfileDataModel.js https://github.com/ChromeDevTools/devtools-frontend/blob/master/front_end/sdk/CPUProfileDataModel.js
https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/sdk/ https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/sdk/
https://developers.google.com/web/tools/chrome-devtools/evaluate-performance https://developers.google.com/web/tools/chrome-devtools/evaluate-performance
https://developers.google.com/web/updates/2016/12/devtools-javascript-cpu-profile-migration https://developers.google.com/web/updates/2016/12/devtools-javascript-cpu-profile-migration

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome:CPU 配置文件解析器正在修复 n 个缺失的样本 的相关文章

随机推荐