From a2c22362cc2c0bb0451bc8098b3ba0c9353ebe02 Mon Sep 17 00:00:00 2001
From: Paul Mackerras <paulus@samba.org>
Date: Tue, 31 Oct 2006 15:00:53 +1100
Subject: [PATCH] gitk: Limit how often we change the canvas scrolling region

For some unknown reason, changing the scrolling region on the canvases
provokes multiple milliseconds worth of computation in the X server,
and this can end up slowing gitk down significantly.  This works around
the problem by limiting the rate at which we update the scrolling region
after the first 100 rows to at most 2 per second.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 gitk | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gitk b/gitk
index d6ed4f6c405..d5b71dd45dd 100755
--- a/gitk
+++ b/gitk
@@ -2616,6 +2616,7 @@ proc layoutmore {tmax allread} {
 proc showstuff {canshow last} {
     global numcommits commitrow pending_select selectedline curview
     global lookingforhead mainheadid displayorder nullid selectfirst
+    global lastscrollset
 
     if {$numcommits == 0} {
 	global phase
@@ -2623,8 +2624,13 @@ proc showstuff {canshow last} {
 	allcanvs delete all
     }
     set r0 $numcommits
+    set prev $numcommits
     set numcommits $canshow
-    setcanvscroll
+    set t [clock clicks -milliseconds]
+    if {$prev < 100 || $last || $t - $lastscrollset > 500} {
+	set lastscrollset $t
+	setcanvscroll
+    }
     set rows [visiblerows]
     set r1 [lindex $rows 1]
     if {$r1 >= $canshow} {