1" Enable folding for ftrace function_graph traces. 2" 3" To use, :source this file while viewing a function_graph trace, or use vim's 4" -S option to load from the command-line together with a trace. You can then 5" use the usual vim fold commands, such as "za", to open and close nested 6" functions. While closed, a fold will show the total time taken for a call, 7" as would normally appear on the line with the closing brace. Folded 8" functions will not include finish_task_switch(), so folding should remain 9" relatively sane even through a context switch. 10" 11" Note that this will almost certainly only work well with a 12" single-CPU trace (e.g. trace-cmd report --cpu 1). 13 14function! FunctionGraphFoldExpr(lnum) 15 let line = getline(a:lnum) 16 if line[-1:] == '{' 17 if line =~ 'finish_task_switch() {$' 18 return '>1' 19 endif 20 return 'a1' 21 elseif line[-1:] == '}' 22 return 's1' 23 else 24 return '=' 25 endif 26endfunction 27 28function! FunctionGraphFoldText() 29 let s = split(getline(v:foldstart), '|', 1) 30 if getline(v:foldend+1) =~ 'finish_task_switch() {$' 31 let s[2] = ' task switch ' 32 else 33 let e = split(getline(v:foldend), '|', 1) 34 let s[2] = e[2] 35 endif 36 return join(s, '|') 37endfunction 38 39setlocal foldexpr=FunctionGraphFoldExpr(v:lnum) 40setlocal foldtext=FunctionGraphFoldText() 41setlocal foldcolumn=12 42setlocal foldmethod=expr 43