summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Paul Mackerras <paulus@samba.org>2006-10-31 15:00:53 +1100
committerLibravatar Paul Mackerras <paulus@samba.org>2007-06-23 20:58:06 +1000
commita2c22362cc2c0bb0451bc8098b3ba0c9353ebe02 (patch)
treefe5336976069b666488eefc303ab2ca2d80cd2f3
parentgitk: Add a "reset branch to here" row context-menu operation (diff)
downloadtgif-a2c22362cc2c0bb0451bc8098b3ba0c9353ebe02.tar.xz
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>
-rwxr-xr-xgitk8
1 files changed, 7 insertions, 1 deletions
diff --git a/gitk b/gitk
index d6ed4f6c40..d5b71dd45d 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} {