Patchwork D7074: sidedatacopies: fast path data fetching if revision has no sidedata

login
register
mail settings
Submitter phabricator
Date Oct. 12, 2019, 4:47 p.m.
Message ID <differential-rev-PHID-DREV-vmobdhvppq4andel6cm5-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/42273/
State Superseded
Headers show

Comments

phabricator - Oct. 12, 2019, 4:47 p.m.
marmoute created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  When using the side data mode, we know their won't be any copy information
  sidedata. Skipping revision restoration give an important speed boost.
  
  In the future, there will be other user of sidedata, reducing the efficiency of
  this. We should consider adding a dedicated flag in revlog V2 to preserve this
  optimisation. The current situation is good enough for now.
  
  revision: large amount; added files: large amount; rename small amount; c3b14617fbd7 9ba6ab77fd29
  filelog: ! wall 3.679613 comb 3.680000 user 3.580000 sys 0.100000 (median of 3)
  base:    ! wall 8.884369 comb 8.880000 user 8.850000 sys 0.030000 (median of 3)
  before:  ! wall 3.955894 comb 3.950000 user 3.940000 sys 0.010000 (median of 3)
  after:   ! wall 2.519314 comb 2.520000 user 2.470000 sys 0.050000 (median of 4)
  revision: large amount; added files: small amount; rename small amount; c3b14617fbd7 f650a9b140d2
  filelog: ! wall 0.003357 comb 0.010000 user 0.010000 sys 0.000000 (median of 781)
  base:    ! wall 12.398524 comb 12.400000 user 12.330000 sys 0.070000 (median of 3)
  before:  ! wall 5.505774 comb 5.500000 user 5.410000 sys 0.090000 (median of 3)
  after:   ! wall 3.282323 comb 3.280000 user 3.230000 sys 0.050000 (median of 4)
  revision: large amount; added files: large amount; rename large amount; 08ea3258278e d9fa043f30c0
  filelog: ! wall 2.754687 comb 2.760000 user 2.650000 sys 0.110000 (median of 4)
  base:    ! wall 1.423166 comb 1.420000 user 1.400000 sys 0.020000 (median of 8)
  before:  ! wall 0.882950 comb 0.880000 user 0.880000 sys 0.000000 (median of 11)
  after:   ! wall 0.348148 comb 0.350000 user 0.340000 sys 0.010000 (median of 29)
  revision: small amount; added files: large amount; rename large amount; df6f7a526b60 a83dc6a2d56f
  filelog: ! wall 1.552293 comb 1.550000 user 1.510000 sys 0.040000 (median of 6
  base:    ! wall 0.022662 comb 0.020000 user 0.020000 sys 0.000000 (median of 128)
  before:  ! wall 0.020951 comb 0.020000 user 0.020000 sys 0.000000 (median of 141)
  after:   ! wall 0.020141 comb 0.020000 user 0.020000 sys 0.000000 (median of 146)
  revision: small amount; added files: large amount; rename small amount; 4aa4e1f8e19a 169138063d63
  filelog: ! wall 1.500983 comb 1.500000 user 1.420000 sys 0.080000 (median of 7)
  base:    ! wall 0.006956 comb 0.010000 user 0.010000 sys 0.000000 (median of 392)
  before:  ! wall 0.003988 comb 0.000000 user 0.000000 sys 0.000000 (median of 736)
  after:   ! wall 0.002159 comb 0.000000 user 0.000000 sys 0.000000 (median of 1350)
  revision: small amount; added files: small amount; rename small amount; 4bc173b045a6 964879152e2e
  filelog: ! wall 0.011745 comb 0.020000 user 0.020000 sys 0.000000 (median of 250)
  base:    ! wall 0.000156 comb 0.000000 user 0.000000 sys 0.000000 (median of 17180)
  before:  ! wall 0.000097 comb 0.000000 user 0.000000 sys 0.000000 (median of 27276)
  after:   ! wall 0.000095 comb 0.000000 user 0.000000 sys 0.000000 (median of 28232)
  revision: medium amount; added files: large amount; rename medium amount; c95f1ced15f2 2c68e87c3efe
  filelog: ! wall 3.228230 comb 3.230000 user 3.110000 sys 0.120000 (median of 4)
  base:    ! wall 0.997640 comb 1.000000 user 0.980000 sys 0.020000 (median of 10)
  before:  ! wall 0.596779 comb 0.600000 user 0.600000 sys 0.000000 (median of 17)
  after:   ! wall 0.293127 comb 0.290000 user 0.280000 sys 0.010000 (median of 34)
  revision: medium amount; added files: medium amount; rename small amount; d343da0c55a8 d7746d32bf9d
  filelog: ! wall 1.052501 comb 1.060000 user 1.040000 sys 0.020000 (median of 10
  base:    ! wall 0.214519 comb 0.220000 user 0.220000 sys 0.000000 (median of 45)
  before:  ! wall 0.130786 comb 0.130000 user 0.130000 sys 0.000000 (median of 75)
  after:   ! wall 0.047039 comb 0.050000 user 0.050000 sys 0.000000 (median of 100)

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7074

AFFECTED FILES
  mercurial/copies.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -277,13 +277,19 @@ 
     parents = cl._uncheckedparentrevs
     if repo.filecopiesmode == b'changeset-sidedata':
         changelogrevision = cl.changelogrevision
+        flags = cl._uncheckedflags
 
         def revinfo(rev):
             p1, p2 = parents(rev)
-            c = changelogrevision(rev)
-            p1copies = c.p1copies
-            p2copies = c.p2copies
-            removed = c.filesremoved
+            if flags(rev) & REVIDX_SIDEDATA:
+                c = changelogrevision(rev)
+                p1copies = c.p1copies
+                p2copies = c.p2copies
+                removed = c.filesremoved
+            else:
+                p1copies = {}
+                p2copies = {}
+                removed = ()
             return p1, p2, p1copies, p2copies, removed
 
     else: