1*6591b493SJosh Triplett" Enable folding for ftrace function_graph traces. 2*6591b493SJosh Triplett" 3*6591b493SJosh Triplett" To use, :source this file while viewing a function_graph trace, or use vim's 4*6591b493SJosh Triplett" -S option to load from the command-line together with a trace. You can then 5*6591b493SJosh Triplett" use the usual vim fold commands, such as "za", to open and close nested 6*6591b493SJosh Triplett" functions. While closed, a fold will show the total time taken for a call, 7*6591b493SJosh Triplett" as would normally appear on the line with the closing brace. Folded 8*6591b493SJosh Triplett" functions will not include finish_task_switch(), so folding should remain 9*6591b493SJosh Triplett" relatively sane even through a context switch. 10*6591b493SJosh Triplett" 11*6591b493SJosh Triplett" Note that this will almost certainly only work well with a 12*6591b493SJosh Triplett" single-CPU trace (e.g. trace-cmd report --cpu 1). 13*6591b493SJosh Triplett 14*6591b493SJosh Triplettfunction! FunctionGraphFoldExpr(lnum) 15*6591b493SJosh Triplett let line = getline(a:lnum) 16*6591b493SJosh Triplett if line[-1:] == '{' 17*6591b493SJosh Triplett if line =~ 'finish_task_switch() {$' 18*6591b493SJosh Triplett return '>1' 19*6591b493SJosh Triplett endif 20*6591b493SJosh Triplett return 'a1' 21*6591b493SJosh Triplett elseif line[-1:] == '}' 22*6591b493SJosh Triplett return 's1' 23*6591b493SJosh Triplett else 24*6591b493SJosh Triplett return '=' 25*6591b493SJosh Triplett endif 26*6591b493SJosh Triplettendfunction 27*6591b493SJosh Triplett 28*6591b493SJosh Triplettfunction! FunctionGraphFoldText() 29*6591b493SJosh Triplett let s = split(getline(v:foldstart), '|', 1) 30*6591b493SJosh Triplett if getline(v:foldend+1) =~ 'finish_task_switch() {$' 31*6591b493SJosh Triplett let s[2] = ' task switch ' 32*6591b493SJosh Triplett else 33*6591b493SJosh Triplett let e = split(getline(v:foldend), '|', 1) 34*6591b493SJosh Triplett let s[2] = e[2] 35*6591b493SJosh Triplett endif 36*6591b493SJosh Triplett return join(s, '|') 37*6591b493SJosh Triplettendfunction 38*6591b493SJosh Triplett 39*6591b493SJosh Triplettsetlocal foldexpr=FunctionGraphFoldExpr(v:lnum) 40*6591b493SJosh Triplettsetlocal foldtext=FunctionGraphFoldText() 41*6591b493SJosh Triplettsetlocal foldcolumn=12 42*6591b493SJosh Triplettsetlocal foldmethod=expr 43