zlgopen / awtk-linux-fb

awtk port for linux framebuffer
110 stars 49 forks source link

AWTK程序的界面刷新率只有LCD时序帧率的一半 #88

Open ufbycd opened 2 years ago

ufbycd commented 2 years ago

LCD接口是RGB,驱动类型是fbdev,用window_manager_set_show_fps(window_manager(), TRUE)显示程序刷新帧率发现在没有更新内容的界面上其FPS只有LCD时序帧率的一半:

粗略看了下源码,发现宏__FB_WAIT_VSYNC默认为1即刷新时默认会调用ioctl(fb->fd, FBIO_WAITFORVSYNC, &dummy);来等待垂直同步信号,个人认为:在双缓存的fbdev设备上是不需要等待垂直同步的。

于是,我将文件awtk-port/lcd_linux/lcd_linux_fb.c的宏__FB_WAIT_VSYNC定义改为#define __FB_WAIT_VSYNC 0后程序的最大帧率达到了LCD时序帧率。测试过程也没发现有界面撕裂的情况。

sohide commented 2 years ago

双缓冲需要等垂直同步, 如果每帧渲染时间都超出16ms, 则帧率只有一半, 三缓冲可以得到一定的缓解

https://www.bilibili.com/video/BV1FK4y1x7bk?spm_id_from=333.999.0.0

ufbycd commented 2 years ago

双缓冲需要等垂直同步, 如果每帧渲染时间都超出16ms, 则帧率只有一半, 三缓冲可以得到一定的缓解

https://www.bilibili.com/video/BV1FK4y1x7bk?spm_id_from=333.999.0.0

双缓冲需不需要进行垂直同步,要看实现方式:如果硬件本身支持双缓冲就不需要垂直同步;如果硬件不支持双缓冲即双缓冲是由软件实现的才需要垂直同步。

WeSrc-Yin commented 2 years ago

太专业了,什么是垂直同步?

ufbycd commented 1 year ago

太专业了,什么是垂直同步?

ioctl(fb->fd, FBIO_WAITFORVSYNC, &dummy); 就是等待RGB接口时序上的VSYNC信号到来后才刷屏。