Openharmony性能分析之90帧默认刷新率适配
背景介绍 设置手机默认90帧刷新率,支持用户在设置里面可调整。 方案分析 方案一:修改LCD驱动设备树,配置成默认90帧刷新率。 方案二:应用层适配,首次开机luancher设置一把90帧刷新。 方案验证适配 方案一:修复LCD设备树验证 1.1 使用cat /proc/cmdline查看当前设备lcd驱动名字:LCD_ICNL9922C_JINGTAI_MIPI4 1.2查看LCD_ICNL99
·
背景介绍
设置手机默认90帧刷新率,支持用户在设置里面可调整。
方案分析
方案一:修改LCD驱动设备树,配置成默认90帧刷新率。
方案二:应用层适配,首次开机luancher设置一把90帧刷新。
方案验证适配
方案一:修复LCD设备树验证
1.1 使用cat /proc/cmdline查看当前设备lcd驱动名字:LCD_ICNL9922C_JINGTAI_MIPI4
1.2查看LCD_ICNL9922C_JINGTAI_MIPI4.dtsi文件
mattli@DESKTOP-1DDLL8C:~/wrokcode/01.4.1release/out$ find -name LCD_ICNL9922C_JINGTAI_MIPI4.dtsi
./oriole/kernel/src_tmp/linux-5.15/arch/arm64/boot/dts/sprd/lcd/LCD_ICNL9922C_JINGTAI_MIPI4.dtsi
通过配置文件可以看到LCD从60开始,默认是60帧刷新率
刷新率计算公式fps = clock-frequency / ((hactive + hfront + hsync-len + hback)* (vactive + vfront + vsync-len + vback))
display-timings {
native-mode = <&LCD_ICNL9922C_JINGTAI_MIPI4_timing0>; // 选择支持模式,类似switch语句,设置timing0表示从timing0开始支持60和90两种模式;设置timing1表示从timing1支持90一种模式。
LCD_ICNL9922C_JINGTAI_MIPI4_timing0: timing0 { // 60帧刷新率
clock-frequency = <256000000>; // 提供给lcd的时钟频率,一般屏的规格书都会给出, 也可以通过计算得到。clock-frequency = 水平总周期 * 垂直总周期 * 帧率:
// clock-frequency = (hactive + hfront + hsync-len + hback)* (vactive + vfront + vsync-len + vback) * fps
hactive = <1080>; // 横向分辨率。
vactive = <2400>; // 纵向分辨率。
hback-porch = <28>; // 行同步后肩时间。
hfront-porch = <36>; // 行同步前肩时间。
vback-porch = <32>; // 帧同步后肩时间。
vfront-porch = <1274>; // 帧同步前肩时间。
hsync-len = <4>; // 行同步回扫时间。
vsync-len = <4>; // 帧同步回扫时间。
};
LCD_ICNL9922C_JINGTAI_MIPI4_timing1: timing1 { // 90帧刷新率
clock-frequency = <256000000>;
hactive = <1080>;
vactive = <2400>;
hback-porch = <28>;
hfront-porch = <36>;
vback-porch = <32>;
vfront-porch = <38>;
hsync-len = <4>;
vsync-len = <4>;
};
};
1.3 lcd配置文件源码是通过kernel.patch自动生成,以下通过打patch修改验证方法:
1. 下载kernel单仓代码:
git clone -b OpenHarmony-4.1-Release https://gitee.com/cooperation-team-7885/kernel_linux_5.15.git
2.把patch文件device/board/hys/oriole/kernel/kernel.patch拷贝到 已下载kernel单仓目录
3. 打patch
patch -p1 < ./kernel.patch
4. 生成patch
修改arch/arm64/boot/dts/sprd/lcd/LCD_ICNL9922C_JINGTAI_MIPI4.dtsi 交换timing0和timing1大括号里面内容。
LCD_ICNL9922C_JINGTAI_MIPI4_timing0: timing0 { // 90帧刷新率
clock-frequency = <256000000>;
hactive = <1080>;
vactive = <2400>;
hback-porch = <28>;
hfront-porch = <36>;
vback-porch = <32>;
vfront-porch = <38>;
hsync-len = <4>;
vsync-len = <4>;
};
LCD_ICNL9922C_JINGTAI_MIPI4_timing1: timing1 { // 60帧刷新率
clock-frequency = <256000000>;
hactive = <1080>; // 横向分辨率。
vactive = <2400>; // 纵向分辨率。
hback-porch = <28>; // 行同步后肩时间。
hfront-porch = <36>; // 行同步前肩时间。
vback-porch = <32>; // 帧同步后肩时间。
vfront-porch = <1274>; // 帧同步前肩时间。
hsync-len = <4>; // 行同步回扫时间。
vsync-len = <4>; // 帧同步回扫时间。
};
rm -rf kernel.patch
git add .
git diff --staged > kernelnew.patch
5. 把生成kernelnew.patch和工程目录kernel.patch 对比,只改自己修改文件差异
6. 删除out目录kernel,编译整个工程。
7. 刷机验证:
# cat /proc/kmsg |grep mode_valid
<6>[ 4258.520382][T26030@C0] [drm] sprd_dpu_mode_valid() mode: "1080x2400": 90 256000 1080 1116 1120 1148 2400 2438 2442 2474 0x40 0x0
<6>[ 4296.778534][T26030@C0] [drm] sprd_dpu_mode_valid() mode: "1080x2400": 60 256000 1080 1116 1120 1148 2400 3674 3678 3710 0x48 0x0
8. 遗留问题:开机重启概率出现开机动效花屏。
方案二:上层应用修改验证:
2.1 分析设计方案,需要launcher, settingsdata, settings三个模块修改
2.2 方案修改:
- launcher启动时,设置默认90帧;
- settingsdata数据库,增加默认刷新率配置
- settings同步更新数据库:
- 替换launcher, settingsdata, settings三个模块修改后,可以实现默认90帧刷新率效果,没有出现开机花屏等问题。
更多推荐
已为社区贡献13条内容
所有评论(0)