Show More
@@ -859,9 +859,10 b' def perfrevlog(ui, repo, file_=None, sta' | |||||
859 | fm.end() |
|
859 | fm.end() | |
860 |
|
860 | |||
861 | @command('perfrevlogchunks', revlogopts + formatteropts + |
|
861 | @command('perfrevlogchunks', revlogopts + formatteropts + | |
862 | [('s', 'startrev', 0, 'revision to start at')], |
|
862 | [('e', 'engines', '', 'compression engines to use'), | |
|
863 | ('s', 'startrev', 0, 'revision to start at')], | |||
863 | '-c|-m|FILE') |
|
864 | '-c|-m|FILE') | |
864 | def perfrevlogchunks(ui, repo, file_=None, startrev=0, **opts): |
|
865 | def perfrevlogchunks(ui, repo, file_=None, engines=None, startrev=0, **opts): | |
865 | """Benchmark operations on revlog chunks. |
|
866 | """Benchmark operations on revlog chunks. | |
866 |
|
867 | |||
867 | Logically, each revlog is a collection of fulltext revisions. However, |
|
868 | Logically, each revlog is a collection of fulltext revisions. However, | |
@@ -874,6 +875,26 b' def perfrevlogchunks(ui, repo, file_=Non' | |||||
874 | see ``perfrevlog`` and ``perfrevlogrevision``. |
|
875 | see ``perfrevlog`` and ``perfrevlogrevision``. | |
875 | """ |
|
876 | """ | |
876 | rl = cmdutil.openrevlog(repo, 'perfrevlogchunks', file_, opts) |
|
877 | rl = cmdutil.openrevlog(repo, 'perfrevlogchunks', file_, opts) | |
|
878 | ||||
|
879 | # Verify engines argument. | |||
|
880 | if engines: | |||
|
881 | engines = set(e.strip() for e in engines.split(',')) | |||
|
882 | for engine in engines: | |||
|
883 | try: | |||
|
884 | util.compressionengines[engine] | |||
|
885 | except KeyError: | |||
|
886 | raise error.Abort('unknown compression engine: %s' % engine) | |||
|
887 | else: | |||
|
888 | engines = [] | |||
|
889 | for e in util.compengines: | |||
|
890 | engine = util.compengines[e] | |||
|
891 | try: | |||
|
892 | if engine.available(): | |||
|
893 | engine.revlogcompressor().compress('dummy') | |||
|
894 | engines.append(e) | |||
|
895 | except NotImplementedError: | |||
|
896 | pass | |||
|
897 | ||||
877 | revs = list(rl.revs(startrev, len(rl) - 1)) |
|
898 | revs = list(rl.revs(startrev, len(rl) - 1)) | |
878 |
|
899 | |||
879 | def rlfh(rl): |
|
900 | def rlfh(rl): | |
@@ -916,10 +937,17 b' def perfrevlogchunks(ui, repo, file_=Non' | |||||
916 | # Save chunks as a side-effect. |
|
937 | # Save chunks as a side-effect. | |
917 | chunks[0] = rl._chunks(revs, df=fh) |
|
938 | chunks[0] = rl._chunks(revs, df=fh) | |
918 |
|
939 | |||
919 | def docompress(): |
|
940 | def docompress(compressor): | |
920 | rl.clearcaches() |
|
941 | rl.clearcaches() | |
921 | for chunk in chunks[0]: |
|
942 | ||
922 | rl.compress(chunk) |
|
943 | try: | |
|
944 | # Swap in the requested compression engine. | |||
|
945 | oldcompressor = rl._compressor | |||
|
946 | rl._compressor = compressor | |||
|
947 | for chunk in chunks[0]: | |||
|
948 | rl.compress(chunk) | |||
|
949 | finally: | |||
|
950 | rl._compressor = oldcompressor | |||
923 |
|
951 | |||
924 | benches = [ |
|
952 | benches = [ | |
925 | (lambda: doread(), 'read'), |
|
953 | (lambda: doread(), 'read'), | |
@@ -928,9 +956,13 b' def perfrevlogchunks(ui, repo, file_=Non' | |||||
928 | (lambda: doreadbatchcachedfh(), 'read batch w/ reused fd'), |
|
956 | (lambda: doreadbatchcachedfh(), 'read batch w/ reused fd'), | |
929 | (lambda: dochunk(), 'chunk'), |
|
957 | (lambda: dochunk(), 'chunk'), | |
930 | (lambda: dochunkbatch(), 'chunk batch'), |
|
958 | (lambda: dochunkbatch(), 'chunk batch'), | |
931 | (lambda: docompress(), 'compress'), |
|
|||
932 | ] |
|
959 | ] | |
933 |
|
960 | |||
|
961 | for engine in sorted(engines): | |||
|
962 | compressor = util.compengines[engine].revlogcompressor() | |||
|
963 | benches.append((functools.partial(docompress, compressor), | |||
|
964 | 'compress w/ %s' % engine)) | |||
|
965 | ||||
934 | for fn, title in benches: |
|
966 | for fn, title in benches: | |
935 | timer, fm = gettimer(ui, opts) |
|
967 | timer, fm = gettimer(ui, opts) | |
936 | timer(fn, title=title) |
|
968 | timer(fn, title=title) |
General Comments 0
You need to be logged in to leave comments.
Login now