1.在android中获取帧渲染时间(间隔)的源码s源通用方法记录
在android中获取帧渲染时间(间隔)的通用方法记录
背景
追求画面流畅与性能优化的平衡是Android系统调度中的一大挑战。FAS(Frame Aware Scheduling)概念应运而生,源码s源主张根据用户感知到的源码s源帧率来调整系统性能,以实现更高效、源码s源神探源码更流畅的源码s源用户体验。关键在于如何实时获取系统渲染帧的源码s源耗时,因为这将直接影响FAS的源码s源性能调整策略。市面上关于这一主题的源码s源信息相对匮乏,本文将概述已知的源码s源获取方法。
获取实时渲染耗时的源码s源常用方法之一是利用Dumpsys命令。执行命令后,源码s源vb 源码 反编译首先显示当前的源码s源vsync间隔,以纳秒为单位,源码s源例如.毫秒,源码s源意味着一秒内会有大约帧的源码s源刷新。接下来的淘宝口令复制源码输出包括desiredPresentTime、frameReadyTime和actualPresentTime,这些数据来源于AOSP源码。
查阅AOSP源码,发现libgui.so中包含了一个用于记录这些时间点的函数,该函数在每次准备向SurfaceFlinger提交帧时被调用。撩妹测试源码每当完成渲染但还未显示时,此函数会被执行。因此,通过记录该函数的调用时间,即可计算出渲染间隔。c语言源码程序实现这一功能的一种方法是使用Dobby hook技术替换此函数,记录时间戳。
为了在目标渲染程序中实现hook,可以调用do_hook()函数,并在replace_func()中记录下时间间隔。至于如何将hook注入到目标程序并执行,本文推荐几种方法,包括Binder dump技术。
Binder dump技术利用Dumpsys程序通过binder服务的dump接口获取信息。这种方法避免了外部程序可能带来的性能损耗和延迟,直接获取系统信息,无需通过额外的程序进行数据处理。尽管作者目前没有深入了解其具体实现细节,但这一方法确实为实时获取系统信息提供了可能。
综上所述,获取Android系统渲染帧的实时耗时是实现FAS等性能优化策略的基础。通过Dumpsys命令、libgui.so中的函数记录、以及Binder dump技术,开发者可以实现这一目标,从而在保证流畅体验的同时,有效管理系统性能。