mirror of
https://github.com/git/git.git
synced 2024-11-18 03:14:02 +01:00
Refine the update heuristic to improve responsiveness a bit.
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.
This commit is contained in:
parent
466e4fdd66
commit
b664550c06
47
gitk
47
gitk
@ -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"]
|
||||
@ -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 == {}} {
|
||||
@ -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
|
||||
@ -123,10 +120,8 @@ 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -134,13 +129,24 @@ to allow selection of commits to be displayed.)}
|
||||
}
|
||||
}
|
||||
|
||||
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} {
|
||||
@ -1127,8 +1133,7 @@ proc drawcommit {id} {
|
||||
}
|
||||
if {[clock clicks -milliseconds] >= $nextupdate
|
||||
&& $numcommits >= $ncmupdate} {
|
||||
doupdate
|
||||
set ncmupdate $numcommits
|
||||
doupdate 1
|
||||
if {$stopped} break
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user