[PATCH 1/3] sha1_name: Create perf test for find_unique_abbrev()
From: Derrick Stolee <hidden>
Date: 2017-09-15 16:58:29
Subsystem:
kernel build + files below scripts/ (unless maintained elsewhere), the rest · Maintainers:
Nathan Chancellor, Nicolas Schier, Linus Torvalds
Create helper program test-abbrev to compute the minimum length of a disambiguating short-sha for 100,000 object ids. The ids are created by iterating an unsigned int hash_base by a constant hash_delta and copying hash_base five times across the sha1. Iterating by hash_delta does not create a duplicate value for over 10,000,000 iterations. test-abberv demonstrates the performance improvements that will be shown by later improvements to the find_unique_abberv(). The value of 100,000 is large enough to show the significance of the later improvements while only taking a few seconds on large repos. Signed-off-by: Derrick Stolee <redacted> --- Makefile | 1 + t/helper/.gitignore | 1 + t/helper/test-abbrev.c | 23 +++++++++++++++++++++++ t/perf/p0008-abbrev.sh | 12 ++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 t/helper/test-abbrev.c create mode 100755 t/perf/p0008-abbrev.sh
diff --git a/Makefile b/Makefile
index f2bb7f2f6..081ca05e8 100644
--- a/Makefile
+++ b/Makefile@@ -633,6 +633,7 @@ X = PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS)) +TEST_PROGRAMS_NEED_X += test-abbrev TEST_PROGRAMS_NEED_X += test-chmtime TEST_PROGRAMS_NEED_X += test-ctype TEST_PROGRAMS_NEED_X += test-config
diff --git a/t/helper/.gitignore b/t/helper/.gitignore
index 721650256..80ce7d836 100644
--- a/t/helper/.gitignore
+++ b/t/helper/.gitignore@@ -1,3 +1,4 @@ +/test-abbrev /test-chmtime /test-ctype /test-config
diff --git a/t/helper/test-abbrev.c b/t/helper/test-abbrev.c
new file mode 100644
index 000000000..cb3551df9
--- /dev/null
+++ b/t/helper/test-abbrev.c@@ -0,0 +1,23 @@ +#include "cache.h" + +int cmd_main(int ac, const char **av) +{ + setup_git_directory(); + + unsigned int hash_delt = 0x13579BDF; + unsigned int hash_base = 0x01020304; + struct object_id oid; + + int i, count = 0; + int n = sizeof(struct object_id) / sizeof(int); + while (count++ < 100000) { + for (i = 0; i < n; i++) + ((unsigned int*)oid.hash)[i] = hash_base; + + find_unique_abbrev(oid.hash, MINIMUM_ABBREV); + + hash_base += hash_delt; + } + + exit(0); +}
diff --git a/t/perf/p0008-abbrev.sh b/t/perf/p0008-abbrev.sh
new file mode 100755
index 000000000..7c3fad807
--- /dev/null
+++ b/t/perf/p0008-abbrev.sh@@ -0,0 +1,12 @@ +#!/bin/sh + +test_description='Test object disambiguation through abbreviations' +. ./perf-lib.sh + +test_perf_large_repo + +test_perf 'find_unique_abbrev()' ' + test-abbrev +' + +test_done
--
2.14.1.538.g56ec8fc98.dirty