# Global Metrics

path: .metrics.cyclomatic.sum
old: 8.0
new: 14.0
path: .metrics.cyclomatic.average
old: 1.3333333333333333
new: 1.0769230769230769
path: .metrics.nargs.sum
old: 9.0
new: 0.0
path: .metrics.nargs.average
old: 1.8
new: 0.0
path: .metrics.halstead.time
old: 471.99641743535017
new: 929.7683771320652
path: .metrics.halstead.n1
old: 12.0
new: 17.0
path: .metrics.halstead.effort
old: 8495.935513836303
new: 16735.830788377174
path: .metrics.halstead.length
old: 109.0
new: 224.0
path: .metrics.halstead.volume
old: 499.760912578606
new: 1428.008832621711
path: .metrics.halstead.vocabulary
old: 24.0
new: 83.0
path: .metrics.halstead.N2
old: 34.0
new: 91.0
path: .metrics.halstead.purity_ratio
old: 0.7893495414431904
new: 2.0911467865130073
path: .metrics.halstead.level
old: 0.058823529411764705
new: 0.08532643826761474
path: .metrics.halstead.n2
old: 12.0
new: 66.0
path: .metrics.halstead.N1
old: 75.0
new: 133.0
path: .metrics.halstead.estimated_program_length
old: 86.03910001730775
new: 468.4168801789137
path: .metrics.halstead.bugs
old: 0.13878830873570064
new: 0.21809393884718575
path: .metrics.halstead.difficulty
old: 17.0
new: 11.719696969696969
path: .metrics.mi.mi_visual_studio
old: 46.619581575022174
new: 32.49477749779713
path: .metrics.mi.mi_original
old: 79.71948449328792
new: 55.56606952123309
path: .metrics.mi.mi_sei
old: 74.26026103408647
new: 34.24625013665861
path: .metrics.nom.functions
old: 5.0
new: 6.0
path: .metrics.nom.total
old: 5.0
new: 6.0
path: .metrics.nexits.sum
old: 5.0
new: 6.0
path: .metrics.loc.blank
old: 7.0
new: 21.0
path: .metrics.loc.sloc
old: 34.0
new: 99.0
path: .metrics.loc.cloc
old: 8.0
new: 15.0
path: .metrics.loc.ploc
old: 19.0
new: 63.0
path: .metrics.loc.lloc
old: 5.0
new: 6.0

# Spaces Data

## Minimal test - lines (20, 20)

path: .spaces[0].metrics.loc.ploc
old: 3.0
new: 1.0
path: .spaces[0].metrics.loc.sloc
old: 3.0
new: 1.0
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 0.0
path: .spaces[0].metrics.halstead.difficulty
old: 10.125
new: 0.0
path: .spaces[0].metrics.halstead.bugs
old: 0.03105406684545678
new: 0.0
path: .spaces[0].metrics.halstead.time
old: 49.955936194904744
new: 0.0
path: .spaces[0].metrics.halstead.volume
old: 88.81055323538621
new: 0.0
path: .spaces[0].metrics.halstead.n2
old: 4.0
new: 1.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.5220552088742003
new: null
path: .spaces[0].metrics.halstead.length
old: 24.0
new: 1.0
path: .spaces[0].metrics.halstead.effort
old: 899.2068515082854
new: 0.0
path: .spaces[0].metrics.halstead.N2
old: 9.0
new: 1.0
path: .spaces[0].metrics.halstead.level
old: 0.09876543209876544
new: null
path: .spaces[0].metrics.halstead.n1
old: 9.0
new: 0.0
path: .spaces[0].metrics.halstead.vocabulary
old: 13.0
new: 1.0
path: .spaces[0].metrics.halstead.N1
old: 15.0
new: 0.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 36.529325012980806
new: null
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: null
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 0.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 0.0
path: .spaces[0].metrics.cyclomatic.average
old: 3.0
new: 1.0
path: .spaces[0].metrics.cyclomatic.sum
old: 3.0
new: 1.0
path: .spaces[0].metrics.nargs.sum
old: 1.0
new: 0.0
path: .spaces[0].metrics.nargs.average
old: 1.0
new: null
path: .spaces[0].metrics.nexits.average
old: 1.0
new: null
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[0].metrics.mi.mi_original
old: 129.18265239805245
new: null
path: .spaces[0].metrics.mi.mi_sei
old: 110.97577956975373
new: null
path: .spaces[0].metrics.mi.mi_visual_studio
old: 75.545410759095
new: null

### Code

    class nsWindow;

## Minimal test - lines (22, 97)

path: .spaces[1].metrics.mi.mi_sei
old: 113.30879927065874
new: 38.69363965491067
path: .spaces[1].metrics.mi.mi_original
old: 130.94093072286805
new: 60.83182372422544
path: .spaces[1].metrics.mi.mi_visual_studio
old: 76.57364369758366
new: 35.574165920599675
path: .spaces[1].metrics.nexits.sum
old: 1.0
new: 6.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 18.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 9.0
path: .spaces[1].metrics.loc.ploc
old: 3.0
new: 49.0
path: .spaces[1].metrics.loc.sloc
old: 3.0
new: 76.0
path: .spaces[1].metrics.loc.lloc
old: 1.0
new: 6.0
path: .spaces[1].metrics.nargs.average
old: 2.0
new: 0.0
path: .spaces[1].metrics.nargs.sum
old: 2.0
new: 0.0
path: .spaces[1].metrics.halstead.n2
old: 4.0
new: 54.0
path: .spaces[1].metrics.halstead.N2
old: 6.0
new: 78.0
path: .spaces[1].metrics.halstead.level
old: 0.1904761904761905
new: 0.08144796380090497
path: .spaces[1].metrics.halstead.n1
old: 7.0
new: 17.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.3825742227201614
new: 1.8107180638956335
path: .spaces[1].metrics.halstead.vocabulary
old: 11.0
new: 71.0
path: .spaces[1].metrics.halstead.volume
old: 69.18863237274594
new: 1291.446895095983
path: .spaces[1].metrics.halstead.effort
old: 363.2403199569162
new: 15856.097989789574
path: .spaces[1].metrics.halstead.estimated_program_length
old: 27.651484454403228
new: 380.25079341808305
path: .spaces[1].metrics.halstead.N1
old: 14.0
new: 132.0
path: .spaces[1].metrics.halstead.difficulty
old: 5.25
new: 12.27777777777778
path: .spaces[1].metrics.halstead.bugs
old: 0.016969723977179437
new: 0.21038250698204977
path: .spaces[1].metrics.halstead.time
old: 20.180017775384233
new: 880.8943327660875
path: .spaces[1].metrics.halstead.length
old: 20.0
new: 210.0
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 1.0909090909090908
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 12.0
path: .spaces[1].metrics.nom.functions
old: 1.0
new: 6.0
path: .spaces[1].metrics.nom.total
old: 1.0
new: 6.0

### Code

    namespace mozilla {
    namespace widget {

    class PlatformCompositorWidgetDelegate : public CompositorWidgetDelegate {
     public:
      // Callbacks for nsWindow.
      virtual void EnterPresentLock() = 0;
      virtual void LeavePresentLock() = 0;
      virtual void OnDestroyWindow() = 0;
      virtual bool OnWindowResize(const LayoutDeviceIntSize& aSize) = 0;
      virtual void OnWindowModeChange(nsSizeMode aSizeMode) = 0;

      // Transparency handling.
      virtual void UpdateTransparency(nsTransparencyMode aMode) = 0;
      virtual void ClearTransparentWindow() = 0;

      // CompositorWidgetDelegate Overrides

      PlatformCompositorWidgetDelegate* AsPlatformSpecificDelegate() override {
        return this;
      }
    };

    class WinCompositorWidgetInitData;

    // This is the Windows-specific implementation of CompositorWidget. For
    // the most part it only requires an HWND, however it maintains extra state
    // for transparent windows, as well as for synchronizing WM_SETTEXT messages
    // with the compositor.
    class WinCompositorWidget : public CompositorWidget {
     public:
      WinCompositorWidget(const WinCompositorWidgetInitData& aInitData,
                          const layers::CompositorOptions& aOptions);
      ~WinCompositorWidget() override;

      // CompositorWidget Overrides

      uintptr_t GetWidgetKey() override;
      WinCompositorWidget* AsWindows() override { return this; }

      HWND GetHwnd() const {
        return mCompositorWnds.mCompositorWnd ? mCompositorWnds.mCompositorWnd
                                              : mWnd;
      }

      HWND GetCompositorHwnd() const { return mCompositorWnds.mCompositorWnd; }

      void EnsureCompositorWindow();
      void DestroyCompositorWindow();
      void UpdateCompositorWndSizeIfNecessary();

      void RequestFxrOutput();
      bool HasFxrOutputHandler() const { return mFxrHandler != nullptr; }
      FxROutputHandler* GetFxrOutputHandler() const { return mFxrHandler.get(); }

      virtual bool HasGlass() const = 0;

      virtual void UpdateCompositorWnd(const HWND aCompositorWnd,
                                       const HWND aParentWnd) = 0;
      virtual void SetRootLayerTreeID(const layers::LayersId& aRootLayerTreeId) = 0;

     protected:
      bool mSetParentCompleted;

     private:
      uintptr_t mWidgetKey;
      HWND mWnd;

      WinCompositorWnds mCompositorWnds;
      LayoutDeviceIntSize mLastCompositorWndSize;

      UniquePtr mFxrHandler;
    };

    }  // namespace widget
    }  // namespace mozilla