Merge branch 'bc/faq'
[git] / t / t0211 / scrub_perf.perl
1 #!/usr/bin/perl
2 #
3 # Scrub the variable fields from the perf trace2 output to
4 # make testing easier.
5
6 use strict;
7 use warnings;
8
9 my $qpath = '\'[^\']*\'|[^ ]*';
10
11 my $col_depth=0;
12 my $col_thread=1;
13 my $col_event=2;
14 my $col_repo=3;
15 my $col_t_abs=4;
16 my $col_t_rel=5;
17 my $col_category=6;
18 my $col_rest=7;
19
20 # This code assumes that the trace2 data was written with bare
21 # turned on (which omits the "<clock> <file>:<line> | <parents>"
22 # prefix.
23
24 while (<>) {
25     my @tokens = split /\|/;
26
27     foreach my $col (@tokens) { $col =~ s/^\s+|\s+$//g; }
28
29     if ($tokens[$col_event] =~ m/^start/) {
30         # The 'start' message lists the contents of argv in $col_rest.
31         # On some platforms (Windows), argv[0] is *sometimes* a canonical
32         # absolute path to the EXE rather than the value passed in the
33         # shell script.  Replace it with a placeholder to simplify our
34         # HEREDOC in the test script.
35         my $argv0;
36         my $argvRest;
37         $tokens[$col_rest] =~ s/^($qpath)\W*(.*)/_EXE_ $2/;
38     }
39     elsif ($tokens[$col_event] =~ m/cmd_path/) {
40         # Likewise, the 'cmd_path' message breaks out argv[0].
41         #
42         # This line is only emitted when RUNTIME_PREFIX is defined,
43         # so just omit it for testing purposes.
44         # $tokens[$col_rest] = "_EXE_";
45         goto SKIP_LINE;
46     }
47     elsif ($tokens[$col_event] =~ m/child_exit/) {
48         $tokens[$col_rest] =~ s/ pid:\d* / pid:_PID_ /;
49     }
50     elsif ($tokens[$col_event] =~ m/data/) {
51         if ($tokens[$col_category] =~ m/process/) {
52             # 'data' and 'data_json' events containing 'process'
53             # category data are assumed to be platform-specific
54             # and highly variable.  Just omit them.
55             goto SKIP_LINE;
56         }
57     }
58
59     # t_abs and t_rel are either blank or a float.  Replace the float
60     # with a constant for matching the HEREDOC in the test script.
61     if ($tokens[$col_t_abs] =~ m/\d/) {
62         $tokens[$col_t_abs] = "_T_ABS_";
63     }
64     if ($tokens[$col_t_rel] =~ m/\d/) {
65         $tokens[$col_t_rel] = "_T_REL_";
66     }
67
68     my $out;
69
70     $out = join('|', @tokens);
71     print "$out\n";
72
73   SKIP_LINE:
74 }
75
76