xref: /aosp_15_r20/external/trace-cmd/tracecmd/trace-cmd.bash (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Workershow_instances()
2*58e6ee5fSAndroid Build Coastguard Worker{
3*58e6ee5fSAndroid Build Coastguard Worker   local cur="$1"
4*58e6ee5fSAndroid Build Coastguard Worker   local bufs=$(trace-cmd list -B)
5*58e6ee5fSAndroid Build Coastguard Worker   if [ "$bufs" == "No buffer instances defined" ]; then
6*58e6ee5fSAndroid Build Coastguard Worker	return 0
7*58e6ee5fSAndroid Build Coastguard Worker   fi
8*58e6ee5fSAndroid Build Coastguard Worker   COMPREPLY=( $(compgen -W "${bufs}" -- "${cur}") )
9*58e6ee5fSAndroid Build Coastguard Worker   return 0
10*58e6ee5fSAndroid Build Coastguard Worker}
11*58e6ee5fSAndroid Build Coastguard Worker
12*58e6ee5fSAndroid Build Coastguard Workershow_virt()
13*58e6ee5fSAndroid Build Coastguard Worker{
14*58e6ee5fSAndroid Build Coastguard Worker    local cur="$1"
15*58e6ee5fSAndroid Build Coastguard Worker    if ! which virsh &>/dev/null; then
16*58e6ee5fSAndroid Build Coastguard Worker	return 1
17*58e6ee5fSAndroid Build Coastguard Worker    fi
18*58e6ee5fSAndroid Build Coastguard Worker    local virt=`virsh list | awk '/^ *[0-9]/ { print $2 }'`
19*58e6ee5fSAndroid Build Coastguard Worker    COMPREPLY=( $(compgen -W "${virt}" -- "${cur}") )
20*58e6ee5fSAndroid Build Coastguard Worker    return 0
21*58e6ee5fSAndroid Build Coastguard Worker}
22*58e6ee5fSAndroid Build Coastguard Worker
23*58e6ee5fSAndroid Build Coastguard Workershow_options()
24*58e6ee5fSAndroid Build Coastguard Worker{
25*58e6ee5fSAndroid Build Coastguard Worker   local cur="$1"
26*58e6ee5fSAndroid Build Coastguard Worker   local options=$(trace-cmd list -o | sed -e 's/^\(no\)*\(.*\)/\2 no\2/')
27*58e6ee5fSAndroid Build Coastguard Worker   COMPREPLY=( $(compgen -W "${options}" -- "${cur}") )
28*58e6ee5fSAndroid Build Coastguard Worker   return 0
29*58e6ee5fSAndroid Build Coastguard Worker}
30*58e6ee5fSAndroid Build Coastguard Worker
31*58e6ee5fSAndroid Build Coastguard Worker__show_files()
32*58e6ee5fSAndroid Build Coastguard Worker{
33*58e6ee5fSAndroid Build Coastguard Worker    COMPREPLY=( $(compgen -f -- "$cur") )
34*58e6ee5fSAndroid Build Coastguard Worker    if [ ${#COMPREPLY[@]} -gt 1 ]; then
35*58e6ee5fSAndroid Build Coastguard Worker	    return 0;
36*58e6ee5fSAndroid Build Coastguard Worker    fi
37*58e6ee5fSAndroid Build Coastguard Worker    # directories get '/' instead of space
38*58e6ee5fSAndroid Build Coastguard Worker    DIRS=( $(compgen -d -- "$cur"))
39*58e6ee5fSAndroid Build Coastguard Worker    if [ ${#DIRS[@]} -eq 1 ]; then
40*58e6ee5fSAndroid Build Coastguard Worker	compopt -o nospace
41*58e6ee5fSAndroid Build Coastguard Worker	COMPREPLY="$DIRS/"
42*58e6ee5fSAndroid Build Coastguard Worker	return 0;
43*58e6ee5fSAndroid Build Coastguard Worker    fi
44*58e6ee5fSAndroid Build Coastguard Worker    return 0
45*58e6ee5fSAndroid Build Coastguard Worker}
46*58e6ee5fSAndroid Build Coastguard Worker
47*58e6ee5fSAndroid Build Coastguard Workercmd_options()
48*58e6ee5fSAndroid Build Coastguard Worker{
49*58e6ee5fSAndroid Build Coastguard Worker    local type="$1"
50*58e6ee5fSAndroid Build Coastguard Worker    local cur="$2"
51*58e6ee5fSAndroid Build Coastguard Worker    local cmds=$(trace-cmd $type -h 2>/dev/null|grep "^ *-" | \
52*58e6ee5fSAndroid Build Coastguard Worker				 sed -e 's/ *\(-[^ ]*\).*/\1/')
53*58e6ee5fSAndroid Build Coastguard Worker    COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") )
54*58e6ee5fSAndroid Build Coastguard Worker    if [ ${#COMPREPLY[@]} -eq 0 ]; then
55*58e6ee5fSAndroid Build Coastguard Worker	__show_files "${cur}"
56*58e6ee5fSAndroid Build Coastguard Worker    fi
57*58e6ee5fSAndroid Build Coastguard Worker}
58*58e6ee5fSAndroid Build Coastguard Worker
59*58e6ee5fSAndroid Build Coastguard Workerplugin_options()
60*58e6ee5fSAndroid Build Coastguard Worker{
61*58e6ee5fSAndroid Build Coastguard Worker    local cur="$1"
62*58e6ee5fSAndroid Build Coastguard Worker
63*58e6ee5fSAndroid Build Coastguard Worker    local opts=$(trace-cmd list -O | sed -ne 's/option://p')
64*58e6ee5fSAndroid Build Coastguard Worker    COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
65*58e6ee5fSAndroid Build Coastguard Worker}
66*58e6ee5fSAndroid Build Coastguard Worker
67*58e6ee5fSAndroid Build Coastguard Workercompression_param()
68*58e6ee5fSAndroid Build Coastguard Worker{
69*58e6ee5fSAndroid Build Coastguard Worker    local opts=$(trace-cmd list -c | grep -v 'Supported' | cut -d "," -f1)
70*58e6ee5fSAndroid Build Coastguard Worker    opts+=" any none "
71*58e6ee5fSAndroid Build Coastguard Worker    COMPREPLY=( $(compgen -W "${opts}") )
72*58e6ee5fSAndroid Build Coastguard Worker}
73*58e6ee5fSAndroid Build Coastguard Worker
74*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_list_complete()
75*58e6ee5fSAndroid Build Coastguard Worker{
76*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
77*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
78*58e6ee5fSAndroid Build Coastguard Worker    shift 2
79*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
80*58e6ee5fSAndroid Build Coastguard Worker
81*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
82*58e6ee5fSAndroid Build Coastguard Worker	list)
83*58e6ee5fSAndroid Build Coastguard Worker	    local cmds=$(trace-cmd list -h |egrep "^ {10}-" | \
84*58e6ee5fSAndroid Build Coastguard Worker				 sed -e 's/.*\(-.\).*/\1/')
85*58e6ee5fSAndroid Build Coastguard Worker	    COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") )
86*58e6ee5fSAndroid Build Coastguard Worker	    ;;
87*58e6ee5fSAndroid Build Coastguard Worker	*)
88*58e6ee5fSAndroid Build Coastguard Worker	    size=${#words[@]}
89*58e6ee5fSAndroid Build Coastguard Worker	    if [ $size -gt 3 ]; then
90*58e6ee5fSAndroid Build Coastguard Worker		if [ "$cur" == "-" ]; then
91*58e6ee5fSAndroid Build Coastguard Worker		    let size=$size-3
92*58e6ee5fSAndroid Build Coastguard Worker		else
93*58e6ee5fSAndroid Build Coastguard Worker		    let size=$size-2
94*58e6ee5fSAndroid Build Coastguard Worker		fi
95*58e6ee5fSAndroid Build Coastguard Worker		local w="${words[$size]}"
96*58e6ee5fSAndroid Build Coastguard Worker		if [ "$w" == "-e" ]; then
97*58e6ee5fSAndroid Build Coastguard Worker		    local cmds=$(trace-cmd list -h |egrep "^ {12}-" | \
98*58e6ee5fSAndroid Build Coastguard Worker				 sed -e 's/.*\(-.\).*/\1/')
99*58e6ee5fSAndroid Build Coastguard Worker		    COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") )
100*58e6ee5fSAndroid Build Coastguard Worker		fi
101*58e6ee5fSAndroid Build Coastguard Worker	    fi
102*58e6ee5fSAndroid Build Coastguard Worker	    ;;
103*58e6ee5fSAndroid Build Coastguard Worker    esac
104*58e6ee5fSAndroid Build Coastguard Worker}
105*58e6ee5fSAndroid Build Coastguard Worker
106*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_show_complete()
107*58e6ee5fSAndroid Build Coastguard Worker{
108*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
109*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
110*58e6ee5fSAndroid Build Coastguard Worker    shift 2
111*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
112*58e6ee5fSAndroid Build Coastguard Worker
113*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
114*58e6ee5fSAndroid Build Coastguard Worker	-B)
115*58e6ee5fSAndroid Build Coastguard Worker	    show_instances "$cur"
116*58e6ee5fSAndroid Build Coastguard Worker	    ;;
117*58e6ee5fSAndroid Build Coastguard Worker	*)
118*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options show "$cur"
119*58e6ee5fSAndroid Build Coastguard Worker	    ;;
120*58e6ee5fSAndroid Build Coastguard Worker    esac
121*58e6ee5fSAndroid Build Coastguard Worker}
122*58e6ee5fSAndroid Build Coastguard Worker
123*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_extract_complete()
124*58e6ee5fSAndroid Build Coastguard Worker{
125*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
126*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
127*58e6ee5fSAndroid Build Coastguard Worker    shift 2
128*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
129*58e6ee5fSAndroid Build Coastguard Worker
130*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
131*58e6ee5fSAndroid Build Coastguard Worker	extract)
132*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options "$prev" "$cur"
133*58e6ee5fSAndroid Build Coastguard Worker	    ;;
134*58e6ee5fSAndroid Build Coastguard Worker	-B)
135*58e6ee5fSAndroid Build Coastguard Worker	    show_instances "$cur"
136*58e6ee5fSAndroid Build Coastguard Worker	    ;;
137*58e6ee5fSAndroid Build Coastguard Worker	*)
138*58e6ee5fSAndroid Build Coastguard Worker	    __show_files
139*58e6ee5fSAndroid Build Coastguard Worker	    ;;
140*58e6ee5fSAndroid Build Coastguard Worker    esac
141*58e6ee5fSAndroid Build Coastguard Worker}
142*58e6ee5fSAndroid Build Coastguard Worker
143*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_record_complete()
144*58e6ee5fSAndroid Build Coastguard Worker{
145*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
146*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
147*58e6ee5fSAndroid Build Coastguard Worker    shift 2
148*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
149*58e6ee5fSAndroid Build Coastguard Worker
150*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
151*58e6ee5fSAndroid Build Coastguard Worker        -e)
152*58e6ee5fSAndroid Build Coastguard Worker	    local list=$(trace-cmd list -e "$cur")
153*58e6ee5fSAndroid Build Coastguard Worker            local prefix=${cur%%:*}
154*58e6ee5fSAndroid Build Coastguard Worker	    if [ -z "$cur" -o  "$cur" != "$prefix" ]; then
155*58e6ee5fSAndroid Build Coastguard Worker		COMPREPLY=( $(compgen -W "all ${list}" -- "${cur}") )
156*58e6ee5fSAndroid Build Coastguard Worker	    else
157*58e6ee5fSAndroid Build Coastguard Worker		local events=$(for e in $list; do echo ${e/*:/}; done | sort -u)
158*58e6ee5fSAndroid Build Coastguard Worker	        local systems=$(for s in $list; do echo ${s/:*/:}; done | sort -u)
159*58e6ee5fSAndroid Build Coastguard Worker
160*58e6ee5fSAndroid Build Coastguard Worker		COMPREPLY=( $(compgen -W "all ${events} ${systems}" -- "${cur}") )
161*58e6ee5fSAndroid Build Coastguard Worker	    fi
162*58e6ee5fSAndroid Build Coastguard Worker
163*58e6ee5fSAndroid Build Coastguard Worker            # This is still to handle the "*:*" special case
164*58e6ee5fSAndroid Build Coastguard Worker            if [[ -n "$prefix" ]]; then
165*58e6ee5fSAndroid Build Coastguard Worker                local reply_n=${#COMPREPLY[*]}
166*58e6ee5fSAndroid Build Coastguard Worker                for (( i = 0; i < $reply_n; i++)); do
167*58e6ee5fSAndroid Build Coastguard Worker                    COMPREPLY[$i]=${COMPREPLY[i]##${prefix}:}
168*58e6ee5fSAndroid Build Coastguard Worker                done
169*58e6ee5fSAndroid Build Coastguard Worker            fi
170*58e6ee5fSAndroid Build Coastguard Worker            ;;
171*58e6ee5fSAndroid Build Coastguard Worker        -p)
172*58e6ee5fSAndroid Build Coastguard Worker            local plugins=$(trace-cmd list -p)
173*58e6ee5fSAndroid Build Coastguard Worker	    COMPREPLY=( $(compgen -W "${plugins}" -- "${cur}" ) )
174*58e6ee5fSAndroid Build Coastguard Worker            ;;
175*58e6ee5fSAndroid Build Coastguard Worker        -l|-n|-g)
176*58e6ee5fSAndroid Build Coastguard Worker            # This is extremely slow still (may take >1sec).
177*58e6ee5fSAndroid Build Coastguard Worker            local funcs=$(trace-cmd list -f | sed 's/ .*//')
178*58e6ee5fSAndroid Build Coastguard Worker            COMPREPLY=( $(compgen -W "${funcs}" -- "${cur}") )
179*58e6ee5fSAndroid Build Coastguard Worker            ;;
180*58e6ee5fSAndroid Build Coastguard Worker	-B)
181*58e6ee5fSAndroid Build Coastguard Worker	    show_instances "$cur"
182*58e6ee5fSAndroid Build Coastguard Worker	    ;;
183*58e6ee5fSAndroid Build Coastguard Worker	-O)
184*58e6ee5fSAndroid Build Coastguard Worker	    show_options "$cur"
185*58e6ee5fSAndroid Build Coastguard Worker	    ;;
186*58e6ee5fSAndroid Build Coastguard Worker	-A)
187*58e6ee5fSAndroid Build Coastguard Worker	    if ! show_virt "$cur"; then
188*58e6ee5fSAndroid Build Coastguard Worker		cmd_options record "$cur"
189*58e6ee5fSAndroid Build Coastguard Worker	    fi
190*58e6ee5fSAndroid Build Coastguard Worker	    ;;
191*58e6ee5fSAndroid Build Coastguard Worker	--compression)
192*58e6ee5fSAndroid Build Coastguard Worker	    compression_param
193*58e6ee5fSAndroid Build Coastguard Worker	    ;;
194*58e6ee5fSAndroid Build Coastguard Worker        *)
195*58e6ee5fSAndroid Build Coastguard Worker	    # stream start and profile do not show all options
196*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options record "$cur"
197*58e6ee5fSAndroid Build Coastguard Worker	    ;;
198*58e6ee5fSAndroid Build Coastguard Worker    esac
199*58e6ee5fSAndroid Build Coastguard Worker}
200*58e6ee5fSAndroid Build Coastguard Worker
201*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_report_complete()
202*58e6ee5fSAndroid Build Coastguard Worker{
203*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
204*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
205*58e6ee5fSAndroid Build Coastguard Worker    shift 2
206*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
207*58e6ee5fSAndroid Build Coastguard Worker
208*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
209*58e6ee5fSAndroid Build Coastguard Worker	-O)
210*58e6ee5fSAndroid Build Coastguard Worker	    plugin_options "$cur"
211*58e6ee5fSAndroid Build Coastguard Worker	    ;;
212*58e6ee5fSAndroid Build Coastguard Worker        *)
213*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options report "$cur"
214*58e6ee5fSAndroid Build Coastguard Worker	    ;;
215*58e6ee5fSAndroid Build Coastguard Worker    esac
216*58e6ee5fSAndroid Build Coastguard Worker}
217*58e6ee5fSAndroid Build Coastguard Worker
218*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_dump_complete()
219*58e6ee5fSAndroid Build Coastguard Worker{
220*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
221*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
222*58e6ee5fSAndroid Build Coastguard Worker    shift 2
223*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
224*58e6ee5fSAndroid Build Coastguard Worker
225*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
226*58e6ee5fSAndroid Build Coastguard Worker	-i)
227*58e6ee5fSAndroid Build Coastguard Worker	    __show_files
228*58e6ee5fSAndroid Build Coastguard Worker	    ;;
229*58e6ee5fSAndroid Build Coastguard Worker	*)
230*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options dump "$cur"
231*58e6ee5fSAndroid Build Coastguard Worker	    ;;
232*58e6ee5fSAndroid Build Coastguard Worker    esac
233*58e6ee5fSAndroid Build Coastguard Worker}
234*58e6ee5fSAndroid Build Coastguard Worker
235*58e6ee5fSAndroid Build Coastguard Worker__trace_cmd_convert_complete()
236*58e6ee5fSAndroid Build Coastguard Worker{
237*58e6ee5fSAndroid Build Coastguard Worker    local prev=$1
238*58e6ee5fSAndroid Build Coastguard Worker    local cur=$2
239*58e6ee5fSAndroid Build Coastguard Worker    shift 2
240*58e6ee5fSAndroid Build Coastguard Worker    local words=("$@")
241*58e6ee5fSAndroid Build Coastguard Worker
242*58e6ee5fSAndroid Build Coastguard Worker    case "$prev" in
243*58e6ee5fSAndroid Build Coastguard Worker	-i)
244*58e6ee5fSAndroid Build Coastguard Worker	    __show_files
245*58e6ee5fSAndroid Build Coastguard Worker	    ;;
246*58e6ee5fSAndroid Build Coastguard Worker	-o)
247*58e6ee5fSAndroid Build Coastguard Worker	    __show_files
248*58e6ee5fSAndroid Build Coastguard Worker	    ;;
249*58e6ee5fSAndroid Build Coastguard Worker	--compression)
250*58e6ee5fSAndroid Build Coastguard Worker	    compression_param
251*58e6ee5fSAndroid Build Coastguard Worker	    ;;
252*58e6ee5fSAndroid Build Coastguard Worker	*)
253*58e6ee5fSAndroid Build Coastguard Worker	    cmd_options convert "$cur"
254*58e6ee5fSAndroid Build Coastguard Worker	    ;;
255*58e6ee5fSAndroid Build Coastguard Worker    esac
256*58e6ee5fSAndroid Build Coastguard Worker}
257*58e6ee5fSAndroid Build Coastguard Worker
258*58e6ee5fSAndroid Build Coastguard Worker__show_command_options()
259*58e6ee5fSAndroid Build Coastguard Worker{
260*58e6ee5fSAndroid Build Coastguard Worker    local command="$1"
261*58e6ee5fSAndroid Build Coastguard Worker    local prev="$2"
262*58e6ee5fSAndroid Build Coastguard Worker    local cur="$3"
263*58e6ee5fSAndroid Build Coastguard Worker    local cmds=( $(trace-cmd --help 2>/dev/null | \
264*58e6ee5fSAndroid Build Coastguard Worker		    grep " - " | sed 's/^ *//; s/ -.*//') )
265*58e6ee5fSAndroid Build Coastguard Worker
266*58e6ee5fSAndroid Build Coastguard Worker    for cmd in ${cmds[@]}; do
267*58e6ee5fSAndroid Build Coastguard Worker	if [ $cmd == "$command" ]; then
268*58e6ee5fSAndroid Build Coastguard Worker	    local opts=$(trace-cmd $cmd -h 2>/dev/null|grep "^ *-" | \
269*58e6ee5fSAndroid Build Coastguard Worker				 sed -e 's/ *\(-[^ ]*\).*/\1/')
270*58e6ee5fSAndroid Build Coastguard Worker	    if [ "$prev" == "-B" ]; then
271*58e6ee5fSAndroid Build Coastguard Worker		for opt in ${opts[@]}; do
272*58e6ee5fSAndroid Build Coastguard Worker		    if [ "$opt" == "-B" ]; then
273*58e6ee5fSAndroid Build Coastguard Worker			show_instances "$cur"
274*58e6ee5fSAndroid Build Coastguard Worker			return 0
275*58e6ee5fSAndroid Build Coastguard Worker		    fi
276*58e6ee5fSAndroid Build Coastguard Worker		done
277*58e6ee5fSAndroid Build Coastguard Worker	    fi
278*58e6ee5fSAndroid Build Coastguard Worker	    COMPREPLY=( $(compgen -W "${opts}" -- "$cur"))
279*58e6ee5fSAndroid Build Coastguard Worker	    break
280*58e6ee5fSAndroid Build Coastguard Worker	fi
281*58e6ee5fSAndroid Build Coastguard Worker    done
282*58e6ee5fSAndroid Build Coastguard Worker    if [ ${#COMPREPLY[@]} -eq 0 ]; then
283*58e6ee5fSAndroid Build Coastguard Worker	__show_files "${cur}"
284*58e6ee5fSAndroid Build Coastguard Worker    fi
285*58e6ee5fSAndroid Build Coastguard Worker}
286*58e6ee5fSAndroid Build Coastguard Worker
287*58e6ee5fSAndroid Build Coastguard Worker_trace_cmd_complete()
288*58e6ee5fSAndroid Build Coastguard Worker{
289*58e6ee5fSAndroid Build Coastguard Worker    local cur=""
290*58e6ee5fSAndroid Build Coastguard Worker    local prev=""
291*58e6ee5fSAndroid Build Coastguard Worker    local words=()
292*58e6ee5fSAndroid Build Coastguard Worker
293*58e6ee5fSAndroid Build Coastguard Worker    # Not to use COMP_WORDS to avoid buggy behavior of Bash when
294*58e6ee5fSAndroid Build Coastguard Worker    # handling with words including ":", like:
295*58e6ee5fSAndroid Build Coastguard Worker    #
296*58e6ee5fSAndroid Build Coastguard Worker    # prev="${COMP_WORDS[COMP_CWORD-1]}"
297*58e6ee5fSAndroid Build Coastguard Worker    # cur="${COMP_WORDS[COMP_CWORD]}"
298*58e6ee5fSAndroid Build Coastguard Worker    #
299*58e6ee5fSAndroid Build Coastguard Worker    # Instead, we use _get_comp_words_by_ref() magic.
300*58e6ee5fSAndroid Build Coastguard Worker    _get_comp_words_by_ref -n : cur prev words
301*58e6ee5fSAndroid Build Coastguard Worker
302*58e6ee5fSAndroid Build Coastguard Worker    if [ "$prev" == "trace-cmd" ]; then
303*58e6ee5fSAndroid Build Coastguard Worker            local cmds=$(trace-cmd --help 2>/dev/null | \
304*58e6ee5fSAndroid Build Coastguard Worker                                grep " - " | sed 's/^ *//; s/ -.*//')
305*58e6ee5fSAndroid Build Coastguard Worker            COMPREPLY=( $(compgen -W "${cmds}" -- "${cur}") )
306*58e6ee5fSAndroid Build Coastguard Worker	    return;
307*58e6ee5fSAndroid Build Coastguard Worker    fi
308*58e6ee5fSAndroid Build Coastguard Worker
309*58e6ee5fSAndroid Build Coastguard Worker    local w="${words[1]}"
310*58e6ee5fSAndroid Build Coastguard Worker
311*58e6ee5fSAndroid Build Coastguard Worker    case "$w" in
312*58e6ee5fSAndroid Build Coastguard Worker	list)
313*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_list_complete "${prev}" "${cur}" ${words[@]}
314*58e6ee5fSAndroid Build Coastguard Worker	    return 0
315*58e6ee5fSAndroid Build Coastguard Worker	    ;;
316*58e6ee5fSAndroid Build Coastguard Worker	show)
317*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_show_complete "${prev}" "${cur}" ${words[@]}
318*58e6ee5fSAndroid Build Coastguard Worker	    return 0
319*58e6ee5fSAndroid Build Coastguard Worker	    ;;
320*58e6ee5fSAndroid Build Coastguard Worker	extract)
321*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_extract_complete "${prev}" "${cur}" ${words[@]}
322*58e6ee5fSAndroid Build Coastguard Worker	    return 0
323*58e6ee5fSAndroid Build Coastguard Worker	    ;;
324*58e6ee5fSAndroid Build Coastguard Worker	record|stream|start|profile)
325*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_record_complete "${prev}" "${cur}" ${words[@]}
326*58e6ee5fSAndroid Build Coastguard Worker	    return 0
327*58e6ee5fSAndroid Build Coastguard Worker	    ;;
328*58e6ee5fSAndroid Build Coastguard Worker	report)
329*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_report_complete "${prev}" "${cur}" ${words[@]}
330*58e6ee5fSAndroid Build Coastguard Worker	    return 0
331*58e6ee5fSAndroid Build Coastguard Worker	    ;;
332*58e6ee5fSAndroid Build Coastguard Worker	dump)
333*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_dump_complete "${prev}" "${cur}" ${words[@]}
334*58e6ee5fSAndroid Build Coastguard Worker	    return 0
335*58e6ee5fSAndroid Build Coastguard Worker	    ;;
336*58e6ee5fSAndroid Build Coastguard Worker	convert)
337*58e6ee5fSAndroid Build Coastguard Worker	    __trace_cmd_convert_complete "${prev}" "${cur}" ${words[@]}
338*58e6ee5fSAndroid Build Coastguard Worker	    return 0
339*58e6ee5fSAndroid Build Coastguard Worker	    ;;
340*58e6ee5fSAndroid Build Coastguard Worker        *)
341*58e6ee5fSAndroid Build Coastguard Worker	    __show_command_options "$w" "${prev}" "${cur}"
342*58e6ee5fSAndroid Build Coastguard Worker            ;;
343*58e6ee5fSAndroid Build Coastguard Worker    esac
344*58e6ee5fSAndroid Build Coastguard Worker}
345*58e6ee5fSAndroid Build Coastguard Workercomplete -F _trace_cmd_complete trace-cmd
346