xf86-video-intel: src/sna/sna_accel.c src/sna/sna_display.c src/sna/sna_driver.c src/sna/sna.h
Chris Wilson
ickle at kemper.freedesktop.org
Fri Nov 4 16:35:37 PDT 2011
src/sna/sna.h | 2 +-
src/sna/sna_accel.c | 8 ++++----
src/sna/sna_display.c | 2 +-
src/sna/sna_driver.c | 4 ++--
4 files changed, 8 insertions(+), 8 deletions(-)
New commits:
commit 676cb4e38dc381b2ef4fb092b66db80687aa5013
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Nov 4 23:30:09 2011 +0000
sna: Run the deferred flush at vrefresh
This helps to reduce the perceived jerkiness of the redraw.
Reported-by: Clemens Eisserer <linuxhippy at gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42413
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 7a7db45..ce9992b 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -225,7 +225,7 @@ struct sna {
int timer[NUM_TIMERS];
int timer_active;
- int flush_interval;
+ int vblank_interval;
struct list deferred_free;
struct list dirty_pixmaps;
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index a51af18..19f8a80 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -8089,13 +8089,13 @@ static Bool sna_accel_do_flush(struct sna *sna)
DBG(("%s, starting flush timer, at time=%ld\n",
__FUNCTION__, (long)GetTimeInMillis()));
- /* Initial redraw after 10ms. */
+ /* Initial redraw hopefully before this vblank */
to.it_value.tv_sec = 0;
- to.it_value.tv_nsec = 10 * 1000 * 1000;
+ to.it_value.tv_nsec = sna->vblank_interval / 2;
- /* Then periodic updates at half-vrefresh (update every other vblank) */
+ /* Then periodic updates for every vblank */
to.it_interval.tv_sec = 0;
- to.it_interval.tv_nsec = sna->flush_interval;
+ to.it_interval.tv_nsec = sna->vblank_interval;
timerfd_settime(sna->timer[FLUSH_TIMER], 0, &to, NULL);
sna->timer_active |= 1 << FLUSH_TIMER;
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index a82ccd8..66f9667 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -601,7 +601,7 @@ static void update_flush_interval(struct sna *sna)
if (max_vrefresh == 0)
max_vrefresh = 40;
- sna->flush_interval = 2000 * 1000 * 1000 / max_vrefresh;
+ sna->vblank_interval = 1000 * 1000 * 1000 / max_vrefresh; /* Hz -> ns */
DBG(("max_vrefresh=%d, flush_interval=%d ns\n",
max_vrefresh, sna->flush_interval));
}
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index cacee4b..8711934 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -504,8 +504,8 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
if (xf86ReturnOptValBool(sna->Options, OPTION_TILING_FB, FALSE))
sna->tiling &= ~SNA_TILING_FB;
- /* Default fail-safe value of 25 Hz */
- sna->flush_interval = 40 * 1000 * 1000;
+ /* Default fail-safe value of 75 Hz */
+ sna->vblank_interval = 1000 * 1000 * 1000 / 75;
sna->flags = 0;
if (!xf86ReturnOptValBool(sna->Options, OPTION_THROTTLE, TRUE))
More information about the xorg-commit
mailing list