WaitDrawable得分高是坏事吗?是什么原因造成的?

Chr*_*ris 5 macos scenekit

我有一个SceneKit场景,目前还没有进行很多事情。最初报告的统计信息非常低(0.2ms用于渲染,其他所有零)。但是,如果我只是稍微调整视图的大小,则WaitDrawable的数字很有可能(但不能保证)显着上升,通常会上升到8ms以下或16ms以下。随后的大小调整很少导致其下降。我只有一次看到它恢复到零。

WaitDrawable 不会在developer.apple.com上返回任何匹配项,在更广泛的Internet上几乎不会返回任何匹配项。

我以为使用SpriteKit场景作为叠加层(通过scnView.overlaySKScene = ...)可能是罪魁祸首,如果SpriteKit迟到了(或完全丢了一帧?),那么SceneKit最终将等待N + 1帧,但是删除了叠加层的所有痕迹对行为没有影响。

我还考虑了是否NSWindowDelegate对它做出反应并对其做出反应windowDidResize,因此删除了该代码-无需更改。

剩下的就是加载场景并启动的代码,SCNAction.repeatForever并且高WaitDrawable仍在调整大小时出现。它与视图大小无关-干净启动后再减小窗口大小也会导致它发生。

最后一个好帧和第一个坏帧的仪器读数显示WaitDrawable增加了1000倍:

框架好,然后框架坏

相应时间的轨迹,我目前无法解读,但即使是未经训练的眼睛,它的确也很奇怪:

仪器从好到坏的过渡轨迹

它实际上似乎并没有影响帧速率,但是在16ms时,它马上就要到了。苹果自己的Fox2演示展示了同样高的WaitDrawable。