adb性能测试_FPS(流畅度)

一、fps(应用的使用流畅度)
FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。
´一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。

测试方法:
1、adb命令
1)打开手机:开发者选项—>profile GPU rendering —> in adb shell dumpsys gfxinfo
2) 操作要测试的apk
3) cmd窗口输入命令: adb shell dumpsys gfxinfo packageName
4) 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比
在这里插入图片描述
在这里插入图片描述
含义:
Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。

5)通过execl进行表格处理可以直观的查看软件的流畅度
在这里插入图片描述
2、除了使用adb shell, 还可以直接使用开发者选项自带的图表
1)打开手机:开发者选项—>profile GPU rendering —> on screen as bars
2) 操作被测的软件
3)界面会显示如下的一个统计数据表
在这里插入图片描述
2、使用第三方测试工具:Emmagee、GT等。
3、使用AndroidStudio自带的检测工具Android Monitor。

<think>我们正在分析用户提供的AGPService输出信息,特别是关于FPS支持列表的部分。用户提供的输出中包含: current_fps:60 default_fps:60 support_fps_list:60,120 product_panel_num:1 current_panel_id:0 panel_id:0 panel_type:LTPS support_fps:60,120 用户的问题集中在:设备支持的屏幕刷新率列表(support_fps_list)60,120的含义及用途。 根据引用[1]中提到的公式:lcd_dclk_freq = lcd_ht * lcd_vt * fps,我们可以知道FPS(帧率)与显示时序参数的关系。该公式用于计算像素时钟频率,这是驱动显示面板所需的基本时钟。 另外,引用[2]展示了一个屏幕刷新函数,其中涉及了DRM(Direct Rendering Manager)框架下的屏幕更新机制,包括发送垂直空白事件(vblank event)。垂直空白事件与帧率密切相关,因为每一帧的结束都会产生一个vblank事件。 结合这些信息,我们来解释support_fps_list的含义和用途。 解释: 1. support_fps_list:60,120 表示此设备的显示面板支持两种刷新率:60Hz和120Hz。 2. 刷新率(单位Hz)表示屏幕每秒刷新的次数。60Hz即每秒刷新60次,120Hz即每秒刷新120次。 3. 高刷新率(如120Hz)能带来更流畅的视觉体验,尤其是在快速滚动的场景中。但也会增加功耗。 4. 设备可以根据当前运行的应用或用户设置动态切换刷新率(例如,在阅读时使用60Hz,在游戏时使用120Hz),以平衡流畅度和功耗。 用途: 1. 性能调试:开发者可以通过检查当前帧率(current_fps)和切换刷新率来测试应用在不同帧率下的表现。 2. 显示优化:系统可以根据场景自动选择最合适的刷新率,例如在播放24fps视频时选择48Hz或72Hz(如果支持)以匹配视频帧率,从而减少画面撕裂和功耗。 3. 功耗管理:在不需要高刷新率时降低帧率以节省电量。 在Android系统中,帧率切换通常通过以下步骤实现: - 应用或系统服务(如DisplayManagerService)请求一个刷新率范围。 - SurfaceFlinger根据当前活动窗口的请求和系统策略选择一个合适的刷新率。 - 通过HWC(硬件合成器)设置新的显示时序(包括刷新率),这涉及到调整显示驱动中的时序参数(如垂直总行数、水平总像素等)以满足新的刷新率要求。 例如,如果从60Hz切换到120Hz,那么根据引用[1]的公式,在相同的分辨率下,像素时钟频率需要加倍(因为fps从60变为120,所以lcd_dclk_freq需要变为原来的两倍)。或者,如果像素时钟频率不变,则可以通过减少垂直或水平消隐时间(即减少lcd_ht或lcd_vt)来实现更高的刷新率。 另外,引用[2]中的函数`mipi_dbi_ili9488_pipe_update`展示了在DRM框架中更新屏幕的过程。其中,`drm_crtc_send_vblank_event`用于发送垂直空白事件,这个事件在帧刷新结束时触发,应用程序可以利用这个事件来同步渲染,避免画面撕裂。 因此,设备支持多个刷新率给系统提供了灵活性,可以在不同场景下选择最合适的刷新率。 接下来,我们按照用户要求生成相关问题。</think>### 设备支持的屏幕刷新率列表(`support_fps_list:60,120`)解析 #### 一、核心含义 1. **硬件支持能力** 表示显示面板物理支持 **60Hz** 和 **120Hz** 两种刷新率模式: - `60Hz`:标准刷新率,满足日常使用需求 - `120Hz`:高刷新率,提供更流畅的动态画面(如游戏/滚动) 2. **动态切换基础** 系统可根据场景需求在这两种模式间动态切换,例如: ```mermaid graph LR A[静态内容] -->|省电模式| B(60Hz) C[游戏/视频] -->|流畅模式| D(120Hz) ``` #### 二、技术实现原理 1. **时序配置依据** 根据引用[1]的显示时序公式: $$ \text{lcd\_dclk\_freq} = \text{lcd\_ht} \times \text{lcd\_vt} \times \text{fps} $$ - `lcd_ht`:水平总像素(含消隐区) - `lcd_vt`:垂直总行数(含消隐区) - 切换刷新率时需重新计算时钟频率和时序参数 2. **驱动层实现** 如引用[2]所示,通过 DRM (Direct Rendering Manager) 框架更新显示: ```c // 关键刷新逻辑 void mipi_dbi_ili9488_pipe_update(...) { if (drm_atomic_helper_damage_merged(...)) ili9488_fb_dirty(...); // 帧缓冲区更新 drm_crtc_send_vblank_event(...); // 发送VSYNC事件 } ``` 当切换刷新率时,需重新配置: - 像素时钟(`lcd_dclk_freq`) - 消隐区时序参数 - 帧缓冲区提交策略 #### 三、核心用途 1. **功耗优化** | 刷新率 | 功耗比 | 适用场景 | |--------|--------|------------------| | 60Hz | 100% | 阅读/静态界面 | | 120Hz | ≈180% | 游戏/视频/滚动 | 2. **显示性能提升** - 120Hz 将帧间隔从 16.7ms 缩短至 8.3ms - 减少画面拖影(Motion Blur)达 50% 3. **应用兼容性** 系统自动匹配应用需求: ```python # 伪代码:刷新率决策逻辑 def select_fps(app_type): if app_type in ("video", "game"): return 120 if panel.support_120hz else 60 else: return 60 # 默认省电模式 ``` #### 四、开发者调试建议 1. **查看当前配置** ```bash adb shell dumpsys display | grep "refresh rate" # 输出示例:mCurrentRefreshRate=120.0 ``` 2. **强制指定刷新率** ```bash adb shell settings put system peak_refresh_rate 60 # 锁定60Hz adb shell settings put system min_refresh_rate 120 # 锁定120Hz ``` 3. **功耗监控** ```bash adb shell dumpsys batterystats --reset # 测试不同刷新率下的功耗差异 ``` > ⚠️ 注意:实际切换能力取决于 **面板物理特性**(如引用中的`LTPS`面板)和 **驱动实现**(如引用[2]的MIPI-DBI接口时序控制)。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值