SceneKit统计信息显示中的“金属冲洗”是什么?

我正在尝试排除FPS中的丢包。 我看到金属冲洗是占用大部分渲染时间。 那是件好事儿吗?

SceneKit统计信息显示

不确定这一点,因为苹果公司似乎没有logging什么是“金属冲洗”的地方,但我会根据以前使用OpenGL的经验来回答:

在GPU供电的应用程序的执行周期中,CPU会将数据推送到GPU,等待GPU完成对这些数据的操作(可能同时做其他工作),一旦GPU完成,推更多的数据和请求更多的操作。 通常情况下,“刷新”意味着CPU正在等待GPU完成操作(“刷新旧数据”),以便将更多数据传送到GPU。

所以,如果我的解释是正确的,那么这意味着“金属冲洗”测量C​​PU等待video内存释放的时间,以便将更多的数据和请求操作推送给GPU。 在这种情况下,这可能是一件好事或坏事:

CPU和GPU之间总会有一些通信开销,所以如果大部分渲染时间被“金属冲洗”所占用,这可能意味着您的应用程序运行得足够快,以至于帧之间的大部分延迟是只是通信开销。 在这种情况下,这将是一件好事。

另一方面,您可能会向GPU推送大量数据,复制数据和处理数据所需的时间可能会导致延迟。 在这种情况下,这将是一件坏事。

最后,重要的是确保你的FPS始终如一。 如果您的FPS由于“金属冲洗”而下降,则可能需要尝试隔离数据传输 – 例如,以大块forms存储纹理和/或使用较低分辨率的纹理可能会有所帮助。