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

duh*_*ime 17 google-chrome

我正在使用Chrome的性能标签来研究网页的效果,我偶尔会收到如下警告:

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

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

Erd*_*sci 4

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

\n\n

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

\n\n
    \n
  1. 时间轴面板已重命名为性能面板。\n
  2. \n
  3. 配置文件面板已重命名为内存面板。\n
  4. \n
  5. 记录 Javascript CPU 配置文件菜单已移至开发工具 \xe2\x86\x92 右侧三个点 \xe2\x86\x92 更多工具 \xe2\x86\x92 Javascript Profiler。(版本的 Javascript Profiler)
  6. \n
\n\n

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

\n\n

CPUProfileDataModel.js文件中_fixMissingSamples方法上面写的注释解释了这种情况,如下所示;

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

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

\n\n

CPUProfileDataModel.js

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

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

\n\n

Javascript Profiler 示例屏幕截图

\n\n

空闲: 等待执行进程\n
\n程序: 本机代码执行\n
\n垃圾收集器: 垃圾收集的帐户

\n\n

Chrome“性能”选项卡屏幕截图

\n\n

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

\n\n

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

\n\n

资源:

\n\n

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

\n