# Global Metrics

path: .metrics.halstead.estimated_program_length
old: 1019.3701056018622
new: 2468.3272179789715
path: .metrics.halstead.time
old: 4052.219826512831
new: 128507.93343889323
path: .metrics.halstead.difficulty
old: 16.711111111111112
new: 83.85460992907801
path: .metrics.halstead.N2
old: 282.0
new: 1391.0
path: .metrics.halstead.purity_ratio
old: 1.6904976875652773
new: 0.7430244485186549
path: .metrics.halstead.effort
old: 72939.95687723096
new: 2313142.8019000785
path: .metrics.halstead.N1
old: 321.0
new: 1931.0
path: .metrics.halstead.volume
old: 4364.758057813023
new: 27585.159645444335
path: .metrics.halstead.length
old: 603.0
new: 3322.0
path: .metrics.halstead.n1
old: 16.0
new: 34.0
path: .metrics.halstead.n2
old: 135.0
new: 282.0
path: .metrics.halstead.level
old: 0.05984042553191489
new: 0.011925402799509452
path: .metrics.halstead.bugs
old: 0.5819099011738753
new: 5.830158679651603
path: .metrics.halstead.vocabulary
old: 151.0
new: 316.0
path: .metrics.cyclomatic.sum
old: 22.0
new: 159.0
path: .metrics.cyclomatic.average
old: 1.0
new: 2.484375
path: .metrics.cognitive.sum
old: 0.0
new: 159.0
path: .metrics.cognitive.average
old: 0.0
new: 3.0576923076923075
path: .metrics.mi.mi_sei
old: -0.5031748840962642
new: -79.63511126267085
path: .metrics.mi.mi_visual_studio
old: 22.09788411173413
new: 0.0
path: .metrics.mi.mi_original
old: 37.78738183106536
new: -29.729368533468403
path: .metrics.nexits.average
old: 0.6363636363636364
new: 1.3076923076923077
path: .metrics.nexits.sum
old: 7.0
new: 68.0
path: .metrics.nom.functions
old: 11.0
new: 52.0
path: .metrics.nom.total
old: 11.0
new: 52.0
path: .metrics.nargs.average
old: 1.6363636363636365
new: 2.2884615384615383
path: .metrics.nargs.sum
old: 18.0
new: 119.0
path: .metrics.loc.lloc
old: 13.0
new: 289.0
path: .metrics.loc.sloc
old: 185.0
new: 945.0
path: .metrics.loc.cloc
old: 11.0
new: 88.0
path: .metrics.loc.blank
old: 31.0
new: 134.0
path: .metrics.loc.ploc
old: 143.0
new: 723.0

# Spaces Data

## Minimal test - lines (36, 116)

path: .spaces[0].metrics.mi.mi_visual_studio
old: null
new: 34.41786410105103
path: .spaces[0].metrics.mi.mi_original
old: null
new: 58.85454761279726
path: .spaces[0].metrics.mi.mi_sei
old: null
new: 32.62576877634166
path: .spaces[0].metrics.nexits.average
old: null
new: 1.2
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 6.0
path: .spaces[0].metrics.halstead.length
old: 1.0
new: 241.0
path: .spaces[0].metrics.halstead.effort
old: 0.0
new: 29552.647893372057
path: .spaces[0].metrics.halstead.volume
old: 0.0
new: 1417.7169748962035
path: .spaces[0].metrics.halstead.estimated_program_length
old: null
new: 295.9642000579637
path: .spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.2280672201575258
path: .spaces[0].metrics.halstead.n2
old: 1.0
new: 42.0
path: .spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.31862242955498615
path: .spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 59.0
path: .spaces[0].metrics.halstead.difficulty
old: 0.0
new: 20.845238095238095
path: .spaces[0].metrics.halstead.n1
old: 0.0
new: 17.0
path: .spaces[0].metrics.halstead.time
old: 0.0
new: 1641.813771854003
path: .spaces[0].metrics.halstead.N1
old: 0.0
new: 138.0
path: .spaces[0].metrics.halstead.level
old: null
new: 0.047972587093089665
path: .spaces[0].metrics.halstead.N2
old: 1.0
new: 103.0
path: .spaces[0].metrics.nom.total
old: 0.0
new: 5.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 5.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 23.0
path: .spaces[0].metrics.loc.ploc
old: 1.0
new: 65.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 7.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 9.0
path: .spaces[0].metrics.loc.sloc
old: 1.0
new: 81.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 2.4
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 12.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.3333333333333335
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 14.0
path: .spaces[0].metrics.nargs.average
old: null
new: 0.4
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 2.0

### Code

    class nsInputStreamReadyEvent final : public CancelableRunnable,
                                          public nsIInputStreamCallback,
                                          public nsIRunnablePriority {
     public:
      NS_DECL_ISUPPORTS_INHERITED

      nsInputStreamReadyEvent(const char* aName, nsIInputStreamCallback* aCallback,
                              nsIEventTarget* aTarget, uint32_t aPriority)
          : CancelableRunnable(aName),
            mCallback(aCallback),
            mTarget(aTarget),
            mPriority(aPriority) {}

     private:
      ~nsInputStreamReadyEvent() {
        if (!mCallback) {
          return;
        }
        //
        // whoa!!  looks like we never posted this event.  take care to
        // release mCallback on the correct thread.  if mTarget lives on the
        // calling thread, then we are ok.  otherwise, we have to try to
        // proxy the Release over the right thread.  if that thread is dead,
        // then there's nothing we can do... better to leak than crash.
        //
        bool val;
        nsresult rv = mTarget->IsOnCurrentThread(&val);
        if (NS_FAILED(rv) || !val) {
          nsCOMPtr event = NS_NewInputStreamReadyEvent(
              "~nsInputStreamReadyEvent", mCallback, mTarget, mPriority);
          mCallback = nullptr;
          if (event) {
            rv = event->OnInputStreamReady(nullptr);
            if (NS_FAILED(rv)) {
              MOZ_ASSERT_UNREACHABLE("leaking stream event");
              nsISupports* sup = event;
              NS_ADDREF(sup);
            }
          }
        }
      }

     public:
      NS_IMETHOD OnInputStreamReady(nsIAsyncInputStream* aStream) override {
        mStream = aStream;

        nsresult rv = mTarget->Dispatch(this, NS_DISPATCH_NORMAL);
        if (NS_FAILED(rv)) {
          NS_WARNING("Dispatch failed");
          return NS_ERROR_FAILURE;
        }

        return NS_OK;
      }

      NS_IMETHOD Run() override {
        if (mCallback) {
          if (mStream) {
            mCallback->OnInputStreamReady(mStream);
          }
          mCallback = nullptr;
        }
        return NS_OK;
      }

      nsresult Cancel() override {
        mCallback = nullptr;
        return NS_OK;
      }

      NS_IMETHOD GetPriority(uint32_t* aPriority) override {
        *aPriority = mPriority;
        return NS_OK;
      }

     private:
      nsCOMPtr mStream;
      nsCOMPtr mCallback;
      nsCOMPtr mTarget;
      uint32_t mPriority;
    };

## Minimal test - lines (126, 198)

path: .spaces[1].metrics.nargs.sum
old: 18.0
new: 1.0
path: .spaces[1].metrics.nargs.average
old: 1.6363636363636365
new: 0.25
path: .spaces[1].metrics.nom.total
old: 11.0
new: 4.0
path: .spaces[1].metrics.nom.functions
old: 11.0
new: 4.0
path: .spaces[1].metrics.cognitive.average
old: 0.0
new: 3.0
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 12.0
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 2.6
path: .spaces[1].metrics.cyclomatic.sum
old: 20.0
new: 13.0
path: .spaces[1].metrics.mi.mi_original
old: 40.9348904646819
new: 61.699343606163424
path: .spaces[1].metrics.mi.mi_visual_studio
old: 23.93853243548649
new: 36.08148748898446
path: .spaces[1].metrics.mi.mi_sei
old: -2.4452480243893984
new: 37.71294705215013
path: .spaces[1].metrics.loc.ploc
old: 127.0
new: 58.0
path: .spaces[1].metrics.loc.blank
old: 28.0
new: 8.0
path: .spaces[1].metrics.loc.lloc
old: 13.0
new: 21.0
path: .spaces[1].metrics.loc.cloc
old: 4.0
new: 7.0
path: .spaces[1].metrics.loc.sloc
old: 159.0
new: 73.0
path: .spaces[1].metrics.halstead.n2
old: 122.0
new: 37.0
path: .spaces[1].metrics.halstead.time
old: 4058.695554048764
new: 1346.6004706451242
path: .spaces[1].metrics.halstead.length
old: 587.0
new: 206.0
path: .spaces[1].metrics.halstead.volume
old: 4172.703856128785
new: 1185.5068254456744
path: .spaces[1].metrics.halstead.estimated_program_length
old: 909.5499551826722
new: 262.23664282952694
path: .spaces[1].metrics.halstead.bugs
old: 0.5825296910140582
new: 0.27918125591908
path: .spaces[1].metrics.halstead.vocabulary
old: 138.0
new: 54.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.549488850396375
new: 1.2729934117938202
path: .spaces[1].metrics.halstead.difficulty
old: 17.508196721311474
new: 20.445945945945947
path: .spaces[1].metrics.halstead.effort
old: 73056.51997287775
new: 24238.808471612236
path: .spaces[1].metrics.halstead.level
old: 0.05711610486891386
new: 0.048909451421017845
path: .spaces[1].metrics.halstead.n1
old: 16.0
new: 17.0
path: .spaces[1].metrics.halstead.N1
old: 320.0
new: 117.0
path: .spaces[1].metrics.halstead.N2
old: 267.0
new: 89.0
path: .spaces[1].metrics.nexits.average
old: 0.6363636363636364
new: 1.25
path: .spaces[1].metrics.nexits.sum
old: 7.0
new: 5.0

### Code

    class nsOutputStreamReadyEvent final : public CancelableRunnable,
                                           public nsIOutputStreamCallback {
     public:
      NS_DECL_ISUPPORTS_INHERITED

      nsOutputStreamReadyEvent(nsIOutputStreamCallback* aCallback,
                               nsIEventTarget* aTarget)
          : CancelableRunnable("nsOutputStreamReadyEvent"),
            mCallback(aCallback),
            mTarget(aTarget) {}

     private:
      ~nsOutputStreamReadyEvent() {
        if (!mCallback) {
          return;
        }
        //
        // whoa!!  looks like we never posted this event.  take care to
        // release mCallback on the correct thread.  if mTarget lives on the
        // calling thread, then we are ok.  otherwise, we have to try to
        // proxy the Release over the right thread.  if that thread is dead,
        // then there's nothing we can do... better to leak than crash.
        //
        bool val;
        nsresult rv = mTarget->IsOnCurrentThread(&val);
        if (NS_FAILED(rv) || !val) {
          nsCOMPtr event =
              NS_NewOutputStreamReadyEvent(mCallback, mTarget);
          mCallback = nullptr;
          if (event) {
            rv = event->OnOutputStreamReady(nullptr);
            if (NS_FAILED(rv)) {
              MOZ_ASSERT_UNREACHABLE("leaking stream event");
              nsISupports* sup = event;
              NS_ADDREF(sup);
            }
          }
        }
      }

     public:
      NS_IMETHOD OnOutputStreamReady(nsIAsyncOutputStream* aStream) override {
        mStream = aStream;

        nsresult rv = mTarget->Dispatch(this, NS_DISPATCH_NORMAL);
        if (NS_FAILED(rv)) {
          NS_WARNING("PostEvent failed");
          return NS_ERROR_FAILURE;
        }

        return NS_OK;
      }

      NS_IMETHOD Run() override {
        if (mCallback) {
          if (mStream) {
            mCallback->OnOutputStreamReady(mStream);
          }
          mCallback = nullptr;
        }
        return NS_OK;
      }

      nsresult Cancel() override {
        mCallback = nullptr;
        return NS_OK;
      }

     private:
      nsCOMPtr mStream;
      nsCOMPtr mCallback;
      nsCOMPtr mTarget;
    };

## Minimal test - lines (138, 164)

path: .spaces[1].spaces[0].metrics.nom.total
old: 11.0
new: 1.0
path: .spaces[1].spaces[0].metrics.nom.functions
old: 11.0
new: 1.0
path: .spaces[1].spaces[0].metrics.cognitive.sum
old: 0.0
new: 8.0
path: .spaces[1].spaces[0].metrics.cognitive.average
old: 0.0
new: 8.0
path: .spaces[1].spaces[0].metrics.loc.sloc
old: 157.0
new: 27.0
path: .spaces[1].spaces[0].metrics.loc.lloc
old: 13.0
new: 9.0
path: .spaces[1].spaces[0].metrics.loc.blank
old: 29.0
new: 0.0
path: .spaces[1].spaces[0].metrics.loc.cloc
old: 3.0
new: 7.0
path: .spaces[1].spaces[0].metrics.loc.ploc
old: 125.0
new: 20.0
path: .spaces[1].spaces[0].metrics.halstead.difficulty
old: 17.58677685950413
new: 13.894736842105264
path: .spaces[1].spaces[0].metrics.halstead.volume
old: 4152.348768531908
new: 415.4719243725423
path: .spaces[1].spaces[0].metrics.halstead.level
old: 0.056860902255639105
new: 0.07196969696969696
path: .spaces[1].spaces[0].metrics.halstead.length
old: 585.0
new: 81.0
path: .spaces[1].spaces[0].metrics.halstead.bugs
old: 0.5823697346173732
new: 0.10726879868086708
path: .spaces[1].spaces[0].metrics.halstead.vocabulary
old: 137.0
new: 35.0
path: .spaces[1].spaces[0].metrics.halstead.effort
old: 73026.43123500743
new: 5772.873054439535
path: .spaces[1].spaces[0].metrics.halstead.time
old: 4057.023957500413
new: 320.7151696910853
path: .spaces[1].spaces[0].metrics.halstead.estimated_program_length
old: 901.182451710226
new: 144.71062275542812
path: .spaces[1].spaces[0].metrics.halstead.n2
old: 121.0
new: 19.0
path: .spaces[1].spaces[0].metrics.halstead.N2
old: 266.0
new: 33.0
path: .spaces[1].spaces[0].metrics.halstead.N1
old: 319.0
new: 48.0
path: .spaces[1].spaces[0].metrics.halstead.purity_ratio
old: 1.5404828234362835
new: 1.786550898215162
path: .spaces[1].spaces[0].metrics.nargs.average
old: 1.6363636363636365
new: 0.0
path: .spaces[1].spaces[0].metrics.nargs.sum
old: 18.0
new: 0.0
path: .spaces[1].spaces[0].metrics.cyclomatic.average
old: 1.0
new: 6.0
path: .spaces[1].spaces[0].metrics.cyclomatic.sum
old: 19.0
new: 6.0
path: .spaces[1].spaces[0].metrics.nexits.average
old: 0.6363636363636364
new: 1.0
path: .spaces[1].spaces[0].metrics.nexits.sum
old: 7.0
new: 1.0
path: .spaces[1].spaces[0].metrics.mi.mi_visual_studio
old: 24.207827463063225
new: 49.63420149469298
path: .spaces[1].spaces[0].metrics.mi.mi_original
old: 41.39538496183812
new: 84.874484555925
path: .spaces[1].spaces[0].metrics.mi.mi_sei
old: -3.419551906741175
new: 82.83384728813864

### Code

      ~nsOutputStreamReadyEvent() {
        if (!mCallback) {
          return;
        }
        //
        // whoa!!  looks like we never posted this event.  take care to
        // release mCallback on the correct thread.  if mTarget lives on the
        // calling thread, then we are ok.  otherwise, we have to try to
        // proxy the Release over the right thread.  if that thread is dead,
        // then there's nothing we can do... better to leak than crash.
        //
        bool val;
        nsresult rv = mTarget->IsOnCurrentThread(&val);
        if (NS_FAILED(rv) || !val) {
          nsCOMPtr event =
              NS_NewOutputStreamReadyEvent(mCallback, mTarget);
          mCallback = nullptr;
          if (event) {
            rv = event->OnOutputStreamReady(nullptr);
            if (NS_FAILED(rv)) {
              MOZ_ASSERT_UNREACHABLE("leaking stream event");
              nsISupports* sup = event;
              NS_ADDREF(sup);
            }
          }
        }
      }