perf/aggregate: implement codespeed JSON output
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 use Codespeed to see how Git performance evolves over time and releases, let's implement a Codespeed output in "perf/aggregate.perl". Helped-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
30ffff6ee2
commit
05eb1c37ed
|
@ -3,6 +3,7 @@
|
||||||
use lib '../../perl/blib/lib';
|
use lib '../../perl/blib/lib';
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use JSON;
|
||||||
use Git;
|
use Git;
|
||||||
|
|
||||||
sub get_times {
|
sub get_times {
|
||||||
|
@ -35,10 +36,15 @@ sub format_times {
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
my (@dirs, %dirnames, %dirabbrevs, %prefixes, @tests);
|
my (@dirs, %dirnames, %dirabbrevs, %prefixes, @tests, $codespeed);
|
||||||
while (scalar @ARGV) {
|
while (scalar @ARGV) {
|
||||||
my $arg = $ARGV[0];
|
my $arg = $ARGV[0];
|
||||||
my $dir;
|
my $dir;
|
||||||
|
if ($arg eq "--codespeed") {
|
||||||
|
$codespeed = 1;
|
||||||
|
shift @ARGV;
|
||||||
|
next;
|
||||||
|
}
|
||||||
last if -f $arg or $arg eq "--";
|
last if -f $arg or $arg eq "--";
|
||||||
if (! -d $arg) {
|
if (! -d $arg) {
|
||||||
my $rev = Git::command_oneline(qw(rev-parse --verify), $arg);
|
my $rev = Git::command_oneline(qw(rev-parse --verify), $arg);
|
||||||
|
@ -70,8 +76,10 @@ if (not @tests) {
|
||||||
}
|
}
|
||||||
|
|
||||||
my $resultsdir = "test-results";
|
my $resultsdir = "test-results";
|
||||||
|
my $results_section = "";
|
||||||
if (exists $ENV{GIT_PERF_SUBSECTION} and $ENV{GIT_PERF_SUBSECTION} ne "") {
|
if (exists $ENV{GIT_PERF_SUBSECTION} and $ENV{GIT_PERF_SUBSECTION} ne "") {
|
||||||
$resultsdir .= "/" . $ENV{GIT_PERF_SUBSECTION};
|
$resultsdir .= "/" . $ENV{GIT_PERF_SUBSECTION};
|
||||||
|
$results_section = $ENV{GIT_PERF_SUBSECTION};
|
||||||
}
|
}
|
||||||
|
|
||||||
my @subtests;
|
my @subtests;
|
||||||
|
@ -174,6 +182,58 @@ sub print_default_results {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub print_codespeed_results {
|
||||||
|
my ($results_section) = @_;
|
||||||
|
|
||||||
|
my $project = "Git";
|
||||||
|
|
||||||
|
my $executable = `uname -s -m`;
|
||||||
|
chomp $executable;
|
||||||
|
|
||||||
|
if ($results_section ne "") {
|
||||||
|
$executable .= ", " . $results_section;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $environment;
|
||||||
|
if (exists $ENV{GIT_PERF_REPO_NAME} and $ENV{GIT_PERF_REPO_NAME} ne "") {
|
||||||
|
$environment = $ENV{GIT_PERF_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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print to_json(\@data, {utf8 => 1, pretty => 1}), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
binmode STDOUT, ":utf8" or die "PANIC on binmode: $!";
|
binmode STDOUT, ":utf8" or die "PANIC on binmode: $!";
|
||||||
|
|
||||||
print_default_results();
|
if ($codespeed) {
|
||||||
|
print_codespeed_results($results_section);
|
||||||
|
} else {
|
||||||
|
print_default_results();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue