手机强制进行GPU渲染好不好


【技术解析】VR实时操作游戏App的帧率优化与硬件加速适配挑战

作为一款VR实时操作游戏App,我们的主要任务是根据重力感应系统实时监控手机的角度,并渲染出相应位置的VR图像。在不同Android设备之间,由于使用的芯片组和不同架构的GPU,游戏性能会因此受到显著影响。如何在不同的手机设备上实现流畅的VR游戏体验,是我们要解决的核心问题。

如果游戏出现帧速率下降或加载时间延长,玩家会很快失去兴趣。如果游戏耗尽电池电量或设备过热,也会使在长途旅行中的玩家流失。为了避免这些问题,我们需要对代码进行优化,以适配市场上不同手机的不同帧率运行。

面临的挑战:

我们使用Streamline获取在Android设备上运行的游戏的配置文件,通过CPU和GPU性能计数器活动可视化,准确了解设备处理CPU和GPU工作负载的情况,以定位帧速率下降的主要原因。

通过友盟+U-APM测试发现,在onSurfaceCreated函数中进行渲染时出现卡顿,初步确定GPU在算数运算过程中发生了卡顿。由于不同设备有不同的性能预期,所以需要为每个设备设置自己的性能预算。例如,已知设备中GPU的最高频率,并提供目标帧速率,则可以计算每帧GPU成本的绝对限制。

数据资源问题:

调试与优化过程:

我们曾尝试对引用资源进行代码上的编辑优化,然而这会触发新副本的创建,虽然能实现目标但会产生大量的CPU开销。于是我们使用Streamline查明高CPU负载的实例。在图形驱动程序内部libG_Mali.so路径函数中,我们发现极高的占用时间。

为了适配不同手机上的不同帧率运行,我们需要查明libG_Mali.so是否在不同机型的设备上都产生了极高的占用时间。此处采用了友盟+U-APM来检测用户在不同机型上的函数占用比例。经检测,下列机型会产生高libG_Mali.so占用的问题。因此我们需要基于底层硬件的运行情况来解决流畅性问题。存在问题的机型不止一种,我们需要从内存层面着手,考虑如何调用较少的内存缓存区并及时释放内存。

解决方案及优化: