cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

function-graph-fold.vim (1355B)


      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