1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 09:50:04 +08:00
SpaceVim/bundle/vim-matchup/autoload/matchup/perf.vim
2020-06-13 14:06:35 +08:00

118 lines
2.9 KiB
VimL

" vim match-up - even better matching
"
" Maintainer: Andy Massimino
" Email: a@normed.space
"
let s:save_cpo = &cpo
set cpo&vim
let s:time_start = {}
let s:alpha = 2.0/(10+1)
let g:matchup#perf#times = {}
function! matchup#perf#tic(context)
let s:time_start[a:context] = reltime()
endfunction
function! matchup#perf#toc(context, state)
let l:elapsed = s:reltimefloat(reltime(s:time_start[a:context]))
let l:key = a:context.'#'.a:state
if has_key(g:matchup#perf#times, l:key)
if l:elapsed > g:matchup#perf#times[l:key].maximum
let g:matchup#perf#times[l:key].maximum = l:elapsed
endif
let g:matchup#perf#times[l:key].last = l:elapsed
let g:matchup#perf#times[l:key].emavg = s:alpha*l:elapsed
\ + (1-s:alpha)*g:matchup#perf#times[l:key].emavg
else
let g:matchup#perf#times[l:key] = {
\ 'maximum' : l:elapsed,
\ 'emavg' : l:elapsed,
\ 'last' : l:elapsed,
\}
endif
endfunction
function! s:sort_by_last(a, b)
let l:a = g:matchup#perf#times[a:a].last
let l:b = g:matchup#perf#times[a:b].last
return l:a == l:b ? 0 : l:a > l:b ? 1 : -1
endfunction
function! matchup#perf#show_times()
let l:keys = keys(g:matchup#perf#times)
let l:contexts = uniq(sort(map(copy(l:keys), 'split(v:val, "#")[0]')))
if empty(l:contexts)
echo 'no times'
return
end
echohl Title
echo printf("%42s%11s%17s", 'average', 'last', 'maximum')
echohl None
for l:c in l:contexts
echohl Special
echo '['.l:c.']'
echohl None
let l:states = filter(copy(l:keys), 'v:val =~# "^\\V'.l:c.'#"')
call sort(l:states, 's:sort_by_last')
for l:s in l:states
echo printf(" %-25s%12.2gms%12.2gms%12.2gms",
\ join(split(l:s,'#')[1:],'#'),
\ 1000*g:matchup#perf#times[l:s].emavg,
\ 1000*g:matchup#perf#times[l:s].last,
\ 1000*g:matchup#perf#times[l:s].maximum)
endfor
endfor
endfunction
command! MatchupShowTimes call matchup#perf#show_times()
command! MatchupClearTimes let g:matchup#perf#times = {}
let s:timeout = 0
let s:timeout_enabled = 0
let s:timeout_pulse_time = reltime()
function! matchup#perf#timeout() " {{{1
return float2nr(s:timeout)
endfunction
"}}}1
function! matchup#perf#timeout_start(timeout) " {{{1
let s:timeout = a:timeout
let s:timeout_enabled = (a:timeout == 0) ? 0 : 1
let s:timeout_pulse_time = reltime()
endfunction
" }}}1
function! matchup#perf#timeout_check() " {{{1
if !s:timeout_enabled | return 0 | endif
let l:elapsed = 1000.0 * s:reltimefloat(reltime(s:timeout_pulse_time))
let s:timeout -= l:elapsed
let s:timeout_pulse_time = reltime()
return s:timeout <= 0.0
endfunction
" }}}1
" function! s:reltimefloat(time) {{{1
if exists('*reltimefloat')
function! s:reltimefloat(time)
return reltimefloat(a:time)
endfunction
else
function! s:reltimefloat(time)
return str2float(reltimestr(a:time))
endfunction
endif
" }}}1
let &cpo = s:save_cpo
" vim: fdm=marker sw=2