D868: changelog: use attrs instead of namedtuple

lothiraldan (Boris Feld) phabricator at mercurial-scm.org
Mon Oct 23 13:33:28 EDT 2017


lothiraldan added a comment.


  The perf difference is not big, but I'm not sure if it's due to the import time of attrs because basic_commands.TimeTestSuite.time_version didn't change much. I have the impression that we pay a cost the first time an attrs-based class is instantiated.
  
  I've pasted all the data because they are a lot of tests (but not all) that became worst with this changeset (2-3 ms on average I would say) so if someone also finds it fishy, maybe we should take a look?
  
  For comparison, here is `asv compare` between this changeset grand-parent and its parent:
  
    asv compare 9fb9f8440b71 765eb17a7eb8 -s
    
    Benchmarks that have stayed the same:
    
           before           after         ratio
         [9fb9f844]       [765eb17a]
          82.3±0.02ms      82.2±0.01ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('mercurial-2017', 10)
           218±0.07ms       218±0.01ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('mercurial-2017', 100)
              1.26±0s          1.25±0s     1.00  basic_commands.LogTimeTestSuite.time_log_history('mercurial-2017', 1000)
              3.81±0s          3.79±0s     0.99  basic_commands.LogTimeTestSuite.time_log_history('mercurial-2017', 10000)
           150±0.02ms       150±0.02ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('mozilla-central-2017', 10)
           165±0.02ms       165±0.02ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('mozilla-central-2017', 100)
           359±0.09ms        359±0.1ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('mozilla-central-2017', 1000)
              2.52±0s          2.52±0s     1.00  basic_commands.LogTimeTestSuite.time_log_history('mozilla-central-2017', 10000)
              102±0ms       102±0.01ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('netbeans-2017', 10)
           139±0.01ms       138±0.01ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('netbeans-2017', 100)
            370±0.2ms        369±0.2ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('netbeans-2017', 1000)
             60.4±0ms         60.4±0ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('pypy-2017', 10)
             78.2±0ms         78.1±0ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('pypy-2017', 100)
           251±0.05ms       251±0.03ms     1.00  basic_commands.LogTimeTestSuite.time_log_history('pypy-2017', 1000)
              7.62±0s       7.57±0.01s     0.99  basic_commands.LogTimeTestSuite.time_log_history('pypy-2017', 10000)
               67.1ms           67.2ms     1.00  basic_commands.TestSuite.track_commit('mercurial-2017')
                2.79s            2.79s     1.00  basic_commands.TestSuite.track_commit('mozilla-central-2017')
                1.54s            1.54s     1.00  basic_commands.TestSuite.track_commit('netbeans-2017')
                192ms            192ms     1.00  basic_commands.TestSuite.track_commit('pypy-2017')
             38.3±0ms         38.2±0ms     1.00  basic_commands.TimeTestSuite.time_bookmarks('mercurial-2017')
             44.8±0ms         44.7±0ms     1.00  basic_commands.TimeTestSuite.time_bookmarks('mozilla-central-2017')
             43.5±0ms         43.4±0ms     1.00  basic_commands.TimeTestSuite.time_bookmarks('netbeans-2017')
             38.7±0ms         38.5±0ms     1.00  basic_commands.TimeTestSuite.time_bookmarks('pypy-2017')
             46.7±0ms         46.7±0ms     1.00  basic_commands.TimeTestSuite.time_diff_tip('mercurial-2017')
            657±0.2ms       656±0.07ms     1.00  basic_commands.TimeTestSuite.time_diff_tip('mozilla-central-2017')
           342±0.01ms       342±0.03ms     1.00  basic_commands.TimeTestSuite.time_diff_tip('netbeans-2017')
             55.7±0ms         55.6±0ms     1.00  basic_commands.TimeTestSuite.time_diff_tip('pypy-2017')
             44.1±0ms         43.9±0ms     1.00  basic_commands.TimeTestSuite.time_emptydiff('mercurial-2017')
            869±0.2ms       870±0.08ms     1.00  basic_commands.TimeTestSuite.time_emptydiff('mozilla-central-2017')
           408±0.05ms       408±0.08ms     1.00  basic_commands.TimeTestSuite.time_emptydiff('netbeans-2017')
             57.2±0ms      57.1±0.01ms     1.00  basic_commands.TimeTestSuite.time_emptydiff('pypy-2017')
             48.8±0ms         48.7±0ms     1.00  basic_commands.TimeTestSuite.time_emptystatus('mercurial-2017')
              1.25±0s          1.25±0s     1.00  basic_commands.TimeTestSuite.time_emptystatus('mozilla-central-2017')
            763±0.1ms        762±0.9ms     1.00  basic_commands.TimeTestSuite.time_emptystatus('netbeans-2017')
             66.3±0ms      66.2±0.01ms     1.00  basic_commands.TimeTestSuite.time_emptystatus('pypy-2017')
             45.1±0ms         45.0±0ms     1.00  basic_commands.TimeTestSuite.time_id('mercurial-2017')
            871±0.1ms        872±0.1ms     1.00  basic_commands.TimeTestSuite.time_id('mozilla-central-2017')
           412±0.05ms        413±0.1ms     1.00  basic_commands.TimeTestSuite.time_id('netbeans-2017')
             57.9±0ms         57.7±0ms     1.00  basic_commands.TimeTestSuite.time_id('pypy-2017')
             43.3±0ms         43.3±0ms     1.00  basic_commands.TimeTestSuite.time_id_current('mercurial-2017')
           131±0.03ms       131±0.02ms     1.00  basic_commands.TimeTestSuite.time_id_current('mozilla-central-2017')
          95.7±0.01ms      95.6±0.01ms     1.00  basic_commands.TimeTestSuite.time_id_current('netbeans-2017')
          54.4±0.01ms         54.3±0ms     1.00  basic_commands.TimeTestSuite.time_id_current('pypy-2017')
             43.6±0ms         43.6±0ms     1.00  basic_commands.TimeTestSuite.time_log_tip('mercurial-2017')
             54.8±0ms         54.8±0ms     1.00  basic_commands.TimeTestSuite.time_log_tip('mozilla-central-2017')
             57.7±0ms         57.6±0ms     1.00  basic_commands.TimeTestSuite.time_log_tip('netbeans-2017')
             44.9±0ms         44.9±0ms     1.00  basic_commands.TimeTestSuite.time_log_tip('pypy-2017')
             45.2±0ms         45.2±0ms     1.00  basic_commands.TimeTestSuite.time_status_tip('mercurial-2017')
              580±0ms       579±0.07ms     1.00  basic_commands.TimeTestSuite.time_status_tip('mozilla-central-2017')
           341±0.01ms       341±0.02ms     1.00  basic_commands.TimeTestSuite.time_status_tip('netbeans-2017')
             53.7±0ms      53.7±0.01ms     1.00  basic_commands.TimeTestSuite.time_status_tip('pypy-2017')
             54.1±0ms         54.0±0ms     1.00  basic_commands.TimeTestSuite.time_summary('mercurial-2017')
              1.29±0s          1.29±0s     1.00  basic_commands.TimeTestSuite.time_summary('mozilla-central-2017')
            788±0.1ms        790±0.1ms     1.00  basic_commands.TimeTestSuite.time_summary('netbeans-2017')
             81.4±0ms         81.3±0ms     1.00  basic_commands.TimeTestSuite.time_summary('pypy-2017')
             31.3±0ms         31.2±0ms     1.00  basic_commands.TimeTestSuite.time_version('mercurial-2017')
             31.3±0ms         31.2±0ms     1.00  basic_commands.TimeTestSuite.time_version('mozilla-central-2017')
             31.3±0ms         31.2±0ms     1.00  basic_commands.TimeTestSuite.time_version('netbeans-2017')
             31.3±0ms         31.2±0ms     1.00  basic_commands.TimeTestSuite.time_version('pypy-2017')
  
  As you can see we are pretty confident that's it's not just jitters or instability.

REPOSITORY
  rHG Mercurial

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

To: sid0, #hg-reviewers, durin42
Cc: lothiraldan, mercurial-devel


More information about the Mercurial-devel mailing list