]> git.ipfire.org Git - thirdparty/git.git/blame - t/t0211/scrub_perf.perl
Merge branch 'js/rebase-orig-head-fix'
[thirdparty/git.git] / t / t0211 / scrub_perf.perl
CommitLineData
a15860dc
JH
1#!/usr/bin/perl
2#
3# Scrub the variable fields from the perf trace2 output to
4# make testing easier.
5
6use strict;
7use warnings;
8
9my $qpath = '\'[^\']*\'|[^ ]*';
10
11my $col_depth=0;
12my $col_thread=1;
13my $col_event=2;
14my $col_repo=3;
15my $col_t_abs=4;
16my $col_t_rel=5;
17my $col_category=6;
18my $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
24while (<>) {
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