【问题标题】:Xcode logging: "Metal API Validation Enabled"Xcode 日志记录:“启用金属 API 验证”
【发布时间】:2020-06-23 23:45:53
【问题描述】:

我正在通过 Xcode 构建一个 macOS 应用程序。每次构建时,我都会得到日志输出:

启用金属 API 验证

据我所知,我的应用没有使用任何 Metal 功能。我没有使用硬件加速的 3D 图形或着色器或视频游戏功能或类似的东西。

为什么 Xcode 打印 Metal API 日志输出?

Metal 是否正在我的应用中使用?我可以或应该禁用它吗?

如何禁用此“Metal API Validation Enabled”日志消息?

【问题讨论】:

    标签: ios xcode macos metal oslog


    【解决方案1】:

    通过 Xcode 方案切换 Metal API 验证:

    方案 > 编辑方案...> 运行 > 诊断 > Metal API 验证。

    这是一个复选框,所以可能的选项是EnabledDisabled

    禁用会在您的 .xcscheme 文件中设置密钥 enableGPUValidationMode = 1

    禁用后,Xcode 不再记录“Metal API Validation Enabled”日志消息。

    注意:在 Xcode 11 及更低版本中,该选项出现在方案编辑器的“选项”选项卡中(而不是“诊断”选项卡)。

    【讨论】:

    • 它有什么用..?
    • 方案>编辑方案...>运行>选项>金属API验证。
    【解决方案2】:

    如何禁用消息:

    在窗口顶部选择您的方案。点击下拉列表中的Edit Scheme,转到Diagnostics并取消勾选Metal API Validation复选框。

    Metal 是否在我的应用中使用?

    是的,即使您的代码不直接与 GPU 交互,许多高级框架也会这样做——特别是 Core ImageSpriteKitSceneKit。例如,我将应用程序中讨厌的“Metal API Validation Enabled”消息缩小到这一行:

    layer.backgroundColor = NSColor(patternImage: image).cgColor
    

    我应该禁用 Metal API 验证吗?

    启用验证会检查每个 Metal API 调用,这会导致“small, but measurable, impact on CPU performance.”这个验证的目的是

    检查错误调用 Metal API 的代码,包括资源创建、编码 Metal 命令和其他常见任务中的错误。

    像 Core Image 这样的 Apple 框架错误地使用 Metal API 的可能性非常低,所以如果您的应用只使用那些高级 Apple 框架,那么我会说您应该放心禁用 API 验证。摆脱那个该死的输出消息是值得冒险的。

    【讨论】:

    • NSColor 等 API 正在触发日志记录的详细信息。
    【解决方案3】:

    我收到了完全相同的信息。

    我在滚动视图关闭的末尾有一个.onDelete(perform: deleteLocations)

    我将滚动视图更改为列表,消息消失了。

    【讨论】:

      【解决方案4】:

      我最近开始着手更新我的 macOS 应用程序。

      它运行良好,没有错误,但是我从一个较旧的 xcode 项目中添加了一个故事板文件,当我触发 .loadWindow() 时,我在我的日志中看到了这些:

      • “启用金属 API 验证”
      • “数据文件的fopen失败:errno = 2(没有这样的文件或目录)”

      然后我查看了界面生成器,我的一个标签处于一个奇怪的位置。 所以我将该标签居中并再次运行应用程序,"fopen failed for data file: errno = 2 (No such file or directory)" 警告消失了。 每当我从该 .storyboard 文件加载该窗口时,它仍然会显示 “Metal API Validation Enabled”,但这并不困扰我。

      所以我认为这与操作系统如何绘制窗口和视图有关,或者可能与界面构建器版本差异有关。

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 2021-07-31
        • 2012-07-12
        • 2013-10-22
        • 2013-09-13
        相关资源
        最近更新 更多