排除应用程序性能问题¶
Kanzi 提供了不同的方法来测量应用程序的性能,并显示各种性能参数。使用这些方法和参数来提高应用程序的性能。
在 Kanzi Studio 中查看应用程序性能¶
要在 Kanzi Studio 中分析应用程序的性能和内部结构, 在 Preview 中单击
以进入 Analyze 模式,右键单击
,然后选择:
Performance HUD 显示了 Kanzi 应用程序在过去 500 帧中的整体性能指标,包括:
Frame Duration (ms) 以毫秒为单位显示渲染最后一帧的时间及平均、最高和最低耗时。
Frame Duration (ms) 图中的最高值显示最长时间,最低值是最近 500 帧期间渲染一帧所用的平均时间。
使用此信息来识别您的 Kanzi 应用程序中的性能瓶颈。例如,您可以使用它通过将渲染分布在多个帧上来找出如何提高应用程序的性能。请参阅 在多个帧之间分配渲染。
API 显示 Kanzi 使用的渲染 API,例如 OpenGL ES 或 Vulkan。它还显示显卡标识符和驱动程序版本。
Frames Per Second 显示每秒渲染的帧数。
Animation Duration (μs) 以微秒为单位显示执行应用程序中最近一帧的所有动画所需的时间及平均、最高和最低耗时。
Draw Count 显示执行了多少个单独的绘图调用。
Draw Count 图中的最高值显示最近 500 帧期间的最高批处理数,最低值是最后一帧中的批处理数。
Triangle Count 显示一帧中绘制的单独三角形的估计总数。
Pipeline Count 显示最后一帧中绑定新渲染管线的次数。请参阅 减少着色器切换。
Pass Count 显示最后一帧中使用了多少个渲染通道。请参阅 渲染最佳实践。
Memory Upload 显示最后一帧使用了多少字节的滚动暂存内存以及缓冲区总大小。暂存内存包含 Uniform 数据以及用于更新顶点缓冲区或纹理等 GPU 资源的临时存储。在某些平台上,每种类型的数据使用各自独立的缓冲区。
Dispatch Count 显示最后一帧中使用了多少次计算调度。
Kanzi Graphics Objects 显示已创建的 Kanzi Graphics 对象的摘要。括号中是最后一帧中创建和删除的对象数量。
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 中访问动画的数量:
要获取活动动画的数量,使用
TimelineClock::getActiveTimelinePlaybackCount。要获取所有动画的数量,请使用
TimelineClock::getTimelinePlaybackCount。
Framebuffer objects 用半透明的黄色移动条纹标记节点,这些节点被渲染到纹理中并导致帧缓冲对象切换。
Transparency 用半透明的蓝色移动条纹标记透明节点。请参阅 配置节点以实现高效渲染。
Overdraw 可视化表示 Kanzi 多次渲染到同一像素的区域。较浅的绿色表示较高的过度绘制量。
查看整体性能¶
要查看您的 Kanzi 应用程序的整体性能:
在 Kanzi Studio Preview 中,点击
,并在上下文菜单中启用 Performance HUD。在
application.cfg中,启用显示完整的 Performance HUD:PerformanceInfoLevel = 2
请参阅 PerformanceInfoLevel。
在
Application::onConfigure函数中启用应用程序代码中 Performance HUD 的显示。configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull;
请参阅 PerformanceInfoLevel。
在
application.hpp中,通过调用Application::getPerformanceInfoLevel和Application::setPerformanceInfoLevel函数启用 Performance HUD 的显示:ApplicationProperties::PerformanceInfoLevel getPerformanceInfoLevel() const { return m_applicationProperties.performanceInfoLevel; } void setPerformanceInfoLevel(ApplicationProperties::PerformanceInfoLevel level) { m_applicationProperties.performanceInfoLevel = level; }
您可以通过调用
application.hpp中的Application::getFramesPerSecond函数获取当前帧率值。要获取渲染一帧所需的时间,使用
MainLoopScheduler计时接口MainLoopScheduler::getLastFrameDuration。
请参阅 应用程序配置参考。
查看资源的加载时间¶
在 application.cfg 文件中或在 Application::onConfigure 函数的应用程序代码中,您可以设置 Kanzi 以打印到调试控制台,显示加载应用程序使用的资源 kzb 文件所需的时间。请参阅 测量资源的加载和部署时间。
查看图形性能¶
在 application.cfg 文件中或在 Application::onConfigure 函数的应用程序代码中,您可以设置 Kanzi 以打印到调试控制台:
应用程序启动时的图形相关信息,例如图形 API、设备和着色语言版本。请参阅 LogOpenGLInformation。
应用程序启动时的图形相关属性的列表,例如交换行为、显示大小以及您应用程序的大小。请参阅 LogSurfaceInformation。
查看节点的过度绘制¶
Overdraw 可视化表示 Kanzi 多次渲染到同一像素的区域。较浅的绿色表示较高的过度绘制量。
Kanzi 使用模板缓冲区来计算它绘制到同一像素的次数。如果您使用模板缓冲区来渲染内容,Overdraw 可视化可能会返回意外结果。
过度绘制可视化不显示:
对您渲染到合成的3D节点进行过度绘制,然后将其渲染到纹理。在这种情况下,Overdraw 可视化将您渲染到纹理的合成内容显示为单个四边形。
当您在其祖先节点中将 Clip Children 属性设置为启用时,被裁剪的节点部分。
完全透明的节点或不可见的节点,包括它们的子节点。
要在您的应用程序中查看过度绘制,请在 Kanzi Studio Preview 中单击
以进入 Analyze 模式,右键单击
,然后选择 Overdraw。
查看渲染到纹理中的节点¶
在某些平台上,在帧缓冲对象之间切换可能会导致显著的性能下降。Kanzi 将节点渲染到纹理中的条件可能很复杂。例如,旋转、缩放或不透明度可能会导致渲染到纹理的发生。
要查看节点是否渲染到纹理中,并导致帧缓冲对象切换,请在 Preview 中单击
进入 Analyze 模式,右键单击
,然后选择 Framebuffer objects。Preview 用透明的橙色条纹突出显示渲染到纹理中的图层。
查看渲染为合成渲染目标的节点¶
在 Kanzi Studio 中,您可以看到应用程序中的哪些2D节点被 Kanzi 渲染到合成渲染目标。
要在 Preview 中查看在 Preview 中使用 alpha 混合的 2D 节点,请单击
进入 Analyze 模式,右键单击
,然后选择 Transparency。
Preview 突出显示了 Kanzi 渲染到具有半透明蓝色条纹的合成渲染目标的节点。