|  | #!/usr/bin/perl | 
|  | # | 
|  | # Scrub the variable fields from the perf trace2 output to | 
|  | # make testing easier. | 
|  |  | 
|  | use strict; | 
|  | use warnings; | 
|  |  | 
|  | my $qpath = '\'[^\']*\'|[^ ]*'; | 
|  |  | 
|  | my $col_depth=0; | 
|  | my $col_thread=1; | 
|  | my $col_event=2; | 
|  | my $col_repo=3; | 
|  | my $col_t_abs=4; | 
|  | my $col_t_rel=5; | 
|  | my $col_category=6; | 
|  | my $col_rest=7; | 
|  |  | 
|  | # This code assumes that the trace2 data was written with bare | 
|  | # turned on (which omits the "<clock> <file>:<line> | <parents>" | 
|  | # prefix. | 
|  |  | 
|  | while (<>) { | 
|  | my @tokens = split /\|/; | 
|  |  | 
|  | foreach my $col (@tokens) { $col =~ s/^\s+|\s+$//g; } | 
|  |  | 
|  | if ($tokens[$col_event] =~ m/^start/) { | 
|  | # The 'start' message lists the contents of argv in $col_rest. | 
|  | # On some platforms (Windows), argv[0] is *sometimes* a canonical | 
|  | # absolute path to the EXE rather than the value passed in the | 
|  | # shell script.  Replace it with a placeholder to simplify our | 
|  | # HEREDOC in the test script. | 
|  | my $argv0; | 
|  | my $argvRest; | 
|  | $tokens[$col_rest] =~ s/^($qpath)\W*(.*)/_EXE_ $2/; | 
|  | } | 
|  | elsif ($tokens[$col_event] =~ m/cmd_path/) { | 
|  | # Likewise, the 'cmd_path' message breaks out argv[0]. | 
|  | # | 
|  | # This line is only emitted when RUNTIME_PREFIX is defined, | 
|  | # so just omit it for testing purposes. | 
|  | # $tokens[$col_rest] = "_EXE_"; | 
|  | goto SKIP_LINE; | 
|  | } | 
|  | elsif ($tokens[$col_event] =~ m/child_exit/) { | 
|  | $tokens[$col_rest] =~ s/ pid:\d* / pid:_PID_ /; | 
|  | } | 
|  | elsif ($tokens[$col_event] =~ m/data/) { | 
|  | if ($tokens[$col_category] =~ m/process/) { | 
|  | # 'data' and 'data_json' events containing 'process' | 
|  | # category data are assumed to be platform-specific | 
|  | # and highly variable.  Just omit them. | 
|  | goto SKIP_LINE; | 
|  | } | 
|  | } | 
|  |  | 
|  | # t_abs and t_rel are either blank or a float.  Replace the float | 
|  | # with a constant for matching the HEREDOC in the test script. | 
|  | if ($tokens[$col_t_abs] =~ m/\d/) { | 
|  | $tokens[$col_t_abs] = "_T_ABS_"; | 
|  | } | 
|  | if ($tokens[$col_t_rel] =~ m/\d/) { | 
|  | $tokens[$col_t_rel] = "_T_REL_"; | 
|  | } | 
|  |  | 
|  | my $out; | 
|  |  | 
|  | $out = join('|', @tokens); | 
|  | print "$out\n"; | 
|  |  | 
|  | SKIP_LINE: | 
|  | } | 
|  |  | 
|  |  |