Global Metrics

path: .metrics.cognitive.average
old: 2.0
new: 0.0

path: .metrics.cognitive.sum
old: 2.0
new: 0.0

path: .metrics.nexits.average
old: 1.0
new: 0.6666666666666666

path: .metrics.nexits.sum
old: 1.0
new: 2.0

path: .metrics.nom.total
old: 1.0
new: 3.0

path: .metrics.nom.functions
old: 1.0
new: 3.0

path: .metrics.loc.blank
old: 19.0
new: 25.0

path: .metrics.loc.lloc
old: 5.0
new: 2.0

path: .metrics.loc.cloc
old: 126.0
new: 56.0

path: .metrics.loc.ploc
old: 34.0
new: 65.0

path: .metrics.loc.sloc
old: 179.0
new: 146.0

path: .metrics.nargs.average
old: 0.0
new: 1.0

path: .metrics.nargs.sum
old: 0.0
new: 3.0

path: .metrics.cyclomatic.average
old: 1.6666666666666667
new: 1.0

path: .metrics.cyclomatic.sum
old: 5.0
new: 6.0

path: .metrics.mi.mi_original
old: 47.37798529294133
new: 49.548696493140355

path: .metrics.mi.mi_sei
old: 41.33497812666594
new: 37.337580777811624

path: .metrics.mi.mi_visual_studio
old: 27.706424147918906
new: 28.97584590242126

path: .metrics.halstead.length
old: 286.0
new: 295.0

path: .metrics.halstead.difficulty
old: 20.416666666666668
new: 10.48125

path: .metrics.halstead.purity_ratio
old: 0.8556666398113671
new: 1.8774914031417735

path: .metrics.halstead.vocabulary
old: 51.0
new: 93.0

path: .metrics.halstead.estimated_program_length
old: 244.720658986051
new: 553.8599639268232

path: .metrics.halstead.effort
old: 33122.23697599522
new: 20218.874695233186

path: .metrics.halstead.n1
old: 15.0
new: 13.0

path: .metrics.halstead.N2
old: 98.0
new: 129.0

path: .metrics.halstead.N1
old: 188.0
new: 166.0

path: .metrics.halstead.time
old: 1840.1242764441788
new: 1123.2708164018436

path: .metrics.halstead.volume
old: 1622.3136478038475
new: 1929.0518492768692

path: .metrics.halstead.bugs
old: 0.34378890124681183
new: 0.24739071690666117

path: .metrics.halstead.n2
old: 36.0
new: 80.0

path: .metrics.halstead.level
old: 0.04897959183673469
new: 0.09540846750149076

Spaces Data

Minimal test - lines (20, 144)

path: .spaces[0].metrics.loc.ploc
old: 5.0
new: 57.0

path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 2.0

path: .spaces[0].metrics.loc.blank
old: 0.0
new: 21.0

path: .spaces[0].metrics.loc.sloc
old: 5.0
new: 125.0

path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 47.0

path: .spaces[0].metrics.mi.mi_visual_studio
old: 71.47748507010611
new: 30.69187605099093

path: .spaces[0].metrics.mi.mi_original
old: 122.22649946988145
new: 52.48310804719449

path: .spaces[0].metrics.mi.mi_sei
old: 100.73653251780718
new: 41.19461141089475

path: .spaces[0].metrics.nom.total
old: 0.0
new: 3.0

path: .spaces[0].metrics.nom.functions
old: 0.0
new: 3.0

path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 3.0

path: .spaces[0].metrics.nargs.average
old: null
new: 1.0

path: .spaces[0].metrics.cognitive.average
old: null
new: 0.0

path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 5.0

path: .spaces[0].metrics.halstead.effort
old: 188.2105312878607
new: 19830.971823745993

path: .spaces[0].metrics.halstead.difficulty
old: 2.5
new: 10.66

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.4886249966114304
new: 1.7891219379271712

path: .spaces[0].metrics.halstead.estimated_program_length
old: 31.26112492884004
new: 515.2671181230253

path: .spaces[0].metrics.halstead.vocabulary
old: 12.0
new: 88.0

path: .spaces[0].metrics.halstead.bugs
old: 0.010947325359591292
new: 0.24421635422260027

path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 13.0

path: .spaces[0].metrics.halstead.volume
old: 75.28421251514428
new: 1860.3163061675416

path: .spaces[0].metrics.halstead.N1
old: 14.0
new: 165.0

path: .spaces[0].metrics.halstead.level
old: 0.4
new: 0.09380863039399624

path: .spaces[0].metrics.halstead.n2
old: 7.0
new: 75.0

path: .spaces[0].metrics.halstead.time
old: 10.456140627103371
new: 1101.7206568747774

path: .spaces[0].metrics.halstead.N2
old: 7.0
new: 123.0

path: .spaces[0].metrics.halstead.length
old: 21.0
new: 288.0

path: .spaces[0].metrics.nexits.average
old: null
new: 0.6666666666666666

path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 2.0

Code

class nsWindowBase : public nsBaseWidget {
 public:
  typedef mozilla::WidgetEventTime WidgetEventTime;

  /*
   * Return the HWND or null for this widget.
   */
  HWND GetWindowHandle() {
    return static_cast(GetNativeData(NS_NATIVE_WINDOW));
  }

  /*
   * Return the parent window, if it exists.
   */
  virtual nsWindowBase* GetParentWindowBase(bool aIncludeOwner) = 0;

  /*
   * Return true if this is a top level widget.
   */
  virtual bool IsTopLevelWidget() = 0;

  /*
   * Init a standard gecko event for this widget.
   * @param aEvent the event to initialize.
   * @param aPoint message position in physical coordinates.
   */
  virtual void InitEvent(mozilla::WidgetGUIEvent& aEvent,
                         LayoutDeviceIntPoint* aPoint = nullptr) = 0;

  /*
   * Returns WidgetEventTime instance which is initialized with current message
   * time.
   */
  virtual WidgetEventTime CurrentMessageWidgetEventTime() const = 0;

  /*
   * Dispatch a gecko event for this widget.
   * Returns true if it's consumed.  Otherwise, false.
   */
  virtual bool DispatchWindowEvent(mozilla::WidgetGUIEvent* aEvent) = 0;

  /*
   * Dispatch a gecko keyboard event for this widget. This
   * is called by KeyboardLayout to dispatch gecko events.
   * Returns true if it's consumed.  Otherwise, false.
   */
  virtual bool DispatchKeyboardEvent(mozilla::WidgetKeyboardEvent* aEvent) = 0;

  /*
   * Dispatch a gecko wheel event for this widget. This
   * is called by ScrollHandler to dispatch gecko events.
   * Returns true if it's consumed.  Otherwise, false.
   */
  virtual bool DispatchWheelEvent(mozilla::WidgetWheelEvent* aEvent) = 0;

  /*
   * Dispatch a gecko content command event for this widget. This
   * is called by ScrollHandler to dispatch gecko events.
   * Returns true if it's consumed.  Otherwise, false.
   */
  virtual bool DispatchContentCommandEvent(
      mozilla::WidgetContentCommandEvent* aEvent) = 0;

  /*
   * Touch input injection apis
   */
  virtual nsresult SynthesizeNativeTouchPoint(uint32_t aPointerId,
                                              TouchPointerState aPointerState,
                                              LayoutDeviceIntPoint aPoint,
                                              double aPointerPressure,
                                              uint32_t aPointerOrientation,
                                              nsIObserver* aObserver) override;
  virtual nsresult ClearNativeTouchSequence(nsIObserver* aObserver) override;

  virtual nsresult SynthesizeNativePenInput(
      uint32_t aPointerId, TouchPointerState aPointerState,
      LayoutDeviceIntPoint aPoint, double aPressure, uint32_t aRotation,
      int32_t aTiltX, int32_t aTiltY, nsIObserver* aObserver) override;

  /*
   * WM_APPCOMMAND common handler.
   * Sends events via NativeKey::HandleAppCommandMessage().
   */
  virtual bool HandleAppCommandMsg(const MSG& aAppCommandMsg,
                                   LRESULT* aRetValue);

  const InputContext& InputContextRef() const { return mInputContext; }

 protected:
  virtual int32_t LogToPhys(double aValue) = 0;
  void ChangedDPI();

  static bool InitTouchInjection();
  bool InjectTouchPoint(uint32_t aId, LayoutDeviceIntPoint& aPoint,
                        POINTER_FLAGS aFlags, uint32_t aPressure = 1024,
                        uint32_t aOrientation = 90);

  class PointerInfo {
   public:
    enum class PointerType : uint8_t {
      TOUCH,
      PEN,
    };

    PointerInfo(int32_t aPointerId, LayoutDeviceIntPoint& aPoint,
                PointerType aType)
        : mPointerId(aPointerId), mPosition(aPoint), mType(aType) {}

    int32_t mPointerId;
    LayoutDeviceIntPoint mPosition;
    PointerType mType;
  };

  nsClassHashtable mActivePointers;
  static bool sTouchInjectInitialized;
  static InjectTouchInputPtr sInjectTouchFuncPtr;

  // This is used by SynthesizeNativeTouchPoint to maintain state between
  // multiple synthesized points, in the case where we can't call InjectTouch
  // directly.
  mozilla::UniquePtr mSynthesizedTouchInput;

 protected:
  InputContext mInputContext;
};