Unity:Android 上的 FPS 随机下降到接近零(提供了很多线索)

Max*_*Max 5 performance android opengl-es game-development unity-game-engine

首先感谢您花时间查看此内容 - 我们感谢您的任何意见!

\n

关于我们现在面临的问题:\n在过去的几个月里,我们在 Android 上的游戏应用程序中遇到了随机 fps 下降到接近于零的情况,并且到目前为止尚未成功调试该问题。它完全随机发生(有时在 3 分钟后,有时在 3 小时后),感觉就像冻结一样 - 但实际上 FPS 在仍在运行时下降得非常快。\n我们已经花了相当多的时间使用各种工具进行调试和分析。现在我们希望您能帮助我们并从我们的数据中得出新的结论。

\n

版本:

\n
    \n
  • Unity版本:2020.3.30f1
  • \n
  • 用户计划:10.8.1
  • \n
\n

线索:

\n
    \n
  • 这不是完全冻结。如果您等待足够长的时间,新的帧就会被渲染。
  • \n
  • 首先,帧时间变为 30 毫秒、50 毫秒、100 毫秒、500 毫秒、1000 毫秒、3 分钟、5 分钟等 - 在很短的时间内
  • \n
  • 该问题已在不同的 Android 设备上重现(例如 OnePlus 6)
  • \n
  • 在统一分析器中,我们可以看到,当问题发生时,主线程似乎正在等待渲染线程上的“gfx.presentframe”
  • \n
  • 负载没有实际增加(您可能在同一场景中闲置 30 分钟,一切都很好,然后 fps 突然下降。我们也没有看到多边形、内存使用量增加,分析器中的任何内容都没有增加)
  • \n
  • 问题发生在屏幕上具有不同对象的不同场景等中
  • \n
  • 问题随机发生,有时在运行应用程序 5 分钟后,有时在运行应用程序 2 小时后。它似乎与设备变热或进入电源安全模式无关
  • \n
  • 问题不需要任何输入/交互。它只是在让应用程序空闲时发生
  • \n
  • 在 ARM mobile studio 图形分析器中,我们可以看到,一旦问题发生,eglGetCurrentContext() 和下一个命令 (eglGetSyncAttribKHR ) 之间就会有约 3 分钟(或更长)的间隙 - 然而命令本身只需要几个 \xce\xbcs。当查看较早的帧时(问题开始之前),eglGetCurrentContext() 和下一个命令 (eglGetSyncAttribKHR ) 之间没有明显的延迟。eglGetCurrentContext() 的返回值在问题开始之前和问题发生时是相同的
  • \n
\n

分析器的屏幕截图(帧时间超过 2 秒):\n在此输入图像描述

\n

我们可以在以下位置重现该问题:

\n
    \n
  • 小米红米 9T [高通 SM6115 骁龙 662]
  • \n
  • 雅思特T5【全志A133】
  • \n
  • 一加 6 (A6003) [高通 SDM845 骁龙 845]
  • \n
\n

我们在这里希望的是:

\n
    \n
  • 我们非常高兴获得任何帮助或线索
  • \n
  • 哪种分析工具可以告诉我们到底出了什么问题?
  • \n
  • 下一步应该采取什么措施来找出问题所在以及如何解决这个问题?
  • \n
  • 以前有人见过类似的事情发生吗?
  • \n
\n

小智 4

尝试在项目设置 -> 播放器 -> Android -> 分辨率和演示下禁用优化帧节奏。https://forum.unity.com/threads/semaphore-waitforsignal-freez-project-after-some-time.1248895/