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

时间:2018-08-30 20:13:02

标签: google-chrome

我正在使用Chrome的“性能”标签来研究页面的性能,偶尔会收到类似以下的警告:

  

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

有人知道这意味着什么吗?谷歌搜索此警告至今未返回任何结果...

1 个答案:

答案 0 :(得分:0)

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

随着 Chrome 58 在2017年发布,对分析性能进行了一些更改。例如:

  1. 时间轴面板被重命名为性能面板。
  2. 个人资料面板被重命名为内存面板。
  3. 记录Javascript CPU配置文件菜单移至“开发工具”→右侧的三个点→更多工具→Javascript Profiler。 (版本的Javascript Profiler)

此外,当< DevTools:CPU配置文件解析器正在修复 N 个丢失的示例。)时,所看到的警告消息正在被写入控制台窗口。 strong> 在共享同一底部节点的两个调用堆栈之间存在单个(程序)样本。 此外,根据源代码,样本计数应大于或等于3。 / p>

CPUProfileDataModel.js 文件的 _fixMissingSamples 方法上方编写的注释解释了以下情况:

// 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.`);
 }

似乎,它只是将与当前节点相关的上一个和下一个节点进行比较,就好像它们具有相同的底部节点(实际上是比较父节点)一样。同样,上一个和下一个节点也不应该是系统(program / gc / idle function)系统,当前节点应该是“ program”节点。如果是这样,则将samples数组中的当前节点设置为上一个节点。

Javascript Profiler sample screenshot

空闲:正在等待处理
程序:执行本机代码
垃圾收集器:垃圾收集帐户

Chrome Performance tab screenshot

此外,由于省略了所有调用堆栈,因此从Performance(性能)→Capture Settings(捕获设置)中禁用Javascript示例会导致较少的详细信息和调用堆栈。在这种情况下,不应显示警告消息。

但是,由于此警告与采样器有关,该采样器说无法解析JS堆栈并将调用帧分离,因此考虑起来似乎不是很重要。

资源:

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://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/updates/2016/12/devtools-javascript-cpu-profile-migration