Patchwork D9653: copies-rust: implement PartialEqual manually

login
register
mail settings
Submitter phabricator
Date Dec. 21, 2020, 10:29 p.m.
Message ID <differential-rev-PHID-DREV-o2rld5qcbzoum7uhqfds-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/47963/
State New
Headers show

Comments

phabricator - Dec. 21, 2020, 10:29 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  Now that we know that each (dest, rev) pair has at most a unique CopySource, we
  can simplify comparison a lot.
  
  This "simple" step buy a good share of the previous slowdown back in some case:
  
  Repo            Case                                  Source-Rev   Dest-Rev      # of revisions  old time    new time      Difference    Factor    time per rev
  ---------------------------------------------------------------------------------------------------------------------------------------------------------------
  
  mozilla-try     x00000_revs_x00000_added_x000_copies  9b2a99adc05e 8e29777b48e6 : 382065 revs,  43.304637 s,  34.443661 s,  -8.860976 s, × 0.7954,    90 µs/rev
  
  Full benchmark:
  
  Repo            Case                                  Source-Rev   Dest-Rev      # of revisions  old time    new time      Difference    Factor    time per rev
  ---------------------------------------------------------------------------------------------------------------------------------------------------------------
  
  mercurial       x_revs_x_added_0_copies               ad6b123de1c7 <https://phab.mercurial-scm.org/rHGad6b123de1c7868a4be537a0e3fa5eb6a962dd3b> 39cfcef4f463 <https://phab.mercurial-scm.org/rHG39cfcef4f46358a25ebf32670191687826ca2bdf> :      1 revs,   0.000043 s,   0.000043 s,  +0.000000 s, × 1.0000,    43 µs/rev
  mercurial       x_revs_x_added_x_copies               2b1c78674230 <https://phab.mercurial-scm.org/rHG2b1c786742301bb757226a898fafe595a90462fb> 0c1d10351869 <https://phab.mercurial-scm.org/rHG0c1d103518698454c9a8825b66276becf2820f86> :      6 revs,   0.000114 s,   0.000117 s,  +0.000003 s, × 1.0263,    19 µs/rev
  mercurial       x000_revs_x000_added_x_copies         81f8ff2a9bf2 <https://phab.mercurial-scm.org/rHG81f8ff2a9bf20606fc89bc787983f592183e25b5> dd3267698d84 <https://phab.mercurial-scm.org/rHGdd3267698d84458686b3c5682ce027438900ffbd> :   1032 revs,   0.004937 s,   0.004892 s,  -0.000045 s, × 0.9909,     4 µs/rev
  pypy            x_revs_x_added_0_copies               aed021ee8ae8 099ed31b181b :      9 revs,   0.000339 s,   0.000196 s,  -0.000143 s, × 0.5782,    21 µs/rev
  pypy            x_revs_x000_added_0_copies            4aa4e1f8e19a 359343b9ac0e :      1 revs,   0.000049 s,   0.000050 s,  +0.000001 s, × 1.0204,    50 µs/rev
  pypy            x_revs_x_added_x_copies               ac52eb7bbbb0 72e022663155 :      7 revs,   0.000202 s,   0.000117 s,  -0.000085 s, × 0.5792,    16 µs/rev
  pypy            x_revs_x00_added_x_copies             c3b14617fbd7 ace7255d9a26 :      1 revs,   0.000409 s,   0.6f1f4a s,  -0.000087 s, × 0.7873,   322 µs/rev
  pypy            x_revs_x000_added_x000_copies         df6f7a526b60 a83dc6a2d56f :      6 revs,   0.011984 s,   0.011949 s,  -0.000035 s, × 0.9971,  1991 µs/rev
  pypy            x000_revs_xx00_added_0_copies         89a76aede314 2f22446ff07e :   4785 revs,   0.050820 s,   0.050802 s,  -0.000018 s, × 0.9996,    10 µs/rev
  pypy            x000_revs_x000_added_x_copies         8a3b5bfd266e 2c68e87c3efe :   6780 revs,   0.087953 s,   0.088090 s,  +0.000137 s, × 1.0016,    12 µs/rev
  pypy            x000_revs_x000_added_x000_copies      89a76aede314 7b3dda341c84 :   5441 revs,   0.062902 s,   0.062079 s,  -0.000823 s, × 0.9869,    11 µs/rev
  pypy            x0000_revs_x_added_0_copies           d1defd0dc478 c9cb1334cc78 :  43645 revs,   0.679234 s,   0.635337 s,  -0.043897 s, × 0.9354,    14 µs/rev
  pypy            x0000_revs_xx000_added_0_copies       bf2c629d0071 4ffed77c095c :      2 revs,   0.013095 s,   0.013262 s,  +0.000167 s, × 1.0128,  6631 µs/rev
  pypy            x0000_revs_xx000_added_x000_copies    08ea3258278e d9fa043f30c0 :  11316 revs,   0.120910 s,   0.120085 s,  -0.000825 s, × 0.9932,    10 µs/rev
  netbeans        x_revs_x_added_0_copies               fb0955ffcbcd a01e9239f9e7 :      2 revs,   0.000087 s,   0.000085 s,  -0.000002 s, × 0.9770,    42 µs/rev
  netbeans        x_revs_x000_added_0_copies            6f360122949f 20eb231cc7d0 :      2 revs,   0.000107 s,   0.000110 s,  +0.000003 s, × 1.0280,    55 µs/rev
  netbeans        x_revs_x_added_x_copies               1ada3faf6fb6 5a39d12eecf4 :      3 revs,   0.000186 s,   0.000177 s,  -0.000009 s, × 0.9516,    59 µs/rev
  netbeans        x_revs_x00_added_x_copies             35be93ba1e2c 9eec5e90c05f :      9 revs,   0.000754 s,   0.000743 s,  -0.000011 s, × 0.9854,    82 µs/rev
  netbeans        x000_revs_xx00_added_0_copies         eac3045b4fdd 51d4ae7f1290 :   1421 revs,   0.010443 s,   0.010168 s,  -0.000275 s, × 0.9737,     7 µs/rev
  netbeans        x000_revs_x000_added_x_copies         e2063d266acd 6081d72689dc :   1533 revs,   0.015697 s,   0.015946 s,  +0.000249 s, × 1.0159,    10 µs/rev
  netbeans        x000_revs_x000_added_x000_copies      ff453e9fee32 411350406ec2 :   5750 revs,   0.063528 s,   0.062712 s,  -0.000816 s, × 0.9872,    10 µs/rev
  netbeans        x0000_revs_xx000_added_x000_copies    588c2d1ced70 1aad62e59ddd :  66949 revs,   0.545515 s,   0.523832 s,  -0.021683 s, × 0.9603,     7 µs/rev
  mozilla-central x_revs_x_added_0_copies               3697f962bb7b 7015fcdd43a2 :      2 revs,   0.000089 s,   0.000090 s,  +0.000001 s, × 1.0112,    45 µs/rev
  mozilla-central x_revs_x000_added_0_copies            dd390860c6c9 40d0c5bed75d :      8 revs,   0.000265 s,   0.000264 s,  -0.000001 s, × 0.9962,    33 µs/rev
  mozilla-central x_revs_x_added_x_copies               8d198483ae3b 14207ffc2b2f :      9 revs,   0.000381 s,   0.000187 s,  -0.000194 s, × 0.4908,    20 µs/rev
  mozilla-central x_revs_x00_added_x_copies             98cbc58cc6bc 446a150332c3 :      7 revs,   0.000672 s,   0.000665 s,  -0.000007 s, × 0.9896,    95 µs/rev
  mozilla-central x_revs_x000_added_x000_copies         3c684b4b8f68 0a5e72d1b479 :      3 revs,   0.003497 s,   0.003556 s,  +0.000059 s, × 1.0169,  1185 µs/rev
  mozilla-central x_revs_x0000_added_x0000_copies       effb563bb7e5 c07a39dc4e80 :      6 revs,   0.073204 s,   0.071345 s,  -0.001859 s, × 0.9746, 11890 µs/rev
  mozilla-central x000_revs_xx00_added_0_copies         6100d773079a 04a55431795e :   1593 revs,   0.006482 s,   0.006551 s,  +0.000069 s, × 1.0106,     4 µs/rev
  mozilla-central x000_revs_x000_added_x_copies         9f17a6fc04f9 2d37b966abed :     41 revs,   0.005066 s,   0.005078 s,  +0.000012 s, × 1.0024,   123 µs/rev
  mozilla-central x000_revs_x000_added_x000_copies      7c97034feb78 4407bd0c6330 :   7839 revs,   0.065707 s,   0.065823 s,  +0.000116 s, × 1.0018,     8 µs/rev
  mozilla-central x0000_revs_xx000_added_0_copies       9eec5917337d 67118cc6dcad :    615 revs,   0.026800 s,   0.027050 s,  +0.000250 s, × 1.0093,    43 µs/rev
  mozilla-central x0000_revs_xx000_added_x000_copies    f78c615a656c 96a38b690156 :  30263 revs,   0.203856 s,   0.202443 s,  -0.001413 s, × 0.9931,     6 µs/rev
  mozilla-central x00000_revs_x0000_added_x0000_copies  6832ae71433c 4c222a1d9a00 : 153721 revs,   1.293394 s,   1.261583 s,  -0.031811 s, × 0.9754,     8 µs/rev
  mozilla-central x00000_revs_x00000_added_x000_copies  76caed42cf7c 1daa622bbe42 : 204976 revs,   1.698239 s,   1.643869 s,  -0.054370 s, × 0.9680,     8 µs/rev
  mozilla-try     x_revs_x_added_0_copies               aaf6dde0deb8 9790f499805a :      2 revs,   0.000875 s,   0.000868 s,  -0.000007 s, × 0.9920,   434 µs/rev
  mozilla-try     x_revs_x000_added_0_copies            d8d0222927b4 5bb8ce8c7450 :      2 revs,   0.000891 s,   0.000887 s,  -0.000004 s, × 0.9955,   443 µs/rev
  mozilla-try     x_revs_x_added_x_copies               092fcca11bdb 936255a0384a :      4 revs,   0.000292 s,   0.000168 s,  -0.000124 s, × 0.5753,    42 µs/rev
  mozilla-try     x_revs_x00_added_x_copies             b53d2fadbdb5 017afae788ec :      2 revs,   0.003939 s,   0.001160 s,  -0.002779 s, × 0.2945,   580 µs/rev
  mozilla-try     x_revs_x000_added_x000_copies         20408ad61ce5 6f0ee96e21ad :      1 revs,   0.033027 s,   0.033016 s,  -0.000011 s, × 0.9997, 33016 µs/rev
  mozilla-try     x_revs_x0000_added_x0000_copies       effb563bb7e5 c07a39dc4e80 :      6 revs,   0.073703 s,   0.073312 s,  -0.39ae31 s, × 0.9947, 12218 µs/rev
  mozilla-try     x000_revs_xx00_added_0_copies         6100d773079a 04a55431795e :   1593 revs,   0.006469 s,   0.006485 s,  +0.000016 s, × 1.0025,     4 µs/rev
  mozilla-try     x000_revs_x000_added_x_copies         9f17a6fc04f9 2d37b966abed :     41 revs,   0.005278 s,   0.005494 s,  +0.000216 s, × 1.0409,   134 µs/rev
  mozilla-try     x000_revs_x000_added_x000_copies      1346fd0130e4 4c65cbdabc1f :   6657 revs,   0.064995 s,   0.064879 s,  -0.000116 s, × 0.9982,     9 µs/rev
  mozilla-try     x0000_revs_x_added_0_copies           63519bfd42ee a36a2a865d92 :  40314 revs,   0.301041 s,   0.301469 s,  +0.000428 s, × 1.0014,     7 µs/rev
  mozilla-try     x0000_revs_x_added_x_copies           9fe69ff0762d bcabf2a78927 :  38690 revs,   0.285575 s,   0.297113 s,  +0.011538 s, × 1.0404,     7 µs/rev
  mozilla-try     x0000_revs_xx000_added_x_copies       156f6e2674f2 4d0f2c178e66 :   8598 revs,   0.085597 s,   0.085890 s,  +0.000293 s, × 1.0034,     9 µs/rev
  mozilla-try     x0000_revs_xx000_added_0_copies       9eec5917337d 67118cc6dcad :    615 revs,   0.027118 s,   0.027718 s,  +0.000600 s, × 1.0221,    45 µs/rev
  mozilla-try     x0000_revs_xx000_added_x000_copies    89294cd501d9 7ccb2fc7ccb5 :  97052 revs,   2.119204 s,   2.048949 s,  -0.070255 s, × 0.9668,    21 µs/rev
  mozilla-try     x0000_revs_x0000_added_x0000_copies   e928c65095ed e951f4ad123a :  52031 revs,   0.701479 s,   0.685924 s,  -0.015555 s, × 0.9778,    13 µs/rev
  mozilla-try     x00000_revs_x_added_0_copies          6a320851d377 1ebb79acd503 : 363753 revs,   4.482399 s,   4.482891 s,  +0.000492 s, × 1.0001,    12 µs/rev
  mozilla-try     x00000_revs_x00000_added_0_copies     dc8a3ca7010e d16fde900c9c :  34414 revs,   0.574082 s,   0.577633 s,  +0.003551 s, × 1.0062,    16 µs/rev
  mozilla-try     x00000_revs_x_added_x_copies          5173c4b6f97c 95d83ee7242d : 362229 revs,   4.480366 s,   4.397816 s,  -0.082550 s, × 0.9816,    12 µs/rev
  mozilla-try     x00000_revs_x000_added_x_copies       9126823d0e9c ca82787bb23c : 359344 revs,   4.369070 s,   4.370538 s,  +0.001468 s, × 1.0003,    12 µs/rev
  mozilla-try     x00000_revs_x0000_added_x0000_copies  8d3fafa80d4b eb884023b810 : 192665 revs,   1.592506 s,   1.570439 s,  -0.022067 s, × 0.9861,     8 µs/rev
  mozilla-try     x00000_revs_x00000_added_x0000_copies 1b661134e2ca 1ae03d022d6d : 228985 revs,  87.824489 s,  88.388512 s,  +0.564023 s, × 1.0064,   386 µs/rev
  mozilla-try     x00000_revs_x00000_added_x000_copies  9b2a99adc05e 8e29777b48e6 : 382065 revs,  43.304637 s,  34.443661 s,  -8.860976 s, × 0.7954,    90 µs/rev
  private                                                                         : 459513 revs,  33.853687 s,  27.370148 s,  -6.483539 s, × 0.8085,    59 µs/rev

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  rust/hg-core/src/copy_tracing.rs

CHANGE DETAILS




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

Patch

diff --git a/rust/hg-core/src/copy_tracing.rs b/rust/hg-core/src/copy_tracing.rs
--- a/rust/hg-core/src/copy_tracing.rs
+++ b/rust/hg-core/src/copy_tracing.rs
@@ -16,7 +16,7 @@ 
 
 type PathToken = usize;
 
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug)]
 struct CopySource {
     /// revision at which the copy information was added
     rev: Revision,
@@ -91,6 +91,21 @@ 
     }
 }
 
+// For the same "dest", content generated for a given revision will always be
+// the same.
+impl PartialEq for CopySource {
+    fn eq(&self, other: &Self) -> bool {
+        #[cfg(debug_assertions)]
+        {
+            if self.rev == other.rev {
+                debug_assert!(self.path == other.path);
+                debug_assert!(self.overwritten == other.overwritten);
+            }
+        }
+        self.rev == other.rev
+    }
+}
+
 /// maps CopyDestination to Copy Source (+ a "timestamp" for the operation)
 type InternalPathCopies = OrdMap<PathToken, CopySource>;