Skip to content

Commit

Permalink
Refine the update heuristic to improve responsiveness a bit.
Browse files Browse the repository at this point in the history
The previous commit improved performance a lot but also meant that
we waited longer to see something drawn.  This refines the heuristics
for when to call update so that (1) when we have finished processing
a bufferfull of information from git-rev-list, we call update if
enough time has elapsed, regardless of how many commits we've drawn,
and (2) the number of commits drawn between updates scales with the
total number of commits drawn: 1 for 1-99 commits, 10 for 100-9999
commits, or 100 for >= 10000 commits.
  • Loading branch information
Paul Mackerras committed Aug 10, 2005
1 parent 466e4fd commit b664550
Showing 1 changed file with 25 additions and 22 deletions.
47 changes: 25 additions & 22 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ proc getcommits {rargs} {
set phase getcommits
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100]
set ncmupdate 0
set ncmupdate 1
if [catch {
set parse_args [concat --default HEAD $rargs]
set parsed_args [split [eval exec git-rev-parse $parse_args] "\n"]
Expand Down Expand Up @@ -62,7 +62,6 @@ proc getcommitlines {commfd} {
global commits parents cdate children nchildren
global commitlisted phase commitinfo nextupdate
global stopped redisplaying leftover
global numcommits ncmupdate

set stuff [read $commfd]
if {$stuff == {}} {
Expand Down Expand Up @@ -110,10 +109,8 @@ to allow selection of commits to be displayed.)}
set commitlisted($id) 1
parsecommit $id $cmit 1
drawcommit $id
if {[clock clicks -milliseconds] >= $nextupdate
&& $numcommits >= $ncmupdate + 100} {
doupdate
set ncmupdate $numcommits
if {[clock clicks -milliseconds] >= $nextupdate} {
doupdate 1
}
while {$redisplaying} {
set redisplaying 0
Expand All @@ -123,24 +120,33 @@ to allow selection of commits to be displayed.)}
foreach id $commits {
drawcommit $id
if {$stopped} break
if {[clock clicks -milliseconds] >= $nextupdate
&& $numcommits >= $ncmupdate + 100} {
doupdate
set ncmupdate $numcommits
if {[clock clicks -milliseconds] >= $nextupdate} {
doupdate 1
}
}
}
}
}
}

proc doupdate {} {
global commfd nextupdate
proc doupdate {reading} {
global commfd nextupdate numcommits ncmupdate

incr nextupdate 100
fileevent $commfd readable {}
if {$reading} {
fileevent $commfd readable {}
}
update
fileevent $commfd readable [list getcommitlines $commfd]
set nextupdate [expr {[clock clicks -milliseconds] + 100}]
if {$numcommits < 100} {
set ncmupdate [expr {$numcommits + 1}]
} elseif {$numcommits < 10000} {
set ncmupdate [expr {$numcommits + 10}]
} else {
set ncmupdate [expr {$numcommits + 100}]
}
if {$reading} {
fileevent $commfd readable [list getcommitlines $commfd]
}
}

proc readcommit {id} {
Expand Down Expand Up @@ -1127,8 +1133,7 @@ proc drawcommit {id} {
}
if {[clock clicks -milliseconds] >= $nextupdate
&& $numcommits >= $ncmupdate} {
doupdate
set ncmupdate $numcommits
doupdate 1
if {$stopped} break
}
}
Expand Down Expand Up @@ -1171,7 +1176,7 @@ proc drawgraph {} {
if {$startcommits == {}} return
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr $startmsecs + 100]
set ncmupdate 0
set ncmupdate 1
initgraph
set todo [lindex $startcommits 0]
drawrest 0 1
Expand Down Expand Up @@ -1210,10 +1215,8 @@ proc drawrest {level startix} {
drawslants $level
}
if {[clock clicks -milliseconds] >= $nextupdate
&& $numcommits >= $ncmupdate + 100} {
update
incr nextupdate 100
set ncmupdate $numcommits
&& $numcommits >= $ncmupdate} {
doupdate 0
}
}
}
Expand Down

0 comments on commit b664550

Please sign in to comment.