# Global Metrics

path: .metrics.halstead.level
old: 0.2833333333333333
new: 0.1375
path: .metrics.halstead.n1
old: 5.0
new: 10.0
path: .metrics.halstead.estimated_program_length
old: 81.09650877569258
new: 131.32677655889415
path: .metrics.halstead.bugs
old: 0.029165462396855725
new: 0.06564465107651253
path: .metrics.halstead.difficulty
old: 3.5294117647058822
new: 7.272727272727272
path: .metrics.halstead.time
old: 45.46871454296852
new: 153.53535353535352
path: .metrics.halstead.vocabulary
old: 22.0
new: 32.0
path: .metrics.halstead.purity_ratio
old: 1.5595482456863958
new: 1.7279839020907126
path: .metrics.halstead.n2
old: 17.0
new: 22.0
path: .metrics.halstead.length
old: 52.0
new: 76.0
path: .metrics.halstead.N1
old: 28.0
new: 44.0
path: .metrics.halstead.N2
old: 24.0
new: 32.0
path: .metrics.halstead.volume
old: 231.89044416913947
new: 380.0
path: .metrics.halstead.effort
old: 818.4368617734334
new: 2763.6363636363635
path: .metrics.mi.mi_visual_studio
old: 41.60324075812414
new: 40.882525355434886
path: .metrics.mi.mi_sei
old: 75.28678934669531
new: 71.85527914827135
path: .metrics.mi.mi_original
old: 71.14154169639227
new: 69.90911835779366
path: .metrics.loc.sloc
old: 76.0
new: 72.0
path: .metrics.loc.cloc
old: 51.0
new: 42.0
path: .metrics.loc.blank
old: 11.0
new: 10.0
path: .metrics.loc.ploc
old: 14.0
new: 20.0
path: .metrics.cyclomatic.sum
old: 6.0
new: 4.0

# Spaces Data

## Minimal test - lines (16, 70)

path: .spaces[2].metrics.mi.mi_original
old: null
new: 75.76756160222777
path: .spaces[2].metrics.mi.mi_sei
old: null
new: 81.21237674613008
path: .spaces[2].metrics.mi.mi_visual_studio
old: null
new: 44.308515556858346
path: .spaces[2].metrics.halstead.estimated_program_length
old: null
new: 113.92990370430176
path: .spaces[2].metrics.halstead.volume
old: 0.0
new: 325.4847266735473
path: .spaces[2].metrics.halstead.length
old: 1.0
new: 67.0
path: .spaces[2].metrics.halstead.difficulty
old: 0.0
new: 6.842105263157895
path: .spaces[2].metrics.halstead.N1
old: 0.0
new: 41.0
path: .spaces[2].metrics.halstead.bugs
old: 0.0
new: 0.05684500673807247
path: .spaces[2].metrics.halstead.n2
old: 1.0
new: 19.0
path: .spaces[2].metrics.halstead.level
old: null
new: 0.14615384615384616
path: .spaces[2].metrics.halstead.n1
old: 0.0
new: 10.0
path: .spaces[2].metrics.halstead.N2
old: 1.0
new: 26.0
path: .spaces[2].metrics.halstead.effort
old: 0.0
new: 2227.0007614505867
path: .spaces[2].metrics.halstead.purity_ratio
old: null
new: 1.7004463239448022
path: .spaces[2].metrics.halstead.time
old: 0.0
new: 123.7222645250326
path: .spaces[2].metrics.halstead.vocabulary
old: 1.0
new: 29.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 36.0
path: .spaces[2].metrics.loc.sloc
old: 1.0
new: 55.0
path: .spaces[2].metrics.loc.ploc
old: 1.0
new: 13.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 6.0

### Code

    class nsIRollupListener {
     public:
      /**
       * Notifies the object to rollup, optionally returning the node that
       * was just rolled up.
       *
       * If aFlush is true, then views should be flushed after the rollup.
       *
       * aPoint is the mouse pointer position where the event that triggered the
       * rollup occurred, which may be nullptr.
       *
       * aCount is the number of popups in a chain to close. If this is
       * UINT32_MAX, then all popups are closed.
       * If aLastRolledUp is non-null, it will be set to the last rolled up popup,
       * if this is supported. aLastRolledUp is not addrefed.
       *
       * Returns true if the event that the caller is processing should be consumed.
       */
      MOZ_CAN_RUN_SCRIPT_BOUNDARY
      virtual bool Rollup(uint32_t aCount, bool aFlush, const nsIntPoint* aPoint,
                          nsIContent** aLastRolledUp) = 0;

      /**
       * Asks the RollupListener if it should rollup on mouse wheel events
       */
      virtual bool ShouldRollupOnMouseWheelEvent() = 0;

      /**
       * Asks the RollupListener if it should consume mouse wheel events
       */
      virtual bool ShouldConsumeOnMouseWheelEvent() = 0;

      /**
       * Asks the RollupListener if it should rollup on mouse activate, eg. X-Mouse
       */
      virtual bool ShouldRollupOnMouseActivate() = 0;

      /*
       * Retrieve the widgets for open menus and store them in the array
       * aWidgetChain. The number of menus of the same type should be returned,
       * for example, if a context menu is open, return only the number of menus
       * that are part of the context menu chain. This allows closing up only
       * those menus in different situations. The returned value should be exactly
       * the same number of widgets added to aWidgetChain.
       */
      virtual uint32_t GetSubmenuWidgetChain(
          nsTArray* aWidgetChain) = 0;

      /**
       * Notify the RollupListener that the widget did a Move or Resize.
       */
      virtual void NotifyGeometryChange() = 0;

      virtual nsIWidget* GetRollupWidget() = 0;
    };