linux/Documentation/trace/function-graph-fold.vim
<<
>>
Prefs
   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