# Global Metrics

path: .metrics.mi.mi_original
old: -33.23925634462631
new: 49.22031953656152
path: .metrics.mi.mi_sei
old: -77.37742830096897
new: 32.941824892685716
path: .metrics.mi.mi_visual_studio
old: 0.0
new: 28.78381259448042
path: .metrics.cognitive.average
old: 4.414634146341464
new: 0.0
path: .metrics.cognitive.sum
old: 181.0
new: 0.0
path: .metrics.cyclomatic.sum
old: 172.0
new: 25.0
path: .metrics.cyclomatic.average
old: 4.195121951219512
new: 1.0
path: .metrics.nexits.average
old: 0.7560975609756098
new: 0.15
path: .metrics.nexits.sum
old: 31.0
new: 3.0
path: .metrics.halstead.time
old: 123713.85304906566
new: 2653.193981612328
path: .metrics.halstead.vocabulary
old: 373.0
new: 43.0
path: .metrics.halstead.n2
old: 339.0
new: 29.0
path: .metrics.halstead.effort
old: 2226849.354883182
new: 47757.4916690219
path: .metrics.halstead.bugs
old: 5.684243023697138
new: 0.438772854211694
path: .metrics.halstead.N2
old: 1428.0
new: 118.0
path: .metrics.halstead.difficulty
old: 71.61061946902655
new: 28.482758620689655
path: .metrics.halstead.length
old: 3640.0
new: 309.0
path: .metrics.halstead.n1
old: 34.0
new: 14.0
path: .metrics.halstead.purity_ratio
old: 0.8303067836828935
new: 0.6284285364644209
path: .metrics.halstead.volume
old: 31096.635825729063
new: 1676.7158092029483
path: .metrics.halstead.estimated_program_length
old: 3022.316692605732
new: 194.18441776750603
path: .metrics.halstead.N1
old: 2212.0
new: 191.0
path: .metrics.halstead.level
old: 0.013964409293129016
new: 0.035108958837772396
path: .metrics.nom.total
old: 41.0
new: 20.0
path: .metrics.nom.functions
old: 40.0
new: 20.0
path: .metrics.nom.closures
old: 1.0
new: 0.0
path: .metrics.nargs.sum
old: 58.0
new: 6.0
path: .metrics.nargs.average
old: 1.4146341463414631
new: 0.3
path: .metrics.loc.cloc
old: 147.0
new: 30.0
path: .metrics.loc.lloc
old: 305.0
new: 18.0
path: .metrics.loc.blank
old: 133.0
new: 24.0
path: .metrics.loc.ploc
old: 659.0
new: 65.0
path: .metrics.loc.sloc
old: 939.0
new: 119.0

# Spaces Data

## Minimal test - lines (13, 117)

path: .spaces[0].metrics.nargs.average
old: 1.0
new: 0.3
path: .spaces[0].metrics.nargs.sum
old: 1.0
new: 6.0
path: .spaces[0].metrics.mi.mi_original
old: 141.3591763553032
new: 51.64667564905609
path: .spaces[0].metrics.mi.mi_visual_studio
old: 82.66618500310128
new: 30.202734297693624
path: .spaces[0].metrics.mi.mi_sei
old: 128.33915057933606
new: 34.41230393673922
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 20.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 20.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 24.0
path: .spaces[0].metrics.halstead.n2
old: 3.0
new: 26.0
path: .spaces[0].metrics.halstead.N1
old: 7.0
new: 191.0
path: .spaces[0].metrics.halstead.difficulty
old: 3.3333333333333335
new: 30.692307692307693
path: .spaces[0].metrics.halstead.N2
old: 4.0
new: 114.0
path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 14.0
path: .spaces[0].metrics.halstead.vocabulary
old: 8.0
new: 40.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 16.36452797660028
new: 175.51440158047484
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.4876843615091162
new: 0.5754570543622126
path: .spaces[0].metrics.halstead.time
old: 6.111111111111111
new: 2767.7437585782804
path: .spaces[0].metrics.halstead.bugs
old: 0.007652568082218515
new: 0.4513128184045031
path: .spaces[0].metrics.halstead.length
old: 11.0
new: 305.0
path: .spaces[0].metrics.halstead.volume
old: 33.0
new: 1623.1880689406455
path: .spaces[0].metrics.halstead.level
old: 0.3
new: 0.03258145363408521
path: .spaces[0].metrics.halstead.effort
old: 110.0
new: 49819.387654409045
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 3.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 0.15
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 22.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 23.0
path: .spaces[0].metrics.loc.ploc
old: 2.0
new: 60.0
path: .spaces[0].metrics.loc.sloc
old: 2.0
new: 105.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 18.0

### Code

    namespace mozilla {

    /**
     * Monitor provides a *non*-reentrant monitor: *not* a Java-style
     * monitor.  If your code needs support for reentrancy, use
     * ReentrantMonitor instead.  (Rarely should reentrancy be needed.)
     *
     * Instead of directly calling Monitor methods, it's safer and simpler
     * to instead use the RAII wrappers MonitorAutoLock and
     * MonitorAutoUnlock.
     */
    class Monitor {
     public:
      explicit Monitor(const char* aName)
          : mMutex(aName), mCondVar(mMutex, "[Monitor.mCondVar]") {}

      ~Monitor() = default;

      void Lock() { mMutex.Lock(); }
      [[nodiscard]] bool TryLock() { return mMutex.TryLock(); }
      void Unlock() { mMutex.Unlock(); }

      void Wait() { mCondVar.Wait(); }
      CVStatus Wait(TimeDuration aDuration) { return mCondVar.Wait(aDuration); }

      void Notify() { mCondVar.Notify(); }
      void NotifyAll() { mCondVar.NotifyAll(); }

      void AssertCurrentThreadOwns() const { mMutex.AssertCurrentThreadOwns(); }

      void AssertNotCurrentThreadOwns() const {
        mMutex.AssertNotCurrentThreadOwns();
      }

     private:
      Monitor();
      Monitor(const Monitor&);
      Monitor& operator=(const Monitor&);

      Mutex mMutex;
      CondVar mCondVar;
    };

    /**
     * Lock the monitor for the lexical scope instances of this class are
     * bound to (except for MonitorAutoUnlock in nested scopes).
     *
     * The monitor must be unlocked when instances of this class are
     * created.
     */
    class MOZ_STACK_CLASS MonitorAutoLock {
     public:
      explicit MonitorAutoLock(Monitor& aMonitor) : mMonitor(&aMonitor) {
        mMonitor->Lock();
      }

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

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

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

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

      friend class MonitorAutoUnlock;

      Monitor* mMonitor;
    };

    /**
     * Unlock the monitor for the lexical scope instances of this class
     * are bound to (except for MonitorAutoLock in nested scopes).
     *
     * The monitor must be locked by the current thread when instances of
     * this class are created.
     */
    class MOZ_STACK_CLASS MonitorAutoUnlock {
     public:
      explicit MonitorAutoUnlock(Monitor& aMonitor) : mMonitor(&aMonitor) {
        mMonitor->Unlock();
      }

      explicit MonitorAutoUnlock(MonitorAutoLock& aMonitorLock)
          : mMonitor(aMonitorLock.mMonitor) {
        mMonitor->Unlock();
      }

      ~MonitorAutoUnlock() { mMonitor->Lock(); }

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

      Monitor* mMonitor;
    };

    }  // namespace mozilla