在 Preview 中分析您的应用程序

在 Preview 中,单击 image0 以分析应用程序的性能和内部结构。

../../_images/debug-mode.png

除了 Preview Analyze 模式外,Kanzi 还提供了其他方法来帮助您分析应用程序。请参阅 排除应用程序性能问题 和 最佳实践。

当在 Analyze 模式下时,使用 Preview 主菜单或右键单击 image1 以选择您要在 Preview 处于 Analyze 模式时分析的项目类型:

  • Selection 突出显示所选节点。请参阅 在 Preview 中编辑您的应用程序。。

  • Debug objects 显示:

    • 可视化节点,例如光源、摄像机和布局节点。

    • 您为自定义 3D 节点创建的调试可视化。有关此类可视化的示例,请参阅 Node3D 插件示例。

  • Allocated layout 显示了分配给布局下项目的空间的边界框。请参阅 布局控制节点。

  • Actual layout 显示布局下项目使用的空间的边界框。请参阅 布局控制节点。

  • Grid cells 显示 Grid Layout 2D 节点的单元格。请参阅 使用 Grid Layout 节点。

  • Rulers and guides 显示标尺和指南,这些有助于您在应用程序中定位元素。请参阅 使用标尺和参考线。

  • Borders of 2D nodes 用条纹线勾勒出 2D 节点的边界。

  • 3D Grid 在 Scene 节点中显示地面网格。

  • Bounding volumes 显示封闭体积中的网格。

  • Framebuffer objects 用半透明的黄色移动条纹标记节点,这些节点被渲染到纹理中并导致帧缓冲对象切换。

    请参阅 渲染最佳实践。

  • Undrawn area 显示了应用程序屏幕之外区域的更新以及未渲染内容的区域。

  • Transparency 用半透明的蓝色移动条纹标记透明节点。请参阅 配置节点以实现高效渲染。

  • Overdraw 可视化表示 Kanzi 多次渲染到同一像素的区域。较浅的绿色表示较高的过度绘制量。

    请参阅 使用 Sorting Filter 防止过度绘制。。

  • Wireframe 以线框模式绘制所有内容,该模式显示网格的几何结构。

    请记住,Kanzi 将线框模式全局应用于内容。例如,该模式还将后期处理效果和您使用渲染通道在屏幕上绘制的内容呈现为线框。

  • Vertex normals 将网格顶点的法线可视化为 RGB 颜色。

    红色、绿色和蓝色颜色通道的值表示网格局部空间中法线方向向量的 x、y 和 z 值。Kanzi 根据以下公式从相应方向向量分量的值计算每个颜色通道的值:

    \[ColorChannel = 0.5 + 0.5 * VectorComponent\]
  • Performance HUD 显示了您的 Kanzi 应用程序在最近 500 帧中的整体性能指标,包括:

    • Frame Duration (ms) 显示渲染最后一帧所用的时间(以毫秒为单位),以及平均、最高和最低时间。

      Frame Duration (ms) 图中的顶部值显示了渲染最后 500 帧中最长的一帧所用的时间,底部值显示了平均渲染一帧所用的时间。

      使用此信息来识别您的 Kanzi 应用程序中的性能瓶颈。例如,您可以使用它通过将渲染分布在多个帧上来找出如何提高应用程序的性能。请参阅 在多个帧之间分配渲染。

      ../../_images/frame-duration-graph.png
    • Frames Per Second 显示每秒渲染的帧数。

    • Animation Duration (μs) 以微秒为单位显示执行应用程序中最近一帧的所有动画所需的时间及平均、最高和最低耗时。

    • Batch Count 显示了执行了多少个单独的绘制调用(glDrawElements 和 glDrawArrays)。

      您可以通过调用 Renderer::getBatchCount 使用 Kanzi Engine API 访问批处理计数。

      Batch Count 图中的顶部值显示了在最近 500 帧中批次的最高数量,底部值显示了最后一帧中的批次数量。

      ../../_images/batch-count-graph.png
    • Triangle Count 显示在一帧中总共绘制了多少个独立的三角形。

      您可以通过调用 Renderer::getTriangleCount 在 Kanzi Engine API 中访问三角形计数。

    • Texture Switches 显示了新纹理绑定到 GPU 的次数。

      您可以通过调用 Renderer::getTextureSwitchCount 在 Kanzi Engine API 中访问纹理切换计数。

    • FBO Switches 显示绑定到 GPU 的帧缓冲对象的数量。请参阅 渲染最佳实践。

      您可以通过调用 Renderer::getFramebufferSwitchCount 在 Kanzi Engine API 中访问缓冲区切换计数。

    • Shader 显示了为新应用的批次绑定新着色器的次数以及为上一帧发送的单个着色器统一变量的数量。请参阅 减少着色器切换。

      您可以通过调用 Renderer::getShaderSwitchCount 在 Kanzi Engine API 中访问着色器切换计数。

      您可以通过调用 Renderer::getUniformSendCount 来访问在 Kanzi Engine API 中发送的 uniforms。

    • Buffer Switches 显示了绑定到 GPU 的顶点、索引和统一缓冲区对象的数量。

      您可以通过调用 Renderer::getBufferSwitchCount 在 Kanzi Engine API 中访问缓冲区切换计数。

    • Buffer and Texture Data Updates 显示了新的顶点缓冲区或纹理数据上传到 GPU 的次数。如果同一个缓冲区被用于写入和读取操作,这些繁重的操作可能会导致 GPU 执行延迟。理想值是 0。

      例如,当文本字形缓存需要频繁更新时,该值可能会增加。在这种情况下,要减少字形缓存更新,请降低 Text Block 节点中 Font Size 属性的值。

      您可以通过调用 Renderer::getHeavyweightCallCount 在 Kanzi Engine API 中访问此内容。

    • View Camera 显示用于在您的应用程序中显示场景的 Camera 节点的名称。

    • Resource Memory Use 显示您的 Kanzi 应用程序使用的本地 GPU 内存 (VRAM) 和非本地 GPU 内存 (RAM) 的估计量。

      Performance HUD 在 Kanzi Studio Preview 中显示的值与您在目标设备上运行 Kanzi 应用程序时的值不同,因为 Kanzi Studio 会加载并在内存中保留应用程序中的所有资源。

    • Timers 显示 MainLoopScheduler 中已注册的计时器处理程序的数量。计时器处理程序过多可能会降低应用程序的性能。请参阅 添加计时器。

      您可以通过调用 MainLoopScheduler::getTimersCount 在 Kanzi Engine API 中访问计时器订阅的数量。

    • Recurring Tasks 显示添加到主循环调度器各阶段的任务总数。Kanzi Engine 默认会添加一些任务。请参阅 添加重复任务。

      您可以通过调用 MainLoopScheduler::getTasksTotalCount 在 Kanzi Engine API 中访问重复任务的数量。

    • Animations 显示了您的 Kanzi 应用程序中活动动画和所有动画的数量。

      您可以在 Kanzi Engine API 中访问动画的数量:

  • Frame time HUD 显示了您的 Kanzi 应用程序在最近 500 帧中的这些帧时间指标:

    • Frame Duration (ms) 显示渲染最后一帧所用的时间(以毫秒为单位),以及平均、最高和最低时间。

    • Frames Per Second 显示每秒渲染的帧数。

    • Animation Duration (μs) 以微秒为单位显示执行应用程序中最近一帧的所有动画所需的时间及平均、最高和最低耗时。

小技巧

要自定义 Kanzi Studio 在 Analyze 模式下显示不同类型项目的方式,请选择 Edit > User Preferences,并在 Preview 选项卡中设置项目的颜色和线条粗细。

Preview 日志文件

Kanzi Studio 将 Preview 日志消息存储在 %USERPROFILE%\AppData\Local\Temp\KanziStudioLogs\KanziPreview.log 文件中。

要设置日志记录详细程度,请在 <KanziInstallation>\Studio\Bin\KanziPreview.exe.config 文件中设置 logLevel 键的值:

  • NORMAL 将 Kanzi Studio 设置为记录常规 Kanzi Studio Preview 流程,包括错误和异常。

  • VERBOSE 将 Kanzi Studio 设置为记录 Kanzi Studio 和 Preview 之间的所有低级通信,精确到毫秒级。

    当您将日志级别设置为 VERBOSE 时,大量的日志消息可能会降低 Kanzi Studio 的性能。

  • NONE 将 Kanzi Studio 设置为不向 KanziPreview.log 文件记录任何消息。

例如,要记录 Kanzi Studio 和 Preview 之间的所有通信,请在文本编辑器中打开 KanziPreview.exe.config 文件,并设置:

<add key="logLevel" value="VERBOSE"/>

要将更改应用到 KanziPreview.exe.config,保存 KanziPreview.exe.config 文件并按 Ctrl F8 以重启 Preview。请参阅 控制 Preview。

每次重新启动 Preview 时,Kanzi Studio 会覆盖 KanziPreview.log 文件的内容。

另请参阅

排除应用程序性能问题

在 Preview 中编辑您的应用程序。

预览 (Preview)

查找无效的项目项

使用标尺和参考线