Codespeed (https://github.com/tobami/codespeed/) is an open source
project that can be used to track how some software performs over
time. It stores performance test results in a database and can show
nice graphs and charts on a web interface.

As it can be interesting to Codespeed to see how Git performance
evolves over time and releases, let's implement a Codespeed output
in "perf/aggregate.perl".

Signed-off-by: Christian Couder <chrisc...@tuxfamily.org>
---
 t/perf/aggregate.perl | 68 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 66 insertions(+), 2 deletions(-)

diff --git a/t/perf/aggregate.perl b/t/perf/aggregate.perl
index 3609cb5dc3..6e15f62a9e 100755
--- a/t/perf/aggregate.perl
+++ b/t/perf/aggregate.perl
@@ -35,10 +35,15 @@ sub format_times {
        return $out;
 }
 
-my (@dirs, %dirnames, %dirabbrevs, %prefixes, @tests);
+my (@dirs, %dirnames, %dirabbrevs, %prefixes, @tests, $codespeed);
 while (scalar @ARGV) {
        my $arg = $ARGV[0];
        my $dir;
+       if ($arg eq "--codespeed") {
+               $codespeed = 1;
+               shift @ARGV;
+               next;
+       }
        last if -f $arg or $arg eq "--";
        if (! -d $arg) {
                my $rev = Git::command_oneline(qw(rev-parse --verify), $arg);
@@ -70,8 +75,10 @@ if (not @tests) {
 }
 
 my $resultsdir = "test-results";
+my $results_section = "";
 if (exists $ENV{GIT_PERF_SUBSECTION} and $ENV{GIT_PERF_SUBSECTION} ne "") {
        $resultsdir .= "/" . $ENV{GIT_PERF_SUBSECTION};
+       $results_section = $ENV{GIT_PERF_SUBSECTION};
 }
 
 my @subtests;
@@ -174,6 +181,63 @@ sub print_default_results {
        }
 }
 
+sub print_codespeed_results {
+       my ($results_section) = @_;
+
+       my $project = "Git";
+
+       my $executable;
+       if ($results_section eq "") {
+               $executable = `uname -o -p`;
+       } else {
+               $executable = $results_section;
+               chomp $executable;
+       }
+
+       my $environment;
+       if (exists $ENV{GIT_TEST_REPO_NAME} and $ENV{GIT_TEST_REPO_NAME} ne "") 
{
+               $environment = $ENV{GIT_TEST_REPO_NAME};
+       } elsif (exists $ENV{GIT_TEST_INSTALLED} and $ENV{GIT_TEST_INSTALLED} 
ne "") {
+               $environment = $ENV{GIT_TEST_INSTALLED};
+               $environment =~ s|/bin-wrappers$||;
+       } else {
+               $environment = `uname -r`;
+               chomp $environment;
+       }
+
+       my @data;
+
+       for my $t (@subtests) {
+               for my $d (@dirs) {
+                       my $commitid = $prefixes{$d};
+                       $commitid =~ s/^build_//;
+                       $commitid =~ s/\.$//;
+                       my ($result_value, $u, $s) = 
get_times("$resultsdir/$prefixes{$d}$t.times");
+
+                       my %vals = (
+                               "commitid" => $commitid,
+                               "project" => $project,
+                               "branch" => $dirnames{$d},
+                               "executable" => $executable,
+                               "benchmark" => $shorttests{$t} . " " . 
read_descr("$resultsdir/$t.descr"),
+                               "environment" => $environment,
+                               "result_value" => $result_value,
+                           );
+                       push @data, \%vals;
+               }
+       }
+
+       #use Data::Dumper qw/ Dumper /;
+       #print Dumper(\@data);
+
+       use JSON;
+       print to_json(\@data, {utf8 => 1, pretty => 1}), "\n";
+}
+
 binmode STDOUT, ":utf8" or die "PANIC on binmode: $!";
 
-print_default_results();
+if ($codespeed) {
+       print_codespeed_results($results_section);
+} else {
+       print_default_results();
+}
-- 
2.15.1.361.g8b07d831d0

Reply via email to