43 lines · plain
1" Enable folding for ftrace function_graph traces.2"3" To use, :source this file while viewing a function_graph trace, or use vim's4" -S option to load from the command-line together with a trace. You can then5" use the usual vim fold commands, such as "za", to open and close nested6" 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. Folded8" functions will not include finish_task_switch(), so folding should remain9" relatively sane even through a context switch.10"11" Note that this will almost certainly only work well with a12" 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 endif20 return 'a1'21 elseif line[-1:] == '}'22 return 's1'23 else24 return '='25 endif26endfunction27 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 else33 let e = split(getline(v:foldend), '|', 1)34 let s[2] = e[2]35 endif36 return join(s, '|')37endfunction38 39setlocal foldexpr=FunctionGraphFoldExpr(v:lnum)40setlocal foldtext=FunctionGraphFoldText()41setlocal foldcolumn=1242setlocal foldmethod=expr43