我现在有一个SceneKit场景并没有很多。最初报告的统计数据都非常低(渲染时为0.2ms,其他一切都为零)。但是,如果我稍微调整视图大小,那么WaitDrawable数字很可能(但不能保证)显着上升,通常只有不到8毫秒或不到16毫秒。后续调整大小很少导致它稍微下降。我曾经只看到它恢复到零。
WaitDrawable
不会在developer.apple.com上返回任何匹配项,也不会在更广泛的互联网上返回任何匹配项。
我认为使用SpriteKit场景作为叠加层(通过scnView.overlaySKScene = ...
)可能是罪魁祸首,如果SpriteKit以某种方式延迟(或完全丢弃一帧?)那么SceneKit最终会等待帧N + 1,但删除叠加层的所有痕迹对行为没有影响。
我还考虑过是NSWindowDelegate
并且对windowDidResize
作出反应可能是原因,所以删除了该代码 - 没有变化。
剩下的就是加载场景并启动SCNAction.repeatForever
的代码,并且仍然会在调整大小时出现高WaitDrawable。它与视图大小无关 - 干净的启动后几次窗口大小的减少也导致了它的发生。
最后一个好帧和第一个坏帧的仪器读数显示WaitDrawable增加了1000倍:
相应时刻的痕迹,我目前无法破译,但即使是未经训练的眼睛,也看起来很奇怪:
它实际上似乎并没有损害帧速率,但是在16毫秒它正好接近边缘。 Apple's own Fox2 demo展示了同样高的WaitDrawable。