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