触摸/释放屏幕时,Galaxy Note 2上的Android线程性能/优先级



我有一款适用于Android的OpenGL游戏。当触摸屏幕时,它以良好的60fps的速度运行。当我松开手指时,它会回到每秒30帧左右。触摸事件/释放是否提高/降低线程的优先级?如果是,我如何复制它以保持恒定的60fps。到目前为止,这似乎只是Galaxy Note 2上的一个问题。

我假设您使用的是onDrawFramesetRenderMode(RENDERMODE_CONTINUOUSLY)

30和60FPS表示在设备屏幕刷新时调用onDrawFrame的实现。大多数显示器刷新频率为60Hz,提供60FPS。

Galaxy Note 2可能有一些省电功能,当屏幕上没有触摸时,屏幕刷新率限制在30Hz。检查是否有任何方法可以禁用此功能。

AFAIK,OpenGL ES没有指定屏幕刷新率的标准,您需要一个节流功能来确保您的游戏在FPS不同的情况下运行/感觉相同(即以相同的速度)。

是。

观察这种现象的最好方法是使用启用了"freq"标签的systrace。你可能需要一个根设备,而且你肯定需要一个启用了systrace的设备。

systrace将记录各种组件的时钟频率的变化。它因设备而异,但通常可以获得每个核心的CPU时钟和GPU内存速率。在帧速率下降的同时,你可能会看到其中几个显著下降。

这样做的动机是减少电力需求并延长电池寿命。假设是,当你的手指与屏幕接触时,你正在积极地做一些事情,设备应该尽可能地做出响应。经过一段短暂的时间后,时钟将减慢到适合当前工作负载的水平。确定减速前等待多长时间以及减速多少的启发式方法针对每个设备进行了调整。

(这导致一些人创建了一个只在多核设备上运行的线程,作为人为提高CPU时钟速率的一种方式。不推荐。另请参阅此答案。)

底线是,这不是一个简单的调整线程优先级的问题。你必须在意识到速度会减慢和适应它之间做出选择(通过使游戏更新独立于帧速率),或者想办法在你想要流畅动画时欺骗设备保持在更高功率模式。

(对于任何想在家里玩的人来说:制作一份Grafika的副本,并启动"记录GL应用程序"活动。如果你在屏幕上拖动手指,一切都会很好,但如果你把它放在一边几秒钟,你可能会开始看到随着应用程序的落后,掉帧计数器会上升。在Nexus 5、Nexus 7(2013)和其他网站上看到。)

最新更新