代码改变世界

Snapdragon——1.定位游戏瓶颈

2020-02-21 17:37  kk20161206  阅读(1029)  评论(0编辑  收藏  举报

1. 怎么定位瓶颈?

第一步,看fps;(1)平均fps;(2)帧率连贯性,有没有卡顿、掉帧。平均为42帧,但会掉到37. Trace tab下的rendering stage、gpu activity、cpu Scheduling是主要量度。

 

 rendering stage表示gpu上的 执行。有surface,通道。

 

  gpu activity能看到cpu和gpu间的交互。

cpu scheduling能看到cpu每个核心的执行。看是否有调度的问题。

 

 

 

1. 看是否gpu是瓶颈。在realtime签页,看gpu利用率,如果gpu利用率很高;在trace tab下,看surface之间有间隔,说明gpu瓶颈;

 

 

 

 

下面这张gpu利用率98到100,说明gpu是瓶颈。

另外,在trace下,gpu Activity合gpu stages下面。也能参考,如下图,gpu不是瓶颈:

 

 而,如下图,gpu瓶颈:

 

 

2. 如果gpu不是瓶颈,那么看cpu是否是瓶颈。

cpu利用率有时候很低,但cpu还可能是瓶颈。因为cpu是多核心的。这时候看cpu scheduling。

 

 cpu6好像是瓶颈。

然后看这个核心什么是瓶颈。

 

 

可以看到,SatisfyConstraints函数是瓶颈。修改函数、弄到多个线程后,

 

cpu不再是瓶颈了。

(3)垂直同步瓶颈

如果不是gpu、cpu,那么可能是垂直同步受限。也就是说游戏跑得能达到屏幕显示那个速度了。可以看到这样的:

 

 帧时间大约是16ms(60fps),在帧结尾,cpu和gpu都在等surface渲染。也就是说游戏已经跑的屏幕的刷新速度一样了。

但是即使游戏已经垂直同步受限了,依然有优化的潜能,除了提高帧率以外的。

更多app的问题在于耗电量大。所以,依然要优化代码,用更少的资源、运行在温度更低的机器上,做更少的工作,实现更高的帧率。在低端设备上,性能依然很好。

 

 参考链接:https://developer.qualcomm.com/software/snapdragon-profiler/app-notes/identify-application-bottlenecks