forked from aniani/vim
patch 8.2.5057: using gettimeofday() for timeout is very inefficient
Problem: Using gettimeofday() for timeout is very inefficient. Solution: Set a platform dependent timer. (Paul Ollis, closes #10505)
This commit is contained in:
committed by
Bram Moolenaar
parent
1d97db3d98
commit
6574577cac
@@ -37,6 +37,15 @@ endfunc
|
||||
func Test_hlsearch_hangs()
|
||||
CheckFunction reltimefloat
|
||||
|
||||
" So, it turns out the Windows 7 implements TimerQueue timers differently
|
||||
" and they can expire *before* the requested time has elapsed. So allow for
|
||||
" the timeout occurring after 80 ms (5 * 16 (the typical clock tick)).
|
||||
if has("win32")
|
||||
let min_timeout = 0.08
|
||||
else
|
||||
let min_timeout = 0.1
|
||||
endif
|
||||
|
||||
" This pattern takes a long time to match, it should timeout.
|
||||
new
|
||||
call setline(1, ['aaa', repeat('abc ', 1000), 'ccc'])
|
||||
@@ -45,7 +54,7 @@ func Test_hlsearch_hangs()
|
||||
let @/ = '\%#=1a*.*X\@<=b*'
|
||||
redraw
|
||||
let elapsed = reltimefloat(reltime(start))
|
||||
call assert_true(elapsed > 0.1)
|
||||
call assert_true(elapsed > min_timeout)
|
||||
call assert_true(elapsed < 1.0)
|
||||
set nohlsearch redrawtime&
|
||||
bwipe!
|
||||
|
||||
@@ -1550,6 +1550,32 @@ func Test_search_errors()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_search_timeout()
|
||||
new
|
||||
let pattern = '\%#=1a*.*X\@<=b*'
|
||||
let search_timeout = 0.02
|
||||
let slow_target_timeout = search_timeout * 15.0
|
||||
|
||||
for n in range(40, 400, 30)
|
||||
call setline(1, ['aaa', repeat('abc ', n), 'ccc'])
|
||||
let start = reltime()
|
||||
call search(pattern, '', 0)
|
||||
let elapsed = reltimefloat(reltime(start))
|
||||
if elapsed > slow_target_timeout
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
call assert_true(elapsed > slow_target_timeout)
|
||||
|
||||
let max_time = elapsed / 2.0
|
||||
let start = reltime()
|
||||
call search(pattern, '', 0, float2nr(search_timeout * 1000))
|
||||
let elapsed = reltimefloat(reltime(start))
|
||||
call assert_true(elapsed < max_time)
|
||||
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_search_display_pattern()
|
||||
new
|
||||
call setline(1, ['foo', 'bar', 'foobar'])
|
||||
|
||||
@@ -527,6 +527,15 @@ func Test_syntax_hangs()
|
||||
CheckFunction reltimefloat
|
||||
CheckFeature syntax
|
||||
|
||||
" So, it turns out the Windows 7 implements TimerQueue timers differently
|
||||
" and they can expire *before* the requested time has elapsed. So allow for
|
||||
" the timeout occurring after 80 ms (5 * 16 (the typical clock tick)).
|
||||
if has("win32")
|
||||
let min_timeout = 0.08
|
||||
else
|
||||
let min_timeout = 0.1
|
||||
endif
|
||||
|
||||
" This pattern takes a long time to match, it should timeout.
|
||||
new
|
||||
call setline(1, ['aaa', repeat('abc ', 1000), 'ccc'])
|
||||
@@ -535,7 +544,7 @@ func Test_syntax_hangs()
|
||||
syn match Error /\%#=1a*.*X\@<=b*/
|
||||
redraw
|
||||
let elapsed = reltimefloat(reltime(start))
|
||||
call assert_true(elapsed > 0.1)
|
||||
call assert_true(elapsed > min_timeout)
|
||||
call assert_true(elapsed < 1.0)
|
||||
|
||||
" second time syntax HL is disabled
|
||||
@@ -549,7 +558,7 @@ func Test_syntax_hangs()
|
||||
exe "normal \<C-L>"
|
||||
redraw
|
||||
let elapsed = reltimefloat(reltime(start))
|
||||
call assert_true(elapsed > 0.1)
|
||||
call assert_true(elapsed > min_timeout)
|
||||
call assert_true(elapsed < 1.0)
|
||||
|
||||
set redrawtime&
|
||||
@@ -642,7 +651,7 @@ func Test_syntax_c()
|
||||
\ "\tNote: asdf",
|
||||
\ '}',
|
||||
\ ], 'Xtest.c')
|
||||
|
||||
|
||||
" This makes the default for 'background' use "dark", check that the
|
||||
" response to t_RB corrects it to "light".
|
||||
let $COLORFGBG = '15;0'
|
||||
|
||||
Reference in New Issue
Block a user