path: root/t/perf/
diff options
authorJeff King <>2020-02-14 18:22:39 (GMT)
committerJunio C Hamano <>2020-02-14 18:46:22 (GMT)
commit84243da1298890bd7370df66b754c2b252a08346 (patch)
tree9c6bc7d501984fc8a5068935683f50180e08cc46 /t/perf/
parent4f3bd5606a02260274555f41fd7d6368f2bea1d8 (diff)
pack-bitmap: implement BLOB_LIMIT filtering
Just as the previous commit implemented BLOB_NONE, we can support BLOB_LIMIT filters by looking at the sizes of any blobs in the result and unsetting their bits as appropriate. This is slightly more expensive than BLOB_NONE, but still produces a noticeable speedup (these results are on git.git): Test HEAD~2 HEAD ------------------------------------------------------------------------------------ 5310.9: rev-list count with blob:none 1.80(1.77+0.02) 0.22(0.20+0.02) -87.8% 5310.10: rev-list count with blob:limit=1k 1.99(1.96+0.03) 0.29(0.25+0.03) -85.4% The implementation is similar to the BLOB_NONE one, with the exception that we have to go object-by-object while walking the blob-type bitmap (since we can't mask out the matches, but must look up the size individually for each blob). The trick with using ctz64() is taken from show_objects_for_type(), which likewise needs to find individual bits (but wants to quickly skip over big chunks without blobs). Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 't/perf/')
1 files changed, 5 insertions, 0 deletions
diff --git a/t/perf/ b/t/perf/
index 9367423..8b43a54 100755
--- a/t/perf/
+++ b/t/perf/
@@ -52,6 +52,11 @@ test_perf 'rev-list count with blob:none' '
--filter=blob:none >/dev/null
+test_perf 'rev-list count with blob:limit=1k' '
+ git rev-list --use-bitmap-index --count --objects --all \
+ --filter=blob:limit=1k >/dev/null
test_expect_success 'create partial bitmap state' '
# pick a commit to represent the repo tip in the past
cutoff=$(git rev-list HEAD~100 -1) &&