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

Google chrome Chrome:CPU配置文件解析器正在修复n个缺少的示例,google-chrome,Google Chrome,我正在使用Chrome的性能选项卡来研究页面的性能,偶尔会收到如下警告: DevTools:CPU配置文件解析器正在修复4个缺少的示例 有人知道这是什么意思吗?Google对于这一警告至今没有任何结果。< P>随着这种情况的出现,可能有助于考虑的事情如下: 由于2017年发布了Chrome58,因此对分析性能进行了一些更改。例如: 时间线面板重命名为性能面板。 配置文件面板重命名为内存面板。 录制Javascript CPU配置文件菜单移动到开发工具中→ 右边有三个点→ 更多工具→ Java

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

DevTools:CPU配置文件解析器正在修复4个缺少的示例


有人知道这是什么意思吗?Google对于这一警告至今没有任何结果。

< P>随着这种情况的出现,可能有助于考虑的事情如下:

由于2017年发布了Chrome58,因此对分析性能进行了一些更改。例如:

  • 时间线面板重命名为性能面板。
  • 配置文件面板重命名为内存面板。
  • 录制Javascript CPU配置文件菜单移动到开发工具中→ 右边有三个点→ 更多工具→ Javascript分析器。(旧版本的Javascript分析器)
  • 除此之外,当共享同一底部节点的两个调用堆栈之间存在单个(程序)样本时,所看到的警告消息(DevTools:CPU配置文件解析器正在修复N缺少的样本)将写入控制台窗口。此外,根据源代码,样本计数应大于或等于3

    上面的注释\uCPUProfileDataModel.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.`);
     }
    
    让prevNodeId=samples[0];
    设nodeId=samples[1];
    让计数=0;
    for(让sampleIndex=1;sampleIndex
    看起来,它只是简单地比较与当前节点相关的上一个节点和下一个节点,就好像它们具有相同的底部节点一样(实际上比较父节点)。而且上一个节点和下一个节点不应该是系统(program/gc/idle函数)节点和当前节点应为“程序”节点。如果是这种情况,则示例数组中的当前节点设置为上一个节点

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

    另外,禁用Javascript示例以提高性能→ 捕获设置会导致更少的详细信息和调用堆栈,因为忽略了所有调用堆栈。在这种情况下不应显示警告消息

    但是,由于这个警告是关于不能解析JS堆栈和调用帧被拆分的取样器,所以它似乎并不是很重要的考虑。 资源:






    引发此警告的行的闪烁源: