comparison contrib/perf.py @ 51009:ffb393dd5999

perf: ensure all readlog's reading is done within a `reading` context We are about to enforce this at the revlog level, so we update the perf code in advance.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 25 Sep 2023 11:23:38 +0200
parents 2f1967ffefb1
children 47d43efda8b7
comparison
equal deleted inserted replaced
51008:2f1967ffefb1 51009:ffb393dd5999
3757 yield getsvfs(repo)(indexfile) 3757 yield getsvfs(repo)(indexfile)
3758 else: 3758 else:
3759 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile')) 3759 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile'))
3760 yield getsvfs(repo)(datafile) 3760 yield getsvfs(repo)(datafile)
3761 3761
3762 if getattr(rl, 'reading', None) is not None:
3763
3764 @contextlib.contextmanager
3765 def lazy_reading(rl):
3766 with rl.reading():
3767 yield
3768
3769 else:
3770
3771 @contextlib.contextmanager
3772 def lazy_reading(rl):
3773 yield
3774
3762 def doread(): 3775 def doread():
3763 rl.clearcaches() 3776 rl.clearcaches()
3764 for rev in revs: 3777 for rev in revs:
3765 segmentforrevs(rev, rev) 3778 with lazy_reading(rl):
3779 segmentforrevs(rev, rev)
3766 3780
3767 def doreadcachedfh(): 3781 def doreadcachedfh():
3768 rl.clearcaches() 3782 rl.clearcaches()
3769 with reading(rl) as fh: 3783 with reading(rl) as fh:
3770 if fh is not None: 3784 if fh is not None:
3774 for rev in revs: 3788 for rev in revs:
3775 segmentforrevs(rev, rev) 3789 segmentforrevs(rev, rev)
3776 3790
3777 def doreadbatch(): 3791 def doreadbatch():
3778 rl.clearcaches() 3792 rl.clearcaches()
3779 segmentforrevs(revs[0], revs[-1]) 3793 with lazy_reading(rl):
3794 segmentforrevs(revs[0], revs[-1])
3780 3795
3781 def doreadbatchcachedfh(): 3796 def doreadbatchcachedfh():
3782 rl.clearcaches() 3797 rl.clearcaches()
3783 with reading(rl) as fh: 3798 with reading(rl) as fh:
3784 if fh is not None: 3799 if fh is not None:
3880 except AttributeError: 3895 except AttributeError:
3881 segmentforrevs = r._chunkraw 3896 segmentforrevs = r._chunkraw
3882 3897
3883 node = r.lookup(rev) 3898 node = r.lookup(rev)
3884 rev = r.rev(node) 3899 rev = r.rev(node)
3900
3901 if getattr(r, 'reading', None) is not None:
3902
3903 @contextlib.contextmanager
3904 def lazy_reading(r):
3905 with r.reading():
3906 yield
3907
3908 else:
3909
3910 @contextlib.contextmanager
3911 def lazy_reading(r):
3912 yield
3885 3913
3886 def getrawchunks(data, chain): 3914 def getrawchunks(data, chain):
3887 start = r.start 3915 start = r.start
3888 length = r.length 3916 length = r.length
3889 inline = r._inline 3917 inline = r._inline
3914 3942
3915 def doread(chain): 3943 def doread(chain):
3916 if not cache: 3944 if not cache:
3917 r.clearcaches() 3945 r.clearcaches()
3918 for item in slicedchain: 3946 for item in slicedchain:
3919 segmentforrevs(item[0], item[-1]) 3947 with lazy_reading(r):
3948 segmentforrevs(item[0], item[-1])
3920 3949
3921 def doslice(r, chain, size): 3950 def doslice(r, chain, size):
3922 for s in slicechunk(r, chain, targetsize=size): 3951 for s in slicechunk(r, chain, targetsize=size):
3923 pass 3952 pass
3924 3953