mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-30 12:49:36 +00:00
![Josh Triplett](/assets/img/avatar_default.png)
function_graph traces look like nested function calls, complete with braces denoting the start and end of functions. function-graph-fold.vim teaches vim how to fold these functions, to make it more convenient to browse them. To use, :source function-graph-fold.vim while viewing a function_graph trace, or use "view -S function-graph-fold.vim some-trace" to load it 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). It also takes some time to run (a few seconds for a large trace on my laptop). Nevertheless, I found it very handy to get an overview of a trace and then drill down on problematic calls. Signed-off-by: Josh Triplett <josh@joshtriplett.org> LKML-Reference: <20090806145701.GB7661@feather> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
42 lines
1.3 KiB
VimL
42 lines
1.3 KiB
VimL
" 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
|