# Global Metrics

path: .metrics.halstead.N1
old: 1502.0
new: 584.0
path: .metrics.halstead.difficulty
old: 110.5868263473054
new: 18.36322869955157
path: .metrics.halstead.n1
old: 38.0
new: 21.0
path: .metrics.halstead.bugs
old: 5.468086190524628
new: 0.9066224234017214
path: .metrics.halstead.N2
old: 972.0
new: 390.0
path: .metrics.halstead.time
old: 116724.60265926384
new: 7880.414497506155
path: .metrics.halstead.purity_ratio
old: 0.5790217713637925
new: 1.880738545750084
path: .metrics.halstead.level
old: 0.009042668399393546
new: 0.05445665445665446
path: .metrics.halstead.volume
old: 18999.033766176475
new: 7724.538166786252
path: .metrics.halstead.vocabulary
old: 205.0
new: 244.0
path: .metrics.halstead.effort
old: 2101042.8478667494
new: 141847.4609551108
path: .metrics.halstead.estimated_program_length
old: 1432.4998623540228
new: 1831.839343560582
path: .metrics.halstead.n2
old: 167.0
new: 223.0
path: .metrics.halstead.length
old: 2474.0
new: 974.0
path: .metrics.cognitive.average
old: 5.545454545454546
new: 0.037037037037037035
path: .metrics.cognitive.sum
old: 122.0
new: 1.0
path: .metrics.nargs.average
old: 0.6818181818181818
new: 0.6666666666666666
path: .metrics.nargs.sum
old: 15.0
new: 18.0
path: .metrics.mi.mi_visual_studio
old: 0.0
new: 7.37652877051614
path: .metrics.mi.mi_original
old: -8.246500899882548
new: 12.6138641975826
path: .metrics.mi.mi_sei
old: -50.6237926795084
new: -19.12164573097601
path: .metrics.nexits.average
old: 1.7272727272727273
new: 0.5185185185185185
path: .metrics.nexits.sum
old: 38.0
new: 14.0
path: .metrics.nom.functions
old: 22.0
new: 27.0
path: .metrics.nom.total
old: 22.0
new: 27.0
path: .metrics.cyclomatic.average
old: 4.615384615384615
new: 1.183673469387755
path: .metrics.cyclomatic.sum
old: 120.0
new: 58.0
path: .metrics.loc.sloc
old: 492.0
new: 437.0
path: .metrics.loc.ploc
old: 389.0
new: 254.0
path: .metrics.loc.cloc
old: 55.0
new: 91.0
path: .metrics.loc.blank
old: 48.0
new: 92.0
path: .metrics.loc.lloc
old: 163.0
new: 21.0

# Spaces Data

## Minimal test - lines (33, 33)

path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.1
new: 1.0
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 11.0
new: 1.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: 0.1111111111111111
new: null
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: 0.7777777777777778
new: null
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 7.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 9.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 9.0
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 143.0
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.03110047846889952
new: null
path: .spaces[0].spaces[0].metrics.halstead.time
old: 2184.8659711154532
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 39327.58748007816
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 220.31892828168893
new: null
path: .spaces[0].spaces[0].metrics.halstead.length
old: 219.0
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 32.15384615384615
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 26.0
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 48.0
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.3854874844539285
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 76.0
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 22.0
new: 0.0
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.0060225035693555
new: null
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 1223.1067876579332
new: 0.0
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 15.0
new: 0.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 29.0
new: 1.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 4.0
new: 0.0
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 3.0
new: 0.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 22.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 4.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nargs.average
old: 0.4444444444444444
new: null
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 60.3332243373054
new: null
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 76.9522304244598
new: null
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 45.00130434178936
new: null

### Code

    class CycleCollectedJSContext;

## Minimal test - lines (32, 40)

path: .spaces[0].metrics.loc.lloc
old: 15.0
new: 0.0
path: .spaces[0].metrics.loc.sloc
old: 42.0
new: 9.0
path: .spaces[0].metrics.loc.ploc
old: 28.0
new: 8.0
path: .spaces[0].metrics.loc.blank
old: 6.0
new: 1.0
path: .spaces[0].metrics.loc.cloc
old: 8.0
new: 0.0
path: .spaces[0].metrics.nargs.sum
old: 4.0
new: 0.0
path: .spaces[0].metrics.nargs.average
old: 0.4444444444444444
new: null
path: .spaces[0].metrics.halstead.level
old: 0.03176341730558598
new: 0.3333333333333333
path: .spaces[0].metrics.halstead.vocabulary
old: 51.0
new: 14.0
path: .spaces[0].metrics.halstead.bugs
old: 0.4036898153241196
new: 0.011611549046499223
path: .spaces[0].metrics.halstead.n2
old: 29.0
new: 8.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 238.9889444687201
new: 39.50977500432694
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.0126650189352546
new: 2.194987500240386
path: .spaces[0].metrics.halstead.time
old: 2341.429393838916
new: 11.422064766172811
path: .spaces[0].metrics.halstead.volume
old: 1338.6923807052729
new: 68.53238859703687
path: .spaces[0].metrics.halstead.N1
old: 153.0
new: 10.0
path: .spaces[0].metrics.halstead.N2
old: 83.0
new: 8.0
path: .spaces[0].metrics.halstead.effort
old: 42145.72908910049
new: 205.59716579111063
path: .spaces[0].metrics.halstead.difficulty
old: 31.482758620689655
new: 3.0
path: .spaces[0].metrics.halstead.n1
old: 22.0
new: 6.0
path: .spaces[0].metrics.halstead.length
old: 236.0
new: 18.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 41.0834032523398
new: 65.5222036587288
path: .spaces[0].metrics.mi.mi_original
old: 70.25261956150106
new: 112.04296825642624
path: .spaces[0].metrics.mi.mi_sei
old: 58.162790739875376
new: 86.55390183443971
path: .spaces[0].metrics.cyclomatic.average
old: 1.0909090909090908
new: 1.0
path: .spaces[0].metrics.cyclomatic.sum
old: 12.0
new: 6.0
path: .spaces[0].metrics.nom.total
old: 9.0
new: 0.0
path: .spaces[0].metrics.nom.functions
old: 9.0
new: 0.0
path: .spaces[0].metrics.nexits.sum
old: 7.0
new: 0.0
path: .spaces[0].metrics.nexits.average
old: 0.7777777777777778
new: null
path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[0].metrics.cognitive.average
old: 0.1111111111111111
new: null

### Code

    namespace mozilla {
    class CycleCollectedJSContext;
    class SynchronizedEventQueue;
    class ThreadEventQueue;
    class ThreadEventTarget;

    template
    class Array;
    }  // namespace mozilla

## Minimal test - lines (46, 46)

path: .spaces[3].metrics.mi.mi_visual_studio
old: 48.86899213322998
new: null
path: .spaces[3].metrics.mi.mi_sei
old: 45.57210697640657
new: null
path: .spaces[3].metrics.mi.mi_original
old: 83.56597654782327
new: null
path: .spaces[3].metrics.nexits.average
old: 0.0
new: null
path: .spaces[3].metrics.cyclomatic.average
old: 7.0
new: 1.0
path: .spaces[3].metrics.cyclomatic.sum
old: 7.0
new: 1.0
path: .spaces[3].metrics.loc.lloc
old: 13.0
new: 0.0
path: .spaces[3].metrics.loc.sloc
old: 28.0
new: 1.0
path: .spaces[3].metrics.loc.ploc
old: 28.0
new: 1.0
path: .spaces[3].metrics.nargs.average
old: 0.0
new: null
path: .spaces[3].metrics.cognitive.average
old: 14.0
new: null
path: .spaces[3].metrics.cognitive.sum
old: 14.0
new: 0.0
path: .spaces[3].metrics.nom.total
old: 1.0
new: 0.0
path: .spaces[3].metrics.nom.functions
old: 1.0
new: 0.0
path: .spaces[3].metrics.halstead.bugs
old: 0.1545675913368859
new: 0.0
path: .spaces[3].metrics.halstead.vocabulary
old: 27.0
new: 1.0
path: .spaces[3].metrics.halstead.n1
old: 15.0
new: 0.0
path: .spaces[3].metrics.halstead.effort
old: 9985.263754543284
new: 0.0
path: .spaces[3].metrics.halstead.N2
old: 35.0
new: 1.0
path: .spaces[3].metrics.halstead.volume
old: 456.46920020769295
new: 0.0
path: .spaces[3].metrics.halstead.estimated_program_length
old: 101.62290894278166
new: null
path: .spaces[3].metrics.halstead.difficulty
old: 21.875
new: 0.0
path: .spaces[3].metrics.halstead.length
old: 96.0
new: 1.0
path: .spaces[3].metrics.halstead.level
old: 0.045714285714285714
new: null
path: .spaces[3].metrics.halstead.time
old: 554.7368752524046
new: 0.0
path: .spaces[3].metrics.halstead.n2
old: 12.0
new: 1.0
path: .spaces[3].metrics.halstead.N1
old: 61.0
new: 0.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.0585719681539756
new: null

### Code

    class nsThreadEnumerator;

## Minimal test - lines (381, 397)

path: .spaces[7].metrics.halstead.purity_ratio
old: 2.0294069451656003
new: 1.6324952803335864
path: .spaces[7].metrics.halstead.bugs
old: 0.017323846317002522
new: 0.0728653313804455
path: .spaces[7].metrics.halstead.difficulty
old: 5.625
new: 13.3
path: .spaces[7].metrics.halstead.estimated_program_length
old: 36.529325012980806
new: 86.52224985768008
path: .spaces[7].metrics.halstead.vocabulary
old: 13.0
new: 24.0
path: .spaces[7].metrics.halstead.level
old: 0.17777777777777778
new: 0.07518796992481203
path: .spaces[7].metrics.halstead.N1
old: 13.0
new: 34.0
path: .spaces[7].metrics.halstead.effort
old: 374.6695214617856
new: 3231.940066758343
path: .spaces[7].metrics.halstead.n1
old: 9.0
new: 14.0
path: .spaces[7].metrics.halstead.n2
old: 4.0
new: 10.0
path: .spaces[7].metrics.halstead.length
old: 18.0
new: 53.0
path: .spaces[7].metrics.halstead.time
old: 20.814973414543644
new: 179.55222593101905
path: .spaces[7].metrics.halstead.N2
old: 5.0
new: 19.0
path: .spaces[7].metrics.halstead.volume
old: 66.60791492653966
new: 243.00301253822127
path: .spaces[7].metrics.nom.total
old: 1.0
new: 3.0
path: .spaces[7].metrics.nom.functions
old: 1.0
new: 3.0
path: .spaces[7].metrics.loc.ploc
old: 5.0
new: 15.0
path: .spaces[7].metrics.loc.sloc
old: 5.0
new: 17.0
path: .spaces[7].metrics.loc.blank
old: 0.0
new: 2.0
path: .spaces[7].metrics.nargs.average
old: 0.0
new: 0.6666666666666666
path: .spaces[7].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[7].metrics.mi.mi_visual_studio
old: 71.71533571332904
new: 55.64792974004653
path: .spaces[7].metrics.mi.mi_original
old: 122.63322406979267
new: 95.15795985547956
path: .spaces[7].metrics.mi.mi_sei
old: 101.42513194051114
new: 62.193983949025466
path: .spaces[7].metrics.nexits.average
old: 1.0
new: 0.3333333333333333
path: .spaces[7].metrics.cyclomatic.sum
old: 2.0
new: 6.0
path: .spaces[7].metrics.cyclomatic.average
old: 2.0
new: 1.5

### Code

    class MOZ_RAII nsLocalExecutionGuard final {
     public:
      MOZ_IMPLICIT nsLocalExecutionGuard(
          nsLocalExecutionRecord&& aLocalExecutionRecord);
      nsLocalExecutionGuard(const nsLocalExecutionGuard&) = delete;
      nsLocalExecutionGuard(nsLocalExecutionGuard&&) = delete;
      ~nsLocalExecutionGuard();

      nsCOMPtr GetEventTarget() const {
        return mLocalEventTarget;
      }

     private:
      mozilla::SynchronizedEventQueue& mEventQueueStack;
      nsCOMPtr mLocalEventTarget;
      bool& mLocalExecutionFlag;
    };

## Minimal test - lines (419, 428)

path: .spaces[9].metrics.nom.functions
old: 1.0
new: 3.0
path: .spaces[9].metrics.nom.total
old: 1.0
new: 3.0
path: .spaces[9].metrics.cyclomatic.sum
old: 1.0
new: 4.0
path: .spaces[9].metrics.nexits.average
old: 1.0
new: 0.6666666666666666
path: .spaces[9].metrics.nexits.sum
old: 1.0
new: 2.0
path: .spaces[9].metrics.mi.mi_sei
old: 106.5105871671506
new: 78.38067332474107
path: .spaces[9].metrics.mi.mi_visual_studio
old: 73.81799366694318
new: 62.29173699169525
path: .spaces[9].metrics.mi.mi_original
old: 126.22876917047284
new: 106.51887025579887
path: .spaces[9].metrics.halstead.estimated_program_length
old: 21.651484454403228
new: 48.18080946738404
path: .spaces[9].metrics.halstead.time
old: 6.780117364196057
new: 61.285714285714285
path: .spaces[9].metrics.halstead.effort
old: 122.04211255552904
new: 1103.142857142857
path: .spaces[9].metrics.halstead.volume
old: 34.86917501586544
new: 156.0
path: .spaces[9].metrics.halstead.bugs
old: 0.008201347674923783
new: 0.03558769966684976
path: .spaces[9].metrics.halstead.length
old: 11.0
new: 39.0
path: .spaces[9].metrics.halstead.vocabulary
old: 9.0
new: 16.0
path: .spaces[9].metrics.halstead.N1
old: 9.0
new: 28.0
path: .spaces[9].metrics.halstead.n2
old: 2.0
new: 7.0
path: .spaces[9].metrics.halstead.difficulty
old: 3.5
new: 7.071428571428571
path: .spaces[9].metrics.halstead.N2
old: 2.0
new: 11.0
path: .spaces[9].metrics.halstead.purity_ratio
old: 1.9683167685821117
new: 1.235405370958565
path: .spaces[9].metrics.halstead.n1
old: 7.0
new: 9.0
path: .spaces[9].metrics.halstead.level
old: 0.2857142857142857
new: 0.1414141414141414
path: .spaces[9].metrics.loc.blank
old: 0.0
new: 2.0
path: .spaces[9].metrics.loc.sloc
old: 5.0
new: 10.0
path: .spaces[9].metrics.loc.ploc
old: 5.0
new: 8.0
path: .spaces[9].metrics.loc.lloc
old: 1.0
new: 2.0

### Code

    class MOZ_STACK_CLASS nsThreadEnumerator final {
     public:
      nsThreadEnumerator() = default;

      auto begin() { return nsThread::ThreadList().begin(); }
      auto end() { return nsThread::ThreadList().end(); }

     private:
      mozilla::OffTheBooksMutexAutoLock mMal{nsThread::ThreadListMutex()};
    };

## Minimal test - lines (356, 365)

path: .spaces[6].metrics.loc.sloc
old: 5.0
new: 10.0
path: .spaces[6].metrics.loc.ploc
old: 5.0
new: 10.0
path: .spaces[6].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[6].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[6].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[6].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[6].metrics.cyclomatic.average
old: 4.0
new: 1.0
path: .spaces[6].metrics.cyclomatic.sum
old: 4.0
new: 1.0
path: .spaces[6].metrics.nargs.sum
old: 0.0
new: 3.0
path: .spaces[6].metrics.nargs.average
old: 0.0
new: 3.0
path: .spaces[6].metrics.mi.mi_sei
old: 98.3996514058146
new: 76.64697117511061
path: .spaces[6].metrics.mi.mi_visual_studio
old: 70.40641431016748
new: 61.7127999674067
path: .spaces[6].metrics.mi.mi_original
old: 120.39496847038636
new: 105.52888794426546
path: .spaces[6].metrics.halstead.N1
old: 19.0
new: 26.0
path: .spaces[6].metrics.halstead.n2
old: 5.0
new: 14.0
path: .spaces[6].metrics.halstead.time
old: 26.04593730405679
new: 89.78884897245597
path: .spaces[6].metrics.halstead.volume
old: 93.76537429460444
new: 215.49323753389433
path: .spaces[6].metrics.halstead.difficulty
old: 5.0
new: 7.5
path: .spaces[6].metrics.halstead.estimated_program_length
old: 44.82892142331043
new: 86.52224985768008
path: .spaces[6].metrics.halstead.length
old: 24.0
new: 47.0
path: .spaces[6].metrics.halstead.purity_ratio
old: 1.867871725971268
new: 1.8408989331421293
path: .spaces[6].metrics.halstead.level
old: 0.2
new: 0.13333333333333333
path: .spaces[6].metrics.halstead.bugs
old: 0.020116561188551544
new: 0.045906623561399594
path: .spaces[6].metrics.halstead.effort
old: 468.8268714730222
new: 1616.1992815042074
path: .spaces[6].metrics.halstead.vocabulary
old: 15.0
new: 24.0
path: .spaces[6].metrics.halstead.N2
old: 5.0
new: 21.0

### Code

      nsThreadShutdownContext(NotNull aTerminatingThread,
                              NotNull aJoiningThread,
                              bool aAwaitingShutdownAck)
          : mTerminatingThread(aTerminatingThread),
            mTerminatingPRThread(aTerminatingThread->GetPRThread()),
            mJoiningThread(aJoiningThread),
            mAwaitingShutdownAck(aAwaitingShutdownAck),
            mIsMainThreadJoining(NS_IsMainThread()) {
        MOZ_COUNT_CTOR(nsThreadShutdownContext);
      }

## Minimal test - lines (44, 44)

path: .spaces[1].metrics.halstead.estimated_program_length
old: 174.1007298075732
new: null
path: .spaces[1].metrics.halstead.length
old: 102.0
new: 1.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.706869900074247
new: null
path: .spaces[1].metrics.halstead.effort
old: 3253.2561933341767
new: 0.0
path: .spaces[1].metrics.halstead.n2
old: 29.0
new: 1.0
path: .spaces[1].metrics.halstead.N2
old: 35.0
new: 1.0
path: .spaces[1].metrics.halstead.level
old: 0.16571428571428573
new: null
path: .spaces[1].metrics.halstead.n1
old: 10.0
new: 0.0
path: .spaces[1].metrics.halstead.volume
old: 539.1110263239493
new: 0.0
path: .spaces[1].metrics.halstead.N1
old: 67.0
new: 0.0
path: .spaces[1].metrics.halstead.difficulty
old: 6.0344827586206895
new: 0.0
path: .spaces[1].metrics.halstead.time
old: 180.73645518523205
new: 0.0
path: .spaces[1].metrics.halstead.bugs
old: 0.0731853670718304
new: 0.0
path: .spaces[1].metrics.halstead.vocabulary
old: 39.0
new: 1.0
path: .spaces[1].metrics.mi.mi_visual_studio
old: 48.516380370002445
new: null
path: .spaces[1].metrics.mi.mi_sei
old: 67.61808371481831
new: null
path: .spaces[1].metrics.mi.mi_original
old: 82.96301043270418
new: null
path: .spaces[1].metrics.loc.sloc
old: 30.0
new: 1.0
path: .spaces[1].metrics.loc.cloc
old: 3.0
new: 0.0
path: .spaces[1].metrics.loc.blank
old: 1.0
new: 0.0
path: .spaces[1].metrics.loc.ploc
old: 26.0
new: 1.0

### Code

    class nsIRunnable;

## Minimal test - lines (52, 150)

path: .spaces[4].metrics.cognitive.sum
old: 12.0
new: 0.0
path: .spaces[4].metrics.cognitive.average
old: 12.0
new: 0.0
path: .spaces[4].metrics.halstead.N1
old: 87.0
new: 108.0
path: .spaces[4].metrics.halstead.estimated_program_length
old: 173.52879329056708
new: 244.720658986051
path: .spaces[4].metrics.halstead.volume
old: 734.426077094456
new: 1026.7089868968403
path: .spaces[4].metrics.halstead.n1
old: 23.0
new: 15.0
path: .spaces[4].metrics.halstead.N2
old: 51.0
new: 73.0
path: .spaces[4].metrics.halstead.difficulty
old: 34.5
new: 15.208333333333334
path: .spaces[4].metrics.halstead.time
old: 1407.6499810977073
new: 867.4740282808954
path: .spaces[4].metrics.halstead.n2
old: 17.0
new: 36.0
path: .spaces[4].metrics.halstead.bugs
old: 0.2875567288441201
new: 0.2082402785775889
path: .spaces[4].metrics.halstead.length
old: 138.0
new: 181.0
path: .spaces[4].metrics.halstead.effort
old: 25337.69965975873
new: 15614.532509056116
path: .spaces[4].metrics.halstead.level
old: 0.028985507246376812
new: 0.06575342465753424
path: .spaces[4].metrics.halstead.vocabulary
old: 40.0
new: 51.0
path: .spaces[4].metrics.halstead.purity_ratio
old: 1.2574550238446889
new: 1.352047839701939
path: .spaces[4].metrics.cyclomatic.average
old: 8.0
new: 1.2
path: .spaces[4].metrics.cyclomatic.sum
old: 8.0
new: 12.0
path: .spaces[4].metrics.nexits.average
old: 3.0
new: 0.42857142857142855
path: .spaces[4].metrics.nom.total
old: 1.0
new: 7.0
path: .spaces[4].metrics.nom.functions
old: 1.0
new: 7.0
path: .spaces[4].metrics.mi.mi_sei
old: 57.31161348961218
new: 49.41042004519289
path: .spaces[4].metrics.mi.mi_visual_studio
old: 47.63285272975375
new: 33.76705650822349
path: .spaces[4].metrics.mi.mi_original
old: 81.45217816787891
new: 57.741666629062166
path: .spaces[4].metrics.loc.sloc
old: 27.0
new: 99.0
path: .spaces[4].metrics.loc.blank
old: 0.0
new: 16.0
path: .spaces[4].metrics.loc.lloc
old: 14.0
new: 3.0
path: .spaces[4].metrics.loc.cloc
old: 1.0
new: 37.0
path: .spaces[4].metrics.loc.ploc
old: 27.0
new: 46.0
path: .spaces[4].metrics.nargs.average
old: 0.0
new: 1.0
path: .spaces[4].metrics.nargs.sum
old: 0.0
new: 7.0

### Code

    namespace mozilla {
    class PerformanceCounterState {
     public:
      explicit PerformanceCounterState(const uint32_t& aNestedEventLoopDepthRef,
                                       bool aIsMainThread)
          : mNestedEventLoopDepth(aNestedEventLoopDepthRef),
            mIsMainThread(aIsMainThread),
            // Does it really make sense to initialize these to "now" when we
            // haven't run any tasks?
            mLastLongTaskEnd(TimeStamp::Now()),
            mLastLongNonIdleTaskEnd(mLastLongTaskEnd) {}

      class Snapshot {
       public:
        Snapshot(uint32_t aOldEventLoopDepth, PerformanceCounter* aCounter,
                 bool aOldIsIdleRunnable)
            : mOldEventLoopDepth(aOldEventLoopDepth),
              mOldPerformanceCounter(aCounter),
              mOldIsIdleRunnable(aOldIsIdleRunnable) {}

        Snapshot(const Snapshot&) = default;
        Snapshot(Snapshot&&) = default;

       private:
        friend class PerformanceCounterState;

        const uint32_t mOldEventLoopDepth;
        // Non-const so we can move out of it and avoid the extra refcounting.
        RefPtr mOldPerformanceCounter;
        const bool mOldIsIdleRunnable;
      };

      // Notification that a runnable is about to run.  This captures a snapshot of
      // our current state before we reset to prepare for the new runnable.  This
      // muast be called after mNestedEventLoopDepth has been incremented for the
      // runnable execution.  The performance counter passed in should be the one
      // for the relevant runnable and may be null.  aIsIdleRunnable should be true
      // if and only if the runnable has idle priority.
      Snapshot RunnableWillRun(PerformanceCounter* Counter, TimeStamp aNow,
                               bool aIsIdleRunnable);

      // Notification that a runnable finished executing.  This must be passed the
      // snapshot that RunnableWillRun returned for the same runnable.  This must be
      // called before mNestedEventLoopDepth is decremented after the runnable's
      // execution.
      void RunnableDidRun(Snapshot&& aSnapshot);

      const TimeStamp& LastLongTaskEnd() const { return mLastLongTaskEnd; }
      const TimeStamp& LastLongNonIdleTaskEnd() const {
        return mLastLongNonIdleTaskEnd;
      }

     private:
      // Called to report accumulated time, as needed, when we're about to run a
      // runnable or just finished running one.
      void MaybeReportAccumulatedTime(TimeStamp aNow);

      // Whether the runnable we are about to run, or just ran, is a nested
      // runnable, in the sense that there is some other runnable up the stack
      // spinning the event loop.  This must be called before we change our
      // mCurrentEventLoopDepth (when about to run a new event) or after we restore
      // it (after we ran one).
      bool IsNestedRunnable() const {
        return mNestedEventLoopDepth > mCurrentEventLoopDepth;
      }

      // The event loop depth of the currently running runnable.  Set to the max
      // value of a uint32_t when there is no runnable running, so when starting to
      // run a toplevel (not nested) runnable IsNestedRunnable() will test false.
      uint32_t mCurrentEventLoopDepth = std::numeric_limits::max();

      // A reference to the nsThread's mNestedEventLoopDepth, so we can
      // see what it is right now.
      const uint32_t& mNestedEventLoopDepth;

      // A boolean that indicates whether the currently running runnable is an idle
      // runnable.  Only has a useful value between RunnableWillRun() being called
      // and RunnableDidRun() returning.
      bool mCurrentRunnableIsIdleRunnable = false;

      // Whether we're attached to the mainthread nsThread.
      const bool mIsMainThread;

      // The timestamp from which time to be accounted for should be measured.  This
      // can be the start of a runnable running or the end of a nested runnable
      // running.
      TimeStamp mCurrentTimeSliceStart;

      // Information about when long tasks last ended.
      TimeStamp mLastLongTaskEnd;
      TimeStamp mLastLongNonIdleTaskEnd;

      // The performance counter to use for accumulating the runtime of
      // the currently running event.  May be null, in which case the
      // event's running time should not be accounted to any performance
      // counters.
      RefPtr mCurrentPerformanceCounter;
    };
    }  // namespace mozilla

## Minimal test - lines (153, 353)

path: .spaces[5].metrics.loc.lloc
old: 26.0
new: 12.0
path: .spaces[5].metrics.loc.ploc
old: 61.0
new: 108.0
path: .spaces[5].metrics.loc.cloc
old: 7.0
new: 38.0
path: .spaces[5].metrics.loc.sloc
old: 71.0
new: 201.0
path: .spaces[5].metrics.loc.blank
old: 3.0
new: 55.0
path: .spaces[5].metrics.cyclomatic.sum
old: 21.0
new: 16.0
path: .spaces[5].metrics.cyclomatic.average
old: 21.0
new: 1.0
path: .spaces[5].metrics.nexits.average
old: 6.0
new: 0.8
path: .spaces[5].metrics.nexits.sum
old: 6.0
new: 8.0
path: .spaces[5].metrics.nargs.average
old: 1.0
new: 0.2
path: .spaces[5].metrics.nargs.sum
old: 1.0
new: 2.0
path: .spaces[5].metrics.nom.functions
old: 1.0
new: 10.0
path: .spaces[5].metrics.nom.total
old: 1.0
new: 10.0
path: .spaces[5].metrics.cognitive.average
old: 12.0
new: 0.0
path: .spaces[5].metrics.cognitive.sum
old: 12.0
new: 0.0
path: .spaces[5].metrics.halstead.estimated_program_length
old: 412.51927008770485
new: 1019.3701056018622
path: .spaces[5].metrics.halstead.volume
old: 2412.712818167537
new: 3575.7719412265888
path: .spaces[5].metrics.halstead.vocabulary
old: 77.0
new: 151.0
path: .spaces[5].metrics.halstead.bugs
old: 0.6457015600826843
new: 0.39156016216977824
path: .spaces[5].metrics.halstead.level
old: 0.028299319727891157
new: 0.08881578947368421
path: .spaces[5].metrics.halstead.length
old: 385.0
new: 494.0
path: .spaces[5].metrics.halstead.effort
old: 85256.91929582402
new: 40260.54333825492
path: .spaces[5].metrics.halstead.N1
old: 238.0
new: 304.0
path: .spaces[5].metrics.halstead.N2
old: 147.0
new: 190.0
path: .spaces[5].metrics.halstead.n1
old: 25.0
new: 16.0
path: .spaces[5].metrics.halstead.purity_ratio
old: 1.0714786236044282
new: 2.0635022380604497
path: .spaces[5].metrics.halstead.n2
old: 52.0
new: 135.0
path: .spaces[5].metrics.halstead.difficulty
old: 35.33653846153846
new: 11.25925925925926
path: .spaces[5].metrics.halstead.time
old: 4736.4955164346675
new: 2236.6968521252734
path: .spaces[5].metrics.mi.mi_sei
old: 31.488507717288112
new: 13.181982567046989
path: .spaces[5].metrics.mi.mi_visual_studio
old: 33.10780664478053
new: 22.725375099638217
path: .spaces[5].metrics.mi.mi_original
old: 56.614349362574714
new: 38.86039142038135

### Code

    class nsThread : public nsIThreadInternal,
                     public nsISupportsPriority,
                     public nsIDirectTaskDispatcher,
                     private mozilla::LinkedListElement {
      friend mozilla::LinkedList;
      friend mozilla::LinkedListElement;

     public:
      NS_DECL_THREADSAFE_ISUPPORTS
      NS_DECL_NSIEVENTTARGET_FULL
      NS_DECL_NSITHREAD
      NS_DECL_NSITHREADINTERNAL
      NS_DECL_NSISUPPORTSPRIORITY
      NS_DECL_NSIDIRECTTASKDISPATCHER

      enum MainThreadFlag { MAIN_THREAD, NOT_MAIN_THREAD };

      nsThread(NotNull aQueue,
               MainThreadFlag aMainThread, uint32_t aStackSize);

     private:
      nsThread();

     public:
      // Initialize this as a named wrapper for a new PRThread.
      nsresult Init(const nsACString& aName);

      // Initialize this as a wrapper for the current PRThread.
      nsresult InitCurrentThread();

     private:
      // Initializes the mThreadId and stack base/size members, and adds the thread
      // to the ThreadList().
      void InitCommon();

     public:
      // The PRThread corresponding to this thread.
      PRThread* GetPRThread() const { return mThread; }

      const void* StackBase() const { return mStackBase; }
      size_t StackSize() const { return mStackSize; }

      uint32_t ThreadId() const { return mThreadId; }

      // If this flag is true, then the nsThread was created using
      // nsIThreadManager::NewThread.
      bool ShutdownRequired() { return mShutdownRequired; }

      // Lets GetRunningEventDelay() determine if the pool this is part
      // of has an unstarted thread
      void SetPoolThreadFreePtr(mozilla::Atomic* aPtr) {
        mIsAPoolThreadFree = aPtr;
      }

      void SetScriptObserver(mozilla::CycleCollectedJSContext* aScriptObserver);

      uint32_t RecursionDepth() const;

      void ShutdownComplete(NotNull aContext);

      void WaitForAllAsynchronousShutdowns();

      static const uint32_t kRunnableNameBufSize = 1000;
      static mozilla::Array sMainThreadRunnableName;

      mozilla::SynchronizedEventQueue* EventQueue() { return mEvents.get(); }

      bool ShuttingDown() const { return mShutdownContext != nullptr; }

      static bool GetLabeledRunnableName(nsIRunnable* aEvent, nsACString& aName,
                                         mozilla::EventQueuePriority aPriority);

      virtual mozilla::PerformanceCounter* GetPerformanceCounter(
          nsIRunnable* aEvent) const;

      static mozilla::PerformanceCounter* GetPerformanceCounterBase(
          nsIRunnable* aEvent);

      size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;

      // Returns the size of this object, its PRThread, and its shutdown contexts,
      // but excluding its event queues.
      size_t ShallowSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;

      size_t SizeOfEventQueues(mozilla::MallocSizeOf aMallocSizeOf) const;

      static nsThreadEnumerator Enumerate();

      // When entering local execution mode a new event queue is created and used as
      // an event source. This queue is only accessible through an
      // nsLocalExecutionGuard constructed from the nsLocalExecutionRecord returned
      // by this function, effectively restricting the events that get run while in
      // local execution mode to those dispatched by the owner of the guard object.
      //
      // Local execution is not nestable. When the nsLocalExecutionGuard is
      // destructed, the thread exits the local execution mode.
      //
      // Note that code run in local execution mode is not considered a task in the
      // spec sense. Events from the local queue are considered part of the
      // enclosing task and as such do not trigger profiling hooks, observer
      // notifications, etc.
      nsLocalExecutionRecord EnterLocalExecution();

      void SetUseHangMonitor(bool aValue) {
        MOZ_ASSERT(IsOnCurrentThread());
        mUseHangMonitor = aValue;
      }

     private:
      void DoMainThreadSpecificProcessing() const;

     protected:
      friend class nsThreadShutdownEvent;

      friend class nsThreadEnumerator;

      virtual ~nsThread();

      static void ThreadFunc(void* aArg);

      // Helper
      already_AddRefed GetObserver() {
        nsIThreadObserver* obs;
        nsThread::GetObserver(&obs);
        return already_AddRefed(obs);
      }

      struct nsThreadShutdownContext* ShutdownInternal(bool aSync);

      friend class nsThreadManager;
      friend class nsThreadPool;

      static mozilla::OffTheBooksMutex& ThreadListMutex();
      static mozilla::LinkedList& ThreadList();
      static void ClearThreadList();

      void AddToThreadList();
      void MaybeRemoveFromThreadList();

      // Whether or not these members have a value determines whether the nsThread
      // is treated as a full XPCOM thread or as a thin wrapper.
      //
      // For full nsThreads, they will always contain valid pointers. For thin
      // wrappers around non-XPCOM threads, they will be null, and event dispatch
      // methods which rely on them will fail (and assert) if called.
      RefPtr mEvents;
      RefPtr mEventTarget;

      // The shutdown contexts for any other threads we've asked to shut down.
      using ShutdownContexts =
          nsTArray>;

      // Helper for finding a ShutdownContext in the contexts array.
      struct ShutdownContextsComp {
        bool Equals(const ShutdownContexts::elem_type& a,
                    const ShutdownContexts::elem_type::Pointer b) const;
      };

      ShutdownContexts mRequestedShutdownContexts;
      // The shutdown context for ourselves.
      struct nsThreadShutdownContext* mShutdownContext;

      mozilla::CycleCollectedJSContext* mScriptObserver;

      void* mStackBase = nullptr;
      uint32_t mStackSize;
      uint32_t mThreadId;

      uint32_t mNestedEventLoopDepth;

      mozilla::Atomic mShutdownRequired;

      int8_t mPriority;

      const bool mIsMainThread;
      bool mUseHangMonitor;
      mozilla::Atomic* mIsAPoolThreadFree;

      // Set to true if this thread creates a JSRuntime.
      bool mCanInvokeJS;

      bool mHasTLSEntry = false;

      // The time the currently running event spent in event queues, and
      // when it started running.  If no event is running, they are
      // TimeDuration() & TimeStamp().
      mozilla::TimeDuration mLastEventDelay;
      mozilla::TimeStamp mLastEventStart;

    #ifdef EARLY_BETA_OR_EARLIER
      nsCString mNameForWakeupTelemetry;
      mozilla::TimeStamp mLastWakeupCheckTime;
      uint32_t mWakeupCount = 0;
    #endif

      mozilla::PerformanceCounterState mPerformanceCounterState;

      bool mIsInLocalExecutionMode = false;

      mozilla::SimpleTaskQueue mDirectTasks;
    };

## Minimal test - lines (399, 417)

path: .spaces[8].metrics.cyclomatic.average
old: 1.0
new: 1.25
path: .spaces[8].metrics.cyclomatic.sum
old: 1.0
new: 5.0
path: .spaces[8].metrics.nargs.average
old: 0.0
new: 1.3333333333333333
path: .spaces[8].metrics.nargs.sum
old: 0.0
new: 4.0
path: .spaces[8].metrics.halstead.n1
old: 8.0
new: 12.0
path: .spaces[8].metrics.halstead.level
old: 0.25
new: 0.07407407407407407
path: .spaces[8].metrics.halstead.effort
old: 215.09775004326937
new: 2975.647493329949
path: .spaces[8].metrics.halstead.length
old: 15.0
new: 51.0
path: .spaces[8].metrics.halstead.bugs
old: 0.011966560027609794
new: 0.06896039383536252
path: .spaces[8].metrics.halstead.difficulty
old: 4.0
new: 13.5
path: .spaces[8].metrics.halstead.N1
old: 11.0
new: 33.0
path: .spaces[8].metrics.halstead.N2
old: 4.0
new: 18.0
path: .spaces[8].metrics.halstead.volume
old: 53.77443751081734
new: 220.4183328392555
path: .spaces[8].metrics.halstead.vocabulary
old: 12.0
new: 20.0
path: .spaces[8].metrics.halstead.purity_ratio
old: 2.1333333333333333
new: 1.3141088236990957
path: .spaces[8].metrics.halstead.time
old: 11.949875002403854
new: 165.31374962944162
path: .spaces[8].metrics.halstead.estimated_program_length
old: 32.0
new: 67.01955000865388
path: .spaces[8].metrics.halstead.n2
old: 4.0
new: 8.0
path: .spaces[8].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[8].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[8].metrics.nom.functions
old: 1.0
new: 3.0
path: .spaces[8].metrics.nom.total
old: 1.0
new: 3.0
path: .spaces[8].metrics.loc.ploc
old: 5.0
new: 15.0
path: .spaces[8].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[8].metrics.loc.sloc
old: 5.0
new: 19.0
path: .spaces[8].metrics.loc.lloc
old: 1.0
new: 0.0
path: .spaces[8].metrics.mi.mi_sei
old: 103.26075201909244
new: 60.556252140581904
path: .spaces[8].metrics.mi.mi_visual_studio
old: 72.50067549725833
new: 55.02534901661683
path: .spaces[8].metrics.mi.mi_original
old: 123.97615510031176
new: 94.0933468184148

### Code

    class MOZ_TEMPORARY_CLASS nsLocalExecutionRecord final {
     private:
      friend class nsThread;
      friend class nsLocalExecutionGuard;

      nsLocalExecutionRecord(mozilla::SynchronizedEventQueue& aEventQueueStack,
                             bool& aLocalExecutionFlag)
          : mEventQueueStack(aEventQueueStack),
            mLocalExecutionFlag(aLocalExecutionFlag) {}

      nsLocalExecutionRecord(nsLocalExecutionRecord&&) = default;

     public:
      nsLocalExecutionRecord(const nsLocalExecutionRecord&) = delete;

     private:
      mozilla::SynchronizedEventQueue& mEventQueueStack;
      bool& mLocalExecutionFlag;
    };

## Minimal test - lines (45, 45)

path: .spaces[2].metrics.mi.mi_original
old: 57.21012307619431
new: null
path: .spaces[2].metrics.mi.mi_sei
old: 34.717104882949556
new: null
path: .spaces[2].metrics.mi.mi_visual_studio
old: 33.45621232525983
new: null
path: .spaces[2].metrics.cyclomatic.sum
old: 25.0
new: 1.0
path: .spaces[2].metrics.cyclomatic.average
old: 25.0
new: 1.0
path: .spaces[2].metrics.nexits.average
old: 1.0
new: null
path: .spaces[2].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[2].metrics.nom.functions
old: 1.0
new: 0.0
path: .spaces[2].metrics.nom.total
old: 1.0
new: 0.0
path: .spaces[2].metrics.loc.cloc
old: 8.0
new: 0.0
path: .spaces[2].metrics.loc.ploc
old: 55.0
new: 1.0
path: .spaces[2].metrics.loc.blank
old: 5.0
new: 0.0
path: .spaces[2].metrics.loc.lloc
old: 25.0
new: 0.0
path: .spaces[2].metrics.loc.sloc
old: 68.0
new: 1.0
path: .spaces[2].metrics.cognitive.sum
old: 23.0
new: 0.0
path: .spaces[2].metrics.cognitive.average
old: 23.0
new: null
path: .spaces[2].metrics.nargs.sum
old: 2.0
new: 0.0
path: .spaces[2].metrics.nargs.average
old: 2.0
new: null
path: .spaces[2].metrics.halstead.n2
old: 35.0
new: 1.0
path: .spaces[2].metrics.halstead.N1
old: 200.0
new: 0.0
path: .spaces[2].metrics.halstead.difficulty
old: 58.0
new: 0.0
path: .spaces[2].metrics.halstead.n1
old: 28.0
new: 0.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 314.1308434106867
new: null
path: .spaces[2].metrics.halstead.N2
old: 145.0
new: 1.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 0.9105241837990918
new: null
path: .spaces[2].metrics.halstead.time
old: 6644.742848290741
new: 0.0
path: .spaces[2].metrics.halstead.bugs
old: 0.8091813556132159
new: 0.0
path: .spaces[2].metrics.halstead.effort
old: 119605.37126923334
new: 0.0
path: .spaces[2].metrics.halstead.vocabulary
old: 63.0
new: 1.0
path: .spaces[2].metrics.halstead.volume
old: 2062.1615736074714
new: 0.0
path: .spaces[2].metrics.halstead.length
old: 345.0
new: 1.0
path: .spaces[2].metrics.halstead.level
old: 0.017241379310344827
new: null

### Code

    class nsLocalExecutionRecord;