12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- " 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
|