Adreno GPU上Android 游戏开发介绍 (5)

如何判断应用的性能瓶颈?

受 CPU 限制的应用程序

如果应用程序不受 GPU 限制,仍然需要确定该应用程序是否受 CPU 限制。

与 GPU 密集型应用程序不同,实时视图中的 CPU 利用率百分比并不是 CPU 密集型应用程序的可靠指标。

在这里插入图片描述

在这里插入图片描述

第一个应用程序的平均 CPU 利用率为 16%,第二个应用程序为 23%。第一个是 CPU 密集型的,但它们之间的差异并不像上面 GPU 密集型的应用程序那么明显,因此该应用程序可能看起来不受 CPU 密集型的约束。

受 CPU 限制的应用程序的两个重要标准是它不受 GPU 限制并且平均帧时间超过 16 毫秒。要确定应用程序是否受 CPU 限制,需要考虑应用程序和 CPU 的多线程特性。超越 CPU 利用率并检查频率和线程调度等指标也很有帮助。

在下面的跟踪捕获模式屏幕截图中,Sched CPU 6 中的线程似乎对 CPU 造成了瓶颈:

在这里插入图片描述

下一步是深入研究该线程,以确定多线程的热点和候选对象。采样捕获模式以固定的时间间隔定期对 CPU 程序计数器进行采样,并识别 CPU 热路径。它提供活动的统计表示,包括在每个函数和库中花费的时间。你可以查看代码中的哪些函数花费了最多的执行时间。

以下捕获显示了在 CPU 上运行以渲染布料纹理的函数和函数序列。红色和橙色块表示应用程序代码中的热点。

在这里插入图片描述

在这个案例中,CPU 采样显示 SatisfyConstraints() 是最大的热点,有 98% 的活动。

为了更深入地研究,Snapdragon Profiler 支持用户标记和 Android NDK 中内置的原生跟踪 API。 Android 开发人员可以使用该 API 将跟踪标记插入到应用程序代码中,并在 Snapdragon Profiler 中查看此数据。

在以下示例中,您可以使用 android/trace.h 检测 SatisfyConstraints() 调用并将其追溯到主线程,这是一个工作函数。

在这里插入图片描述

渲染帧中的纹理需要每个布料一个函数,它会根据经过的时间的需要进行滴答。修改应用程序代码以将功能线程化后,Snapdragon Profiler 可以立即显示以下包含性,相关视图的所有活动。

在这里插入图片描述

现在,布料计算正在多线程中进行。CPU 调度中的输出显示更多线程。该应用程序不再受 CPU 限制,因此 CPU 会等待调度被执行。

该过程是使用 Snapdragon Profiler 识别、诊断和解决性能问题的典型过程。

受 Vsync 限制的应用程序

如果你确定该应用程序既不受 CPU 限制,也不受 GPU 限制,则它可能受 Vsync 限制,即它的运行速度可能与显示硬件可以容纳的一样快。 在 Snapdragon Profiler 中使用 Trace Capture 模式,你可能会看到类似以下内容:

在这里插入图片描述

请注意,帧时间大约为 16 毫秒(1 秒除以 60 fps),并且在帧末尾附近有一个间隙,在此期间 GPU 和 CPU 都在等待可用的表面进行渲染。

虽然许多应用程序的目标是在显示器允许的情况下尽可能快地运行,但即使应用程序受 Vsync 限制并且具有更高帧速率之外的好处,仍然有优化的机会。

移动应用程序中的大多数问题都归结为功耗电池寿命。即使你的应用程序可以在不受 CPU 和 GPU限制的情况下达到目标帧率,你能仍然希望优化你的代码。如果可以修改它以使用更少的功率并在更低的温度下运行,应用程序将在减少工作的同时满足目标帧速率。它还可能在低端设备上提供更好的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值