Commit | Line | Data |
---|---|---|
6591b493 JT |
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 | ||
14 | function! 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 | |
26 | endfunction | |
27 | ||
28 | function! 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, '|') | |
37 | endfunction | |
38 | ||
39 | setlocal foldexpr=FunctionGraphFoldExpr(v:lnum) | |
40 | setlocal foldtext=FunctionGraphFoldText() | |
41 | setlocal foldcolumn=12 | |
42 | setlocal foldmethod=expr |