|
@@ -0,0 +1,42 @@
|
|
|
|
+" Enable folding for ftrace function_graph traces.
|
|
|
|
+"
|
|
|
|
+" To use, :source this file while viewing a function_graph trace, or use vim's
|
|
|
|
+" -S option to load from the command-line together with a trace. You can then
|
|
|
|
+" use the usual vim fold commands, such as "za", to open and close nested
|
|
|
|
+" functions. While closed, a fold will show the total time taken for a call,
|
|
|
|
+" as would normally appear on the line with the closing brace. Folded
|
|
|
|
+" functions will not include finish_task_switch(), so folding should remain
|
|
|
|
+" relatively sane even through a context switch.
|
|
|
|
+"
|
|
|
|
+" Note that this will almost certainly only work well with a
|
|
|
|
+" single-CPU trace (e.g. trace-cmd report --cpu 1).
|
|
|
|
+
|
|
|
|
+function! FunctionGraphFoldExpr(lnum)
|
|
|
|
+ let line = getline(a:lnum)
|
|
|
|
+ if line[-1:] == '{'
|
|
|
|
+ if line =~ 'finish_task_switch() {$'
|
|
|
|
+ return '>1'
|
|
|
|
+ endif
|
|
|
|
+ return 'a1'
|
|
|
|
+ elseif line[-1:] == '}'
|
|
|
|
+ return 's1'
|
|
|
|
+ else
|
|
|
|
+ return '='
|
|
|
|
+ endif
|
|
|
|
+endfunction
|
|
|
|
+
|
|
|
|
+function! FunctionGraphFoldText()
|
|
|
|
+ let s = split(getline(v:foldstart), '|', 1)
|
|
|
|
+ if getline(v:foldend+1) =~ 'finish_task_switch() {$'
|
|
|
|
+ let s[2] = ' task switch '
|
|
|
|
+ else
|
|
|
|
+ let e = split(getline(v:foldend), '|', 1)
|
|
|
|
+ let s[2] = e[2]
|
|
|
|
+ endif
|
|
|
|
+ return join(s, '|')
|
|
|
|
+endfunction
|
|
|
|
+
|
|
|
|
+setlocal foldexpr=FunctionGraphFoldExpr(v:lnum)
|
|
|
|
+setlocal foldtext=FunctionGraphFoldText()
|
|
|
|
+setlocal foldcolumn=12
|
|
|
|
+setlocal foldmethod=expr
|