# Global Metrics

path: .metrics.halstead.effort
old: 3646.051901902172
new: 128668.76541423454
path: .metrics.halstead.length
old: 81.0
new: 555.0
path: .metrics.halstead.time
old: 202.5584389945651
new: 7148.264745235252
path: .metrics.halstead.n1
old: 11.0
new: 24.0
path: .metrics.halstead.estimated_program_length
old: 142.09567279432156
new: 584.8815910390202
path: .metrics.halstead.N1
old: 44.0
new: 334.0
path: .metrics.halstead.volume
old: 412.08449014127746
new: 3687.340185324972
path: .metrics.halstead.bugs
old: 0.07896366723743188
new: 0.8495602183670723
path: .metrics.halstead.purity_ratio
old: 1.7542675653619946
new: 1.0538407045748113
path: .metrics.halstead.vocabulary
old: 34.0
new: 100.0
path: .metrics.halstead.n2
old: 23.0
new: 76.0
path: .metrics.halstead.level
old: 0.11302211302211304
new: 0.028657616892911013
path: .metrics.halstead.N2
old: 37.0
new: 221.0
path: .metrics.halstead.difficulty
old: 8.847826086956522
new: 34.89473684210526
path: .metrics.mi.mi_visual_studio
old: 43.3154760650687
new: 21.256553852490303
path: .metrics.mi.mi_sei
old: 70.59213525032614
new: 3.336139107727071
path: .metrics.mi.mi_original
old: 74.06946407126748
new: 36.34870708775843
path: .metrics.nom.functions
old: 0.0
new: 17.0
path: .metrics.nom.total
old: 0.0
new: 17.0
path: .metrics.cyclomatic.average
old: 1.0
new: 1.4736842105263157
path: .metrics.cyclomatic.sum
old: 7.0
new: 28.0
path: .metrics.cognitive.sum
old: 0.0
new: 10.0
path: .metrics.cognitive.average
old: null
new: 0.5882352941176471
path: .metrics.nexits.sum
old: 0.0
new: 3.0
path: .metrics.nexits.average
old: null
new: 0.17647058823529413
path: .metrics.nargs.average
old: null
new: 0.6470588235294118
path: .metrics.nargs.sum
old: 0.0
new: 11.0
path: .metrics.loc.lloc
old: 0.0
new: 57.0
path: .metrics.loc.cloc
old: 17.0
new: 20.0
path: .metrics.loc.ploc
old: 25.0
new: 149.0
path: .metrics.loc.sloc
old: 52.0
new: 196.0
path: .metrics.loc.blank
old: 10.0
new: 27.0

# Spaces Data

## Minimal test - lines (28, 37)

path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: null
new: 77.95795076727602
path: .spaces[0].spaces[1].metrics.mi.mi_original
old: null
new: 106.43758975234654
path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: null
new: 62.244204533535985
path: .spaces[0].spaces[1].metrics.halstead.effort
old: 0.0
new: 988.7213989667472
path: .spaces[0].spaces[1].metrics.halstead.vocabulary
old: 1.0
new: 23.0
path: .spaces[0].spaces[1].metrics.halstead.N1
old: 0.0
new: 23.0
path: .spaces[0].spaces[1].metrics.halstead.level
old: null
new: 0.1830065359477124
path: .spaces[0].spaces[1].metrics.halstead.volume
old: 0.0
new: 180.94247824228052
path: .spaces[0].spaces[1].metrics.halstead.n1
old: 0.0
new: 9.0
path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.0
new: 0.03308222424104067
path: .spaces[0].spaces[1].metrics.halstead.n2
old: 1.0
new: 14.0
path: .spaces[0].spaces[1].metrics.halstead.N2
old: 1.0
new: 17.0
path: .spaces[0].spaces[1].metrics.halstead.length
old: 1.0
new: 40.0
path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: null
new: 2.045807348044682
path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 0.0
new: 5.464285714285714
path: .spaces[0].spaces[1].metrics.halstead.time
old: 0.0
new: 54.928966609263725
path: .spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: null
new: 81.83229392178727
path: .spaces[0].spaces[1].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].spaces[1].metrics.nargs.average
old: null
new: 1.0
path: .spaces[0].spaces[1].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[1].metrics.loc.lloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[1].metrics.loc.sloc
old: 1.0
new: 10.0
path: .spaces[0].spaces[1].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[0].spaces[1].metrics.loc.ploc
old: 1.0
new: 9.0
path: .spaces[0].spaces[1].metrics.cognitive.average
old: null
new: 0.0
path: .spaces[0].spaces[1].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[1].metrics.nom.total
old: 0.0
new: 1.0

### Code

    CompositorVsyncDispatcher::CompositorVsyncDispatcher(
        RefPtr aVsyncSource)
        : mVsyncSource(std::move(aVsyncSource)),
          mCompositorObserverLock("CompositorObserverLock"),
          mDidShutdown(false) {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());

      mVsyncSource->RegisterCompositorVsyncDispatcher(this);
    }

## Minimal test - lines (16, 196)

path: .spaces[0].metrics.nargs.average
old: null
new: 0.6470588235294118
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 11.0
path: .spaces[0].metrics.loc.ploc
old: 19.0
new: 141.0
path: .spaces[0].metrics.loc.cloc
old: 11.0
new: 15.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 57.0
path: .spaces[0].metrics.loc.sloc
old: 38.0
new: 181.0
path: .spaces[0].metrics.loc.blank
old: 8.0
new: 25.0
path: .spaces[0].metrics.mi.mi_sei
old: 77.47130100421715
new: 3.5214336679630627
path: .spaces[0].metrics.mi.mi_visual_studio
old: 46.836682193916786
new: 22.25618430305324
path: .spaces[0].metrics.mi.mi_original
old: 80.0907265515977
new: 38.05807515822104
path: .spaces[0].metrics.nom.total
old: 0.0
new: 17.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 17.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 3.0
path: .spaces[0].metrics.nexits.average
old: null
new: 0.17647058823529413
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 10.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 0.5882352941176471
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.5
path: .spaces[0].metrics.cyclomatic.sum
old: 6.0
new: 27.0
path: .spaces[0].metrics.halstead.N2
old: 32.0
new: 213.0
path: .spaces[0].metrics.halstead.bugs
old: 0.06975596544769526
new: 0.87129970211394
path: .spaces[0].metrics.halstead.difficulty
old: 8.421052631578947
new: 37.588235294117645
path: .spaces[0].metrics.halstead.N1
old: 42.0
new: 332.0
path: .spaces[0].metrics.halstead.vocabulary
old: 29.0
new: 92.0
path: .spaces[0].metrics.halstead.effort
old: 3027.2892095952866
new: 133639.00405921382
path: .spaces[0].metrics.halstead.time
old: 168.18273386640482
new: 7424.389114400768
path: .spaces[0].metrics.halstead.estimated_program_length
old: 113.92990370430176
new: 523.9865732223308
path: .spaces[0].metrics.halstead.length
old: 74.0
new: 545.0
path: .spaces[0].metrics.halstead.volume
old: 359.4905936394403
new: 3555.341266051072
path: .spaces[0].metrics.halstead.n1
old: 10.0
new: 24.0
path: .spaces[0].metrics.halstead.n2
old: 19.0
new: 68.0
path: .spaces[0].metrics.halstead.level
old: 0.11875
new: 0.026604068857589987
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.539593293301375
new: 0.9614432536189556

### Code

    namespace mozilla {

    CompositorVsyncDispatcher::CompositorVsyncDispatcher()
        : mVsyncSource(gfxPlatform::GetPlatform()->GetHardwareVsync()),
          mCompositorObserverLock("CompositorObserverLock"),
          mDidShutdown(false) {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());

      mVsyncSource->RegisterCompositorVsyncDispatcher(this);
    }

    CompositorVsyncDispatcher::CompositorVsyncDispatcher(
        RefPtr aVsyncSource)
        : mVsyncSource(std::move(aVsyncSource)),
          mCompositorObserverLock("CompositorObserverLock"),
          mDidShutdown(false) {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());

      mVsyncSource->RegisterCompositorVsyncDispatcher(this);
    }

    CompositorVsyncDispatcher::~CompositorVsyncDispatcher() {
      MOZ_ASSERT(XRE_IsParentProcess());
      // We auto remove this vsync dispatcher from the vsync source in the
      // nsBaseWidget
    }

    void CompositorVsyncDispatcher::NotifyVsync(const VsyncEvent& aVsync) {
      // In vsync thread
      layers::CompositorBridgeParent::PostInsertVsyncProfilerMarker(aVsync.mTime);

      MutexAutoLock lock(mCompositorObserverLock);
      if (mCompositorVsyncObserver) {
        mCompositorVsyncObserver->NotifyVsync(aVsync);
      }
    }

    void CompositorVsyncDispatcher::MoveToSource(
        const RefPtr& aVsyncSource) {
      MOZ_ASSERT(NS_IsMainThread());
      MOZ_ASSERT(XRE_IsParentProcess());
      mVsyncSource = aVsyncSource;
    }

    void CompositorVsyncDispatcher::ObserveVsync(bool aEnable) {
      MOZ_ASSERT(NS_IsMainThread());
      MOZ_ASSERT(XRE_IsParentProcess());
      if (mDidShutdown) {
        return;
      }

      if (aEnable) {
        mVsyncSource->EnableCompositorVsyncDispatcher(this);
      } else {
        mVsyncSource->DisableCompositorVsyncDispatcher(this);
      }
    }

    void CompositorVsyncDispatcher::SetCompositorVsyncObserver(
        VsyncObserver* aVsyncObserver) {
      // When remote compositing or running gtests, vsync observation is
      // initiated on the main thread. Otherwise, it is initiated from the
      // compositor thread.
      MOZ_ASSERT(NS_IsMainThread() ||
                 CompositorThreadHolder::IsInCompositorThread());

      {  // scope lock
        MutexAutoLock lock(mCompositorObserverLock);
        mCompositorVsyncObserver = aVsyncObserver;
      }

      bool observeVsync = aVsyncObserver != nullptr;
      nsCOMPtr vsyncControl = NewRunnableMethod(
          "CompositorVsyncDispatcher::ObserveVsync", this,
          &CompositorVsyncDispatcher::ObserveVsync, observeVsync);
      NS_DispatchToMainThread(vsyncControl);
    }

    void CompositorVsyncDispatcher::Shutdown() {
      // Need to explicitly remove CompositorVsyncDispatcher when the nsBaseWidget
      // shuts down. Otherwise, we would get dead vsync notifications between when
      // the nsBaseWidget shuts down and the CompositorBridgeParent shuts down.
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());
      MOZ_ASSERT(!mDidShutdown);
      ObserveVsync(false);
      mDidShutdown = true;
      {  // scope lock
        MutexAutoLock lock(mCompositorObserverLock);
        mCompositorVsyncObserver = nullptr;
      }
      mVsyncSource->DeregisterCompositorVsyncDispatcher(this);
      mVsyncSource = nullptr;
    }

    RefreshTimerVsyncDispatcher::RefreshTimerVsyncDispatcher(
        gfx::VsyncSource::Display* aDisplay)
        : mDisplay(aDisplay), mRefreshTimersLock("RefreshTimers lock") {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());
    }

    RefreshTimerVsyncDispatcher::~RefreshTimerVsyncDispatcher() {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());
    }

    void RefreshTimerVsyncDispatcher::MoveToDisplay(
        gfx::VsyncSource::Display* aDisplay) {
      MOZ_ASSERT(NS_IsMainThread());
      mDisplay = aDisplay;
    }

    void RefreshTimerVsyncDispatcher::NotifyVsync(const VsyncEvent& aVsync) {
      MutexAutoLock lock(mRefreshTimersLock);

      for (size_t i = 0; i < mChildRefreshTimers.Length(); i++) {
        mChildRefreshTimers[i]->NotifyVsync(aVsync);
      }

      if (mParentRefreshTimer) {
        mParentRefreshTimer->NotifyVsync(aVsync);
      }
    }

    void RefreshTimerVsyncDispatcher::SetParentRefreshTimer(
        VsyncObserver* aVsyncObserver) {
      MOZ_ASSERT(NS_IsMainThread());
      {  // lock scope because UpdateVsyncStatus runs on main thread and will
         // deadlock
        MutexAutoLock lock(mRefreshTimersLock);
        mParentRefreshTimer = aVsyncObserver;
      }

      UpdateVsyncStatus();
    }

    void RefreshTimerVsyncDispatcher::AddChildRefreshTimer(
        VsyncObserver* aVsyncObserver) {
      {  // scope lock - called on pbackground thread
        MutexAutoLock lock(mRefreshTimersLock);
        MOZ_ASSERT(aVsyncObserver);
        if (!mChildRefreshTimers.Contains(aVsyncObserver)) {
          mChildRefreshTimers.AppendElement(aVsyncObserver);
        }
      }

      UpdateVsyncStatus();
    }

    void RefreshTimerVsyncDispatcher::RemoveChildRefreshTimer(
        VsyncObserver* aVsyncObserver) {
      {  // scope lock - called on pbackground thread
        MutexAutoLock lock(mRefreshTimersLock);
        MOZ_ASSERT(aVsyncObserver);
        mChildRefreshTimers.RemoveElement(aVsyncObserver);
      }

      UpdateVsyncStatus();
    }

    void RefreshTimerVsyncDispatcher::UpdateVsyncStatus() {
      if (!NS_IsMainThread()) {
        NS_DispatchToMainThread(NewRunnableMethod(
            "RefreshTimerVsyncDispatcher::UpdateVsyncStatus", this,
            &RefreshTimerVsyncDispatcher::UpdateVsyncStatus));
        return;
      }

      mDisplay->NotifyRefreshTimerVsyncStatus(NeedsVsync());
    }

    bool RefreshTimerVsyncDispatcher::NeedsVsync() {
      MOZ_ASSERT(NS_IsMainThread());
      MutexAutoLock lock(mRefreshTimersLock);
      return (mParentRefreshTimer != nullptr) || !mChildRefreshTimers.IsEmpty();
    }

    }  // namespace mozilla

## Minimal test - lines (39, 43)

path: .spaces[0].spaces[2].metrics.halstead.difficulty
old: 0.0
new: 2.5
path: .spaces[0].spaces[2].metrics.halstead.vocabulary
old: 1.0
new: 8.0
path: .spaces[0].spaces[2].metrics.halstead.N2
old: 1.0
new: 3.0
path: .spaces[0].spaces[2].metrics.halstead.effort
old: 0.0
new: 75.0
path: .spaces[0].spaces[2].metrics.halstead.estimated_program_length
old: null
new: 16.36452797660028
path: .spaces[0].spaces[2].metrics.halstead.level
old: null
new: 0.4
path: .spaces[0].spaces[2].metrics.halstead.length
old: 1.0
new: 10.0
path: .spaces[0].spaces[2].metrics.halstead.volume
old: 0.0
new: 30.0
path: .spaces[0].spaces[2].metrics.halstead.N1
old: 0.0
new: 7.0
path: .spaces[0].spaces[2].metrics.halstead.purity_ratio
old: null
new: 1.6364527976600278
path: .spaces[0].spaces[2].metrics.halstead.n2
old: 1.0
new: 3.0
path: .spaces[0].spaces[2].metrics.halstead.time
old: 0.0
new: 4.166666666666667
path: .spaces[0].spaces[2].metrics.halstead.bugs
old: 0.0
new: 0.005928155507483437
path: .spaces[0].spaces[2].metrics.halstead.n1
old: 0.0
new: 5.0
path: .spaces[0].spaces[2].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].spaces[2].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[2].metrics.nargs.average
old: null
new: 0.0
path: .spaces[0].spaces[2].metrics.loc.sloc
old: 1.0
new: 5.0
path: .spaces[0].spaces[2].metrics.loc.lloc
old: 0.0
new: 1.0
path: .spaces[0].spaces[2].metrics.loc.ploc
old: 1.0
new: 3.0
path: .spaces[0].spaces[2].metrics.loc.cloc
old: 0.0
new: 2.0
path: .spaces[0].spaces[2].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].spaces[2].metrics.mi.mi_original
old: null
new: 127.01087943392436
path: .spaces[0].spaces[2].metrics.mi.mi_sei
old: null
new: 149.1581169298888
path: .spaces[0].spaces[2].metrics.mi.mi_visual_studio
old: null
new: 74.27536809001425
path: .spaces[0].spaces[2].metrics.cognitive.average
old: null
new: 0.0

### Code

    CompositorVsyncDispatcher::~CompositorVsyncDispatcher() {
      MOZ_ASSERT(XRE_IsParentProcess());
      // We auto remove this vsync dispatcher from the vsync source in the
      // nsBaseWidget
    }

## Minimal test - lines (18, 26)

path: .spaces[0].spaces[0].metrics.loc.sloc
old: 1.0
new: 9.0
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 1.0
new: 8.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: null
new: 109.019221022642
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: null
new: 81.68245739833516
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: null
new: 63.75393042259767
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 0.0
new: 152.92539048396907
path: .spaces[0].spaces[0].metrics.halstead.time
old: 0.0
new: 34.691408026455946
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 0.0
new: 22.0
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 1.0
new: 14.0
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 0.0
new: 7.0
path: .spaces[0].spaces[0].metrics.halstead.level
old: null
new: 0.2448979591836735
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 19.0
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 1.0
new: 12.0
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: null
new: 62.6710344630571
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.024352396151190826
path: .spaces[0].spaces[0].metrics.halstead.length
old: 1.0
new: 36.0
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 0.0
new: 624.445344476207
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.7408620684182528
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 0.0
new: 4.083333333333333
path: .spaces[0].spaces[0].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nargs.average
old: null
new: 0.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: null
new: 0.0

### Code

    CompositorVsyncDispatcher::CompositorVsyncDispatcher()
        : mVsyncSource(gfxPlatform::GetPlatform()->GetHardwareVsync()),
          mCompositorObserverLock("CompositorObserverLock"),
          mDidShutdown(false) {
      MOZ_ASSERT(XRE_IsParentProcess());
      MOZ_ASSERT(NS_IsMainThread());

      mVsyncSource->RegisterCompositorVsyncDispatcher(this);
    }

## Minimal test - lines (45, 53)

path: .spaces[0].spaces[3].metrics.halstead.time
old: 0.0
new: 46.67999376614589
path: .spaces[0].spaces[3].metrics.halstead.difficulty
old: 0.0
new: 6.5
path: .spaces[0].spaces[3].metrics.halstead.volume
old: 0.0
new: 129.26767504471167
path: .spaces[0].spaces[3].metrics.halstead.bugs
old: 0.0
new: 0.029681164890027513
path: .spaces[0].spaces[3].metrics.halstead.estimated_program_length
old: null
new: 57.05865002596162
path: .spaces[0].spaces[3].metrics.halstead.effort
old: 0.0
new: 840.2398877906259
path: .spaces[0].spaces[3].metrics.halstead.purity_ratio
old: null
new: 1.8406016137406973
path: .spaces[0].spaces[3].metrics.halstead.n2
old: 1.0
new: 9.0
path: .spaces[0].spaces[3].metrics.halstead.N2
old: 1.0
new: 13.0
path: .spaces[0].spaces[3].metrics.halstead.length
old: 1.0
new: 31.0
path: .spaces[0].spaces[3].metrics.halstead.N1
old: 0.0
new: 18.0
path: .spaces[0].spaces[3].metrics.halstead.n1
old: 0.0
new: 9.0
path: .spaces[0].spaces[3].metrics.halstead.vocabulary
old: 1.0
new: 18.0
path: .spaces[0].spaces[3].metrics.halstead.level
old: null
new: 0.15384615384615383
path: .spaces[0].spaces[3].metrics.mi.mi_sei
old: null
new: 107.4008249348274
path: .spaces[0].spaces[3].metrics.mi.mi_original
old: null
new: 109.6631585218371
path: .spaces[0].spaces[3].metrics.mi.mi_visual_studio
old: null
new: 64.13050205955386
path: .spaces[0].spaces[3].metrics.loc.lloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[3].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[0].spaces[3].metrics.loc.sloc
old: 1.0
new: 9.0
path: .spaces[0].spaces[3].metrics.loc.ploc
old: 1.0
new: 7.0
path: .spaces[0].spaces[3].metrics.loc.cloc
old: 0.0
new: 1.0
path: .spaces[0].spaces[3].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].spaces[3].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[3].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].spaces[3].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[0].spaces[3].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[0].spaces[3].metrics.nargs.average
old: null
new: 1.0
path: .spaces[0].spaces[3].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[3].metrics.cognitive.average
old: null
new: 1.0
path: .spaces[0].spaces[3].metrics.cognitive.sum
old: 0.0
new: 1.0

### Code

    void CompositorVsyncDispatcher::NotifyVsync(const VsyncEvent& aVsync) {
      // In vsync thread
      layers::CompositorBridgeParent::PostInsertVsyncProfilerMarker(aVsync.mTime);

      MutexAutoLock lock(mCompositorObserverLock);
      if (mCompositorVsyncObserver) {
        mCompositorVsyncObserver->NotifyVsync(aVsync);
      }
    }

## Minimal test - lines (55, 60)

path: .spaces[0].spaces[4].metrics.mi.mi_visual_studio
old: 50.923521550159535
new: 68.70186402628089
path: .spaces[0].spaces[4].metrics.mi.mi_original
old: 87.07922185077281
new: 117.4801874849403
path: .spaces[0].spaces[4].metrics.mi.mi_sei
old: 89.98543234568085
new: 93.88905175462077
path: .spaces[0].spaces[4].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[4].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].spaces[4].metrics.nexits.average
old: null
new: 0.0
path: .spaces[0].spaces[4].metrics.loc.ploc
old: 13.0
new: 6.0
path: .spaces[0].spaces[4].metrics.loc.blank
old: 5.0
new: 0.0
path: .spaces[0].spaces[4].metrics.loc.lloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[4].metrics.loc.sloc
old: 28.0
new: 6.0
path: .spaces[0].spaces[4].metrics.loc.cloc
old: 10.0
new: 0.0
path: .spaces[0].spaces[4].metrics.cognitive.average
old: null
new: 0.0
path: .spaces[0].spaces[4].metrics.nargs.average
old: null
new: 1.0
path: .spaces[0].spaces[4].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[4].metrics.halstead.effort
old: 2271.475200672218
new: 597.7914405328621
path: .spaces[0].spaces[4].metrics.halstead.N2
old: 27.0
new: 10.0
path: .spaces[0].spaces[4].metrics.halstead.difficulty
old: 7.5
new: 5.625
path: .spaces[0].spaces[4].metrics.halstead.vocabulary
old: 28.0
new: 17.0
path: .spaces[0].spaces[4].metrics.halstead.level
old: 0.13333333333333333
new: 0.17777777777777778
path: .spaces[0].spaces[4].metrics.halstead.length
old: 63.0
new: 26.0
path: .spaces[0].spaces[4].metrics.halstead.n2
old: 18.0
new: 8.0
path: .spaces[0].spaces[4].metrics.halstead.bugs
old: 0.05759932735055926
new: 0.023654396566148563
path: .spaces[0].spaces[4].metrics.halstead.purity_ratio
old: 1.7186973170608768
new: 2.0203586543454155
path: .spaces[0].spaces[4].metrics.halstead.estimated_program_length
old: 108.27793097483524
new: 52.529325012980806
path: .spaces[0].spaces[4].metrics.halstead.n1
old: 10.0
new: 9.0
path: .spaces[0].spaces[4].metrics.halstead.volume
old: 302.86336008962905
new: 106.27403387250882
path: .spaces[0].spaces[4].metrics.halstead.time
old: 126.1930667040121
new: 33.210635585159004
path: .spaces[0].spaces[4].metrics.halstead.N1
old: 36.0
new: 16.0

### Code

    void CompositorVsyncDispatcher::MoveToSource(
        const RefPtr& aVsyncSource) {
      MOZ_ASSERT(NS_IsMainThread());
      MOZ_ASSERT(XRE_IsParentProcess());
      mVsyncSource = aVsyncSource;
    }