mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.3 KiB
42 lines
1.3 KiB
" Enable folding for ftrace function_graph traces. |
|
" |
|
" To use, :source this file while viewing a function_graph trace, or use vim's |
|
" -S option to load from the command-line together with a trace. You can then |
|
" use the usual vim fold commands, such as "za", to open and close nested |
|
" functions. While closed, a fold will show the total time taken for a call, |
|
" as would normally appear on the line with the closing brace. Folded |
|
" functions will not include finish_task_switch(), so folding should remain |
|
" relatively sane even through a context switch. |
|
" |
|
" Note that this will almost certainly only work well with a |
|
" single-CPU trace (e.g. trace-cmd report --cpu 1). |
|
|
|
function! FunctionGraphFoldExpr(lnum) |
|
let line = getline(a:lnum) |
|
if line[-1:] == '{' |
|
if line =~ 'finish_task_switch() {$' |
|
return '>1' |
|
endif |
|
return 'a1' |
|
elseif line[-1:] == '}' |
|
return 's1' |
|
else |
|
return '=' |
|
endif |
|
endfunction |
|
|
|
function! FunctionGraphFoldText() |
|
let s = split(getline(v:foldstart), '|', 1) |
|
if getline(v:foldend+1) =~ 'finish_task_switch() {$' |
|
let s[2] = ' task switch ' |
|
else |
|
let e = split(getline(v:foldend), '|', 1) |
|
let s[2] = e[2] |
|
endif |
|
return join(s, '|') |
|
endfunction |
|
|
|
setlocal foldexpr=FunctionGraphFoldExpr(v:lnum) |
|
setlocal foldtext=FunctionGraphFoldText() |
|
setlocal foldcolumn=12 |
|
setlocal foldmethod=expr
|
|
|