function-graph-fold.vim 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. function! FunctionGraphFoldExpr(lnum)
  14. let line = getline(a:lnum)
  15. if line[-1:] == '{'
  16. if line =~ 'finish_task_switch() {$'
  17. return '>1'
  18. endif
  19. return 'a1'
  20. elseif line[-1:] == '}'
  21. return 's1'
  22. else
  23. return '='
  24. endif
  25. endfunction
  26. function! FunctionGraphFoldText()
  27. let s = split(getline(v:foldstart), '|', 1)
  28. if getline(v:foldend+1) =~ 'finish_task_switch() {$'
  29. let s[2] = ' task switch '
  30. else
  31. let e = split(getline(v:foldend), '|', 1)
  32. let s[2] = e[2]
  33. endif
  34. return join(s, '|')
  35. endfunction
  36. setlocal foldexpr=FunctionGraphFoldExpr(v:lnum)
  37. setlocal foldtext=FunctionGraphFoldText()
  38. setlocal foldcolumn=12
  39. setlocal foldmethod=expr