git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/8] perf/aggregate: implement codespeed JSON output

From
Christian Couder <christian.couder@gmail.com>
Date
Dec 13, 2017, 15:13 UTC
Message-ID
<20171213151344.2138-4-chriscool@tuxfamily.org>
In-Reply-To
<20171213151344.2138-1-chriscool@tuxfamily.org>

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 <chriscool@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
Previous: Christian CouderNext: Eric Sunshine
Message 11 of 20 in “Codespeed perf results”
  1. 0/8 Codespeed perf resultsChristian Couder, Dec 13, 2017
  2. 1/8 perf/aggregate: fix checking ENV{GIT_PERF_SUBSECTION}Christian Couder, Dec 13, 2017
  3. 2/8 perf/aggregate: refactor printing resultsChristian Couder, Dec 13, 2017
  4. 4/8 perf/run: use $default_value instead of $4Christian Couder, Dec 13, 2017
  5. Junio C HamanoDec 13, 2017
  6. Junio C HamanoDec 13, 2017
  7. Christian CouderDec 14, 2017
  8. Christian CouderDec 14, 2017
  9. 8/8 perf/run: read GIT_TEST_REPO_NAME from perf.repoNameChristian Couder, Dec 13, 2017
  10. 7/8 perf/run: learn to send output to codespeed serverChristian Couder, Dec 13, 2017
  11. 3/8 perf/aggregate: implement codespeed JSON outputChristian Couder, Dec 13, 2017
  12. Eric SunshineDec 13, 2017
  13. Christian CouderDec 14, 2017
  14. Junio C HamanoDec 13, 2017
  15. Christian CouderDec 14, 2017
  16. Junio C HamanoDec 14, 2017
  17. 6/8 perf/run: learn about perf.codespeedOutputChristian Couder, Dec 13, 2017
  18. 5/8 perf/run: add conf_opts argument to get_var_from_env_or_config()Christian Couder, Dec 13, 2017
  19. Philip OakleyDec 13, 2017
  20. Christian CouderDec 13, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.