Global Metrics

path: .metrics.loc.cloc
old: 33.0
new: 14.0

path: .metrics.loc.sloc
old: 147.0
new: 111.0

path: .metrics.loc.lloc
old: 48.0
new: 24.0

path: .metrics.loc.blank
old: 12.0
new: 25.0

path: .metrics.loc.ploc
old: 102.0
new: 72.0

path: .metrics.nexits.average
old: 2.3333333333333335
new: 0.375

path: .metrics.nexits.sum
old: 7.0
new: 6.0

path: .metrics.cognitive.sum
old: 51.0
new: 4.0

path: .metrics.cognitive.average
old: 17.0
new: 0.25

path: .metrics.cyclomatic.average
old: 4.666666666666667
new: 1.2

path: .metrics.cyclomatic.sum
old: 28.0
new: 24.0

path: .metrics.nom.functions
old: 3.0
new: 16.0

path: .metrics.nom.total
old: 3.0
new: 16.0

path: .metrics.mi.mi_visual_studio
old: 24.434475708659587
new: 29.388992644632513

path: .metrics.mi.mi_original
old: 41.78295346180789
new: 50.255177422321594

path: .metrics.mi.mi_sei
old: 20.92290670679796
new: 25.38793452300892

path: .metrics.halstead.purity_ratio
old: 0.7240332500883389
new: 0.8394694462854901

path: .metrics.halstead.n1
old: 32.0
new: 19.0

path: .metrics.halstead.N2
old: 201.0
new: 114.0

path: .metrics.halstead.n2
old: 40.0
new: 35.0

path: .metrics.halstead.volume
old: 3177.5113757427907
new: 1784.0151256706752

path: .metrics.halstead.estimated_program_length
old: 372.8771237954945
new: 260.23552834850193

path: .metrics.halstead.vocabulary
old: 72.0
new: 54.0

path: .metrics.halstead.N1
old: 314.0
new: 196.0

path: .metrics.halstead.bugs
old: 1.3420669675018355
new: 0.48326429377850955

path: .metrics.halstead.effort
old: 255471.9146097204
new: 55202.52517432404

path: .metrics.halstead.length
old: 515.0
new: 310.0

path: .metrics.halstead.difficulty
old: 80.4
new: 30.942857142857143

path: .metrics.halstead.time
old: 14192.884144984468
new: 3066.806954129114

path: .metrics.halstead.level
old: 0.01243781094527363
new: 0.032317636195752536

path: .metrics.nargs.sum
old: 12.0
new: 3.0

path: .metrics.nargs.average
old: 4.0
new: 0.1875

Spaces Data

Minimal test - lines (15, 83)

path: .spaces[0].spaces[0].metrics.cognitive.average
old: 10.0
new: 0.4

path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 20.0
new: 4.0

path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 39.87561706590443
new: 36.44172944670708

path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 42.14045137589348
new: 40.89742939918386

path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 68.18730518269658
new: 62.3153573538691

path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.02364864864864865
new: 0.042042042042042045

path: .spaces[0].spaces[0].metrics.halstead.N1
old: 133.0
new: 134.0

path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 45.0
new: 46.0

path: .spaces[0].spaces[0].metrics.halstead.effort
old: 48070.974702615975
new: 27327.428237452354

path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.4406908472386488
new: 0.3024205184725387

path: .spaces[0].spaces[0].metrics.halstead.time
old: 2670.6097057008874
new: 1518.190457636242

path: .spaces[0].spaces[0].metrics.halstead.length
old: 207.0
new: 208.0

path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 42.285714285714285
new: 23.785714285714285

path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 202.27776589566173
new: 209.6645878435745

path: .spaces[0].spaces[0].metrics.halstead.n2
old: 21.0
new: 28.0

path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 0.9771872748582692
new: 1.0080028261710312

path: .spaces[0].spaces[0].metrics.halstead.volume
old: 1136.8135909402426
new: 1148.9008868598587

path: .spaces[0].spaces[0].metrics.halstead.n1
old: 24.0
new: 18.0

path: .spaces[0].spaces[0].metrics.nom.total
old: 2.0
new: 10.0

path: .spaces[0].spaces[0].metrics.nom.functions
old: 2.0
new: 10.0

path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 3.6666666666666665
new: 1.3636363636363635

path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 11.0
new: 15.0

path: .spaces[0].spaces[0].metrics.nexits.sum
old: 3.0
new: 5.0

path: .spaces[0].spaces[0].metrics.nexits.average
old: 1.5
new: 0.5

path: .spaces[0].spaces[0].metrics.nargs.sum
old: 8.0
new: 1.0

path: .spaces[0].spaces[0].metrics.nargs.average
old: 4.0
new: 0.1

path: .spaces[0].spaces[0].metrics.loc.cloc
old: 3.0
new: 8.0

path: .spaces[0].spaces[0].metrics.loc.sloc
old: 51.0
new: 69.0

path: .spaces[0].spaces[0].metrics.loc.ploc
old: 43.0
new: 47.0

path: .spaces[0].spaces[0].metrics.loc.blank
old: 5.0
new: 14.0

path: .spaces[0].spaces[0].metrics.loc.lloc
old: 21.0
new: 18.0

Code

class MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS StaticMonitor {
 public:
  // In debug builds, check that mMutex is initialized for us as we expect by
  // the compiler.  In non-debug builds, don't declare a constructor so that
  // the compiler can see that the constructor is trivial.
#ifdef DEBUG
  StaticMonitor() { MOZ_ASSERT(!mMutex); }
#endif

  void Lock() { Mutex()->Lock(); }

  void Unlock() { Mutex()->Unlock(); }

  void Wait() { CondVar()->Wait(); }
  CVStatus Wait(TimeDuration aDuration) { return CondVar()->Wait(aDuration); }

  void Notify() { CondVar()->Notify(); }
  void NotifyAll() { CondVar()->NotifyAll(); }

  void AssertCurrentThreadOwns() {
#ifdef DEBUG
    Mutex()->AssertCurrentThreadOwns();
#endif
  }

 private:
  OffTheBooksMutex* Mutex() {
    if (mMutex) {
      return mMutex;
    }

    OffTheBooksMutex* mutex = new OffTheBooksMutex("StaticMutex");
    if (!mMutex.compareExchange(nullptr, mutex)) {
      delete mutex;
    }

    return mMutex;
  }

  OffTheBooksCondVar* CondVar() {
    if (mCondVar) {
      return mCondVar;
    }

    OffTheBooksCondVar* condvar =
        new OffTheBooksCondVar(*Mutex(), "StaticCondVar");
    if (!mCondVar.compareExchange(nullptr, condvar)) {
      delete condvar;
    }

    return mCondVar;
  }

  Atomic mMutex;
  Atomic mCondVar;

  // Disallow copy constructor, but only in debug mode.  We only define
  // a default constructor in debug mode (see above); if we declared
  // this constructor always, the compiler wouldn't generate a trivial
  // default constructor for us in non-debug mode.
#ifdef DEBUG
  StaticMonitor(const StaticMonitor& aOther);
#endif

  // Disallow these operators.
  StaticMonitor& operator=(const StaticMonitor& aRhs);
  static void* operator new(size_t) noexcept(true);
  static void operator delete(void*);
};

Minimal test - lines (85, 107)

path: .spaces[0].spaces[1].metrics.cyclomatic.average
old: 15.0
new: 1.0

path: .spaces[0].spaces[1].metrics.cyclomatic.sum
old: 15.0
new: 7.0

path: .spaces[0].spaces[1].metrics.nom.total
old: 1.0
new: 6.0

path: .spaces[0].spaces[1].metrics.nom.functions
old: 1.0
new: 6.0

path: .spaces[0].spaces[1].metrics.loc.sloc
old: 59.0
new: 23.0

path: .spaces[0].spaces[1].metrics.loc.cloc
old: 4.0
new: 0.0

path: .spaces[0].spaces[1].metrics.loc.blank
old: 3.0
new: 5.0

path: .spaces[0].spaces[1].metrics.loc.lloc
old: 27.0
new: 6.0

path: .spaces[0].spaces[1].metrics.loc.ploc
old: 52.0
new: 18.0

path: .spaces[0].spaces[1].metrics.cognitive.average
old: 31.0
new: 0.0

path: .spaces[0].spaces[1].metrics.cognitive.sum
old: 31.0
new: 0.0

path: .spaces[0].spaces[1].metrics.nexits.average
old: 4.0
new: 0.16666666666666666

path: .spaces[0].spaces[1].metrics.nexits.sum
old: 4.0
new: 1.0

path: .spaces[0].spaces[1].metrics.nargs.average
old: 4.0
new: 0.3333333333333333

path: .spaces[0].spaces[1].metrics.nargs.sum
old: 4.0
new: 2.0

path: .spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 269.2118756352258
new: 81.32499728470782

path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.7404778703368656
new: 0.10666308499650824

path: .spaces[0].spaces[1].metrics.halstead.effort
old: 104700.80188977654
new: 5724.045705933682

path: .spaces[0].spaces[1].metrics.halstead.n2
old: 28.0
new: 13.0

path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 0.9033955558229052
new: 0.865159545581998

path: .spaces[0].spaces[1].metrics.halstead.vocabulary
old: 56.0
new: 23.0

path: .spaces[0].spaces[1].metrics.halstead.volume
old: 1730.591766773166
new: 425.2148238693592

path: .spaces[0].spaces[1].metrics.halstead.level
old: 0.01652892561983471
new: 0.07428571428571429

path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 60.5
new: 13.461538461538462

path: .spaces[0].spaces[1].metrics.halstead.length
old: 298.0
new: 94.0

path: .spaces[0].spaces[1].metrics.halstead.n1
old: 28.0
new: 10.0

path: .spaces[0].spaces[1].metrics.halstead.N1
old: 177.0
new: 59.0

path: .spaces[0].spaces[1].metrics.halstead.N2
old: 121.0
new: 35.0

path: .spaces[0].spaces[1].metrics.halstead.time
old: 5816.711216098697
new: 318.0025392185379

path: .spaces[0].spaces[1].metrics.mi.mi_original
old: 62.72155621697999
new: 87.12150225438629

path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 36.67927264150877
new: 50.94824693238965

path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: 35.940785987278275
new: 50.70164628101821

Code

class MOZ_STACK_CLASS StaticMonitorAutoLock {
 public:
  explicit StaticMonitorAutoLock(StaticMonitor& aMonitor)
      : mMonitor(&aMonitor) {
    mMonitor->Lock();
  }

  ~StaticMonitorAutoLock() { mMonitor->Unlock(); }

  void Wait() { mMonitor->Wait(); }
  CVStatus Wait(TimeDuration aDuration) { return mMonitor->Wait(aDuration); }

  void Notify() { mMonitor->Notify(); }
  void NotifyAll() { mMonitor->NotifyAll(); }

 private:
  StaticMonitorAutoLock();
  StaticMonitorAutoLock(const StaticMonitorAutoLock&);
  StaticMonitorAutoLock& operator=(const StaticMonitorAutoLock&);
  static void* operator new(size_t) noexcept(true);

  StaticMonitor* mMonitor;
};

Minimal test - lines (13, 109)

path: .spaces[0].metrics.cyclomatic.average
old: 5.4
new: 1.2105263157894737

path: .spaces[0].metrics.cyclomatic.sum
old: 27.0
new: 23.0

path: .spaces[0].metrics.nargs.average
old: 4.0
new: 0.1875

path: .spaces[0].metrics.nargs.sum
old: 12.0
new: 3.0

path: .spaces[0].metrics.nom.functions
old: 3.0
new: 16.0

path: .spaces[0].metrics.nom.total
old: 3.0
new: 16.0

path: .spaces[0].metrics.loc.ploc
old: 98.0
new: 67.0

path: .spaces[0].metrics.loc.blank
old: 10.0
new: 22.0

path: .spaces[0].metrics.loc.cloc
old: 26.0
new: 8.0

path: .spaces[0].metrics.loc.lloc
old: 48.0
new: 24.0

path: .spaces[0].metrics.loc.sloc
old: 134.0
new: 97.0

path: .spaces[0].metrics.nexits.average
old: 2.3333333333333335
new: 0.375

path: .spaces[0].metrics.nexits.sum
old: 7.0
new: 6.0

path: .spaces[0].metrics.cognitive.sum
old: 51.0
new: 4.0

path: .spaces[0].metrics.cognitive.average
old: 17.0
new: 0.25

path: .spaces[0].metrics.halstead.N1
old: 314.0
new: 196.0

path: .spaces[0].metrics.halstead.n1
old: 32.0
new: 19.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 359.42124551085624
new: 240.71062275542812

path: .spaces[0].metrics.halstead.vocabulary
old: 70.0
new: 51.0

path: .spaces[0].metrics.halstead.time
old: 14534.788190077494
new: 3149.082381253863

path: .spaces[0].metrics.halstead.length
old: 512.0
new: 306.0

path: .spaces[0].metrics.halstead.purity_ratio
old: 0.7019946201383911
new: 0.7866360220765625

path: .spaces[0].metrics.halstead.effort
old: 261626.1874213949
new: 56683.48286256953

path: .spaces[0].metrics.halstead.difficulty
old: 83.36842105263158
new: 32.65625

path: .spaces[0].metrics.halstead.bugs
old: 1.3635347805527236
new: 0.4918693526448436

path: .spaces[0].metrics.halstead.level
old: 0.011994949494949496
new: 0.03062200956937799

path: .spaces[0].metrics.halstead.n2
old: 38.0
new: 32.0

path: .spaces[0].metrics.halstead.volume
old: 3138.192904675823
new: 1735.7621546432774

path: .spaces[0].metrics.halstead.N2
old: 198.0
new: 110.0

path: .spaces[0].metrics.mi.mi_original
old: 43.57770273391675
new: 52.81183238191761

path: .spaces[0].metrics.mi.mi_sei
old: 21.45054263263197
new: 24.350862563779422

path: .spaces[0].metrics.mi.mi_visual_studio
old: 25.48403668650102
new: 30.884112504045387

Code

namespace mozilla {

class MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS StaticMonitor {
 public:
  // In debug builds, check that mMutex is initialized for us as we expect by
  // the compiler.  In non-debug builds, don't declare a constructor so that
  // the compiler can see that the constructor is trivial.
#ifdef DEBUG
  StaticMonitor() { MOZ_ASSERT(!mMutex); }
#endif

  void Lock() { Mutex()->Lock(); }

  void Unlock() { Mutex()->Unlock(); }

  void Wait() { CondVar()->Wait(); }
  CVStatus Wait(TimeDuration aDuration) { return CondVar()->Wait(aDuration); }

  void Notify() { CondVar()->Notify(); }
  void NotifyAll() { CondVar()->NotifyAll(); }

  void AssertCurrentThreadOwns() {
#ifdef DEBUG
    Mutex()->AssertCurrentThreadOwns();
#endif
  }

 private:
  OffTheBooksMutex* Mutex() {
    if (mMutex) {
      return mMutex;
    }

    OffTheBooksMutex* mutex = new OffTheBooksMutex("StaticMutex");
    if (!mMutex.compareExchange(nullptr, mutex)) {
      delete mutex;
    }

    return mMutex;
  }

  OffTheBooksCondVar* CondVar() {
    if (mCondVar) {
      return mCondVar;
    }

    OffTheBooksCondVar* condvar =
        new OffTheBooksCondVar(*Mutex(), "StaticCondVar");
    if (!mCondVar.compareExchange(nullptr, condvar)) {
      delete condvar;
    }

    return mCondVar;
  }

  Atomic mMutex;
  Atomic mCondVar;

  // Disallow copy constructor, but only in debug mode.  We only define
  // a default constructor in debug mode (see above); if we declared
  // this constructor always, the compiler wouldn't generate a trivial
  // default constructor for us in non-debug mode.
#ifdef DEBUG
  StaticMonitor(const StaticMonitor& aOther);
#endif

  // Disallow these operators.
  StaticMonitor& operator=(const StaticMonitor& aRhs);
  static void* operator new(size_t) noexcept(true);
  static void operator delete(void*);
};

class MOZ_STACK_CLASS StaticMonitorAutoLock {
 public:
  explicit StaticMonitorAutoLock(StaticMonitor& aMonitor)
      : mMonitor(&aMonitor) {
    mMonitor->Lock();
  }

  ~StaticMonitorAutoLock() { mMonitor->Unlock(); }

  void Wait() { mMonitor->Wait(); }
  CVStatus Wait(TimeDuration aDuration) { return mMonitor->Wait(aDuration); }

  void Notify() { mMonitor->Notify(); }
  void NotifyAll() { mMonitor->NotifyAll(); }

 private:
  StaticMonitorAutoLock();
  StaticMonitorAutoLock(const StaticMonitorAutoLock&);
  StaticMonitorAutoLock& operator=(const StaticMonitorAutoLock&);
  static void* operator new(size_t) noexcept(true);

  StaticMonitor* mMonitor;
};

}  // namespace mozilla

Minimal test - lines (21, 21)

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N1
old: 27.0
new: 5.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n2
old: 8.0
new: 3.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.52317159110577
new: 1.5943609377704335

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.effort
old: 2424.6016612318103
new: 44.91767875292167

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N2
old: 17.0
new: 3.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.bugs
old: 0.06015970216882179
new: 0.00421201861424495

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.level
old: 0.0784313725490196
new: 0.5

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.volume
old: 190.16483617504392
new: 22.458839376460833

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 67.01955000865388
new: 12.754887502163468

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.difficulty
old: 12.75
new: 2.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.vocabulary
old: 20.0
new: 7.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.length
old: 44.0
new: 8.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n1
old: 12.0
new: 4.0

path: .spaces[0].spaces[0].spaces[0].metrics.halstead.time
old: 134.70009229065613
new: 2.495426597384537

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_sei
old: 85.69109548237262
new: 147.42610035996177

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_original
old: 111.72722106000656
new: 154.58924178123317

path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 65.33755617544244
new: 90.4030653691422

path: .spaces[0].spaces[0].spaces[0].metrics.loc.sloc
old: 7.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.lloc
old: 2.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.loc.ploc
old: 7.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.average
old: 2.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 1.0

path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.average
old: 1.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.nargs.average
old: 3.0
new: 0.0

path: .spaces[0].spaces[0].spaces[0].metrics.nargs.sum
old: 3.0
new: 0.0

Code

  StaticMonitor() { MOZ_ASSERT(!mMutex); }

Minimal test - lines (24, 24)

path: .spaces[0].spaces[0].spaces[1].metrics.cyclomatic.sum
old: 8.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.cyclomatic.average
old: 8.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.volume
old: 797.0463649412294
new: 28.07354922057604

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.time
old: 1238.61989119725
new: 5.848656087620008

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.difficulty
old: 27.97222222222222
new: 3.75

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 155.76927278138973
new: 13.60964047443681

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n2
old: 18.0
new: 2.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.effort
old: 22295.158041550498
new: 105.27580957716016

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.bugs
old: 0.26404976305207567
new: 0.007431864881853823

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.N1
old: 100.0
new: 7.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 1.0180998221005866
new: 1.360964047443681

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.level
old: 0.03574975173783516
new: 0.26666666666666666

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.length
old: 153.0
new: 10.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.vocabulary
old: 37.0
new: 7.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.N2
old: 53.0
new: 3.0

path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n1
old: 19.0
new: 5.0

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_original
old: 76.36624636958318
new: 153.42889531439928

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_sei
old: 53.141306214423864
new: 145.75207426654748

path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 44.658623607943376
new: 89.72450018385923

path: .spaces[0].spaces[0].spaces[1].metrics.nargs.sum
old: 5.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.nargs.average
old: 5.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.cloc
old: 2.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.lloc
old: 19.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.ploc
old: 32.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.blank
old: 2.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.loc.sloc
old: 36.0
new: 1.0

path: .spaces[0].spaces[0].spaces[1].metrics.nexits.sum
old: 3.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.nexits.average
old: 3.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.cognitive.sum
old: 19.0
new: 0.0

path: .spaces[0].spaces[0].spaces[1].metrics.cognitive.average
old: 19.0
new: 0.0

Code

  void Lock() { Mutex()->Lock(); }