d3.js Chrome开发工具中的长帧

8oomwypt  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(188)

不确定如何在Chrome开发工具中解释这些长帧(性能选项卡)。这是一个动画在React的配置文件。我正在使用d3-timer运行动画,这是使用requestAnimationFrame。有明显的jank在动画从这些零星的长帧(在~50和~ 70 ms之间)。但是我没有看到任何红色,就像你通常看到的那样,当你丢帧。这里是一个截图...

**问题:**是什么原因导致这样的随机长帧?在这个例子中,看起来RAF在一帧中运行了多次,并且没有显示任何其他活动导致帧延迟。那么你如何诊断这个问题?任何帮助都将非常感谢。如果有帮助的话,我很高兴提供更多的屏幕截图或信息。
**注:**我不是在发布代码,因为这与代码本身无关。我想问的是,为什么任何代码都可能出现这样的情况。在Chrome开发者工具中,帧速率下降,多个RAF帧最终出现在一个“帧”中。想知道是否有人见过这种情况,也许可以提供一些帮助?

vc9ivgsu

vc9ivgsu1#

据我所知,这是Chrome性能工具中的一个bug。
我遇到了和你一样的问题,但更明显的是我的应用程序没有问题:

在我的例子中,这是一个WebGL 2页面,带有一个简单的着色器,除了调用requestAnimationFrame之外,基本上什么都没有发生。正如您所看到的,实际上没有负载,但是仍然有一些令人费解的缺口,似乎是帧被丢弃了。
我说“看起来是”是因为你可以看到GPU和合成器仍然处于活动状态,就像它们在正常时间渲染一帧一样--开发工具中没有标记表明发生了一帧。
所以我下载了这个概要文件,它只是一个JSON文件,并进一步研究它。概要文件中表示帧开始的行是:

{"args":{"frameSeqId":94370284,"layerTreeId":1},"cat":"disabled-by-default-devtools.timeline.frame","name":"BeginFrame","ph":"I","pid":5640,"s":"t","tid":6908,"ts":1839098089419},

关键部分是"name":"BeginFrame"。我不确定时间戳(ts)值基于什么,但它们是以微秒为单位的,当日志正确对齐时,这些肯定是帧开始行的事件。它们存在于我的跟踪中所谓的“丢弃”帧中!无论是什么原因导致分析器没有显示它们,这是由于其他一些数据。
我会尝试将其报告为一个bug,看看它会发展到什么程度。https://bugs.chromium.org/p/chromium/issues/detail?id=1339567

相关问题