t / t0211 / scrub_perf.perlon commit Merge branch 'master' of git://ozlabs.org/~paulus/gitk (3cb8921)
   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