gpu呈现模式分析柱状图无故爆表的原因

android开发估计都会用gpu呈现模式分析来看下app运行时候的表现,不过最近遇到一个奇怪的现象,配置很好的android机器,例如三星Galaxy和pixel2,都是四五千的机器,在一个app的页面gpu呈现模式分析柱状图却会稳定的超过绿线,熟悉android的应该知道这是帧率不足的表现,应该优化。不过同样的页面在一个低端的机器例如魅蓝却不会出现这种状况,这个很是郁闷。在RecyclerView滑动的时候高端机器和低端机器才会符合预想的结果,pixel2的柱状图顶部离绿线非常远。

具体分析这个页面为啥会一直在绘制,因为不绘制的话图是不会走的,发现是EditText获取到了焦点进而光标一直闪动,这个是完全正常的行为。我又在其他app,例如短信,有EditText的页面发现了与自己app完全一样的表现,大概可以确定和app无关。高端机器都是android 8.0的版本,这个大概率是系统的原因。

在万能的google下,终于找到了解释:

https://www.raizlabs.com/dev/2017/06/the-curious-case-of-systrace-reporting-jank-on-an-edittext/

android8.0后为了省电的考虑,kernel中加入了一种机制,就是project butter

Project Butter was an undertaking by the Android team that started in Android 4.1 Jelly Bean in an effort to improve the touch latency and animation performance on Android devices. One of the ways this was achieved was by doing some clever CPU scaling which would increase the clock speed upon user input. 

这种机制也就是可以想象的限制cpu频率啦,在用户和终端交互的情况下,cpu会高频率运行,在非交互一段时间后cpu会降频。user input对手机端来说基本就是触摸屏操作。很简单的实验,在app页面不停的点击一个没有处理click的View,gpu呈现模式柱状图会瞬间落下成为正常状态。

你可能感兴趣的:(android)