# Global Metrics

path: .metrics.nargs.average
old: 3.272727272727273
new: 0.8
path: .metrics.nargs.sum
old: 36.0
new: 4.0
path: .metrics.cyclomatic.average
old: 1.1666666666666667
new: 2.25
path: .metrics.cyclomatic.sum
old: 14.0
new: 18.0
path: .metrics.mi.mi_sei
old: 19.81403261730872
new: 25.03864074614938
path: .metrics.mi.mi_original
old: 45.121479015569136
new: 53.09477131753147
path: .metrics.mi.mi_visual_studio
old: 26.38682983366616
new: 31.049573869901444
path: .metrics.cognitive.average
old: 0.18181818181818185
new: 2.0
path: .metrics.cognitive.sum
old: 2.0
new: 10.0
path: .metrics.nexits.average
old: 0.9090909090909092
new: 1.8
path: .metrics.nexits.sum
old: 10.0
new: 9.0
path: .metrics.halstead.effort
old: 139691.24051485193
new: 34798.136977334725
path: .metrics.halstead.n2
old: 67.0
new: 53.0
path: .metrics.halstead.length
old: 590.0
new: 295.0
path: .metrics.halstead.difficulty
old: 36.940298507462686
new: 19.245283018867923
path: .metrics.halstead.time
old: 7760.62447304733
new: 1933.229832074151
path: .metrics.halstead.bugs
old: 0.8974112880776036
new: 0.3552898010592134
path: .metrics.halstead.purity_ratio
old: 0.816079026757004
new: 1.264632719976628
path: .metrics.halstead.N2
old: 275.0
new: 120.0
path: .metrics.halstead.vocabulary
old: 85.0
new: 70.0
path: .metrics.halstead.level
old: 0.02707070707070707
new: 0.05196078431372549
path: .metrics.halstead.n1
old: 18.0
new: 17.0
path: .metrics.halstead.volume
old: 3781.540652321244
new: 1808.1384899987652
path: .metrics.halstead.estimated_program_length
old: 481.4866257866323
new: 373.0666523931053
path: .metrics.halstead.N1
old: 315.0
new: 175.0
path: .metrics.loc.blank
old: 15.0
new: 11.0
path: .metrics.loc.sloc
old: 138.0
new: 101.0
path: .metrics.loc.cloc
old: 22.0
new: 9.0
path: .metrics.loc.lloc
old: 18.0
new: 24.0
path: .metrics.loc.ploc
old: 101.0
new: 81.0
path: .metrics.nom.functions
old: 11.0
new: 5.0
path: .metrics.nom.total
old: 11.0
new: 5.0

# Spaces Data

## Minimal test - lines (22, 101)

path: .spaces[0].metrics.halstead.volume
old: 350.0
new: 1674.0
path: .spaces[0].metrics.halstead.length
old: 70.0
new: 279.0
path: .spaces[0].metrics.halstead.n1
old: 15.0
new: 17.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.829860389076908
new: 1.1847761445523466
path: .spaces[0].metrics.halstead.vocabulary
old: 32.0
new: 64.0
path: .spaces[0].metrics.halstead.level
old: 0.09444444444444444
new: 0.048932847475273294
path: .spaces[0].metrics.halstead.time
old: 205.8823529411765
new: 1900.563829787234
path: .spaces[0].metrics.halstead.estimated_program_length
old: 128.09022723538357
new: 330.5525443301047
path: .spaces[0].metrics.halstead.N1
old: 46.0
new: 166.0
path: .spaces[0].metrics.halstead.effort
old: 3705.8823529411766
new: 34210.14893617021
path: .spaces[0].metrics.halstead.n2
old: 17.0
new: 47.0
path: .spaces[0].metrics.halstead.N2
old: 24.0
new: 113.0
path: .spaces[0].metrics.halstead.bugs
old: 0.0798251660582055
new: 0.35127619663372156
path: .spaces[0].metrics.halstead.difficulty
old: 10.588235294117649
new: 20.43617021276596
path: .spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 17.0
path: .spaces[0].metrics.cyclomatic.average
old: 2.0
new: 2.4285714285714284
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 5.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 5.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 1.8
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 9.0
path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 10.0
path: .spaces[0].metrics.cognitive.average
old: 1.0
new: 2.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 7.0
path: .spaces[0].metrics.loc.ploc
old: 13.0
new: 70.0
path: .spaces[0].metrics.loc.cloc
old: 1.0
new: 3.0
path: .spaces[0].metrics.loc.lloc
old: 3.0
new: 24.0
path: .spaces[0].metrics.loc.sloc
old: 14.0
new: 80.0
path: .spaces[0].metrics.nargs.average
old: 3.0
new: 0.8
path: .spaces[0].metrics.nargs.sum
old: 3.0
new: 4.0
path: .spaces[0].metrics.mi.mi_original
old: 97.32601885691884
new: 57.501718012826146
path: .spaces[0].metrics.mi.mi_visual_studio
old: 56.91580050112213
new: 33.626735680015294
path: .spaces[0].metrics.mi.mi_sei
old: 85.03008372152294
new: 23.76353937062993

### Code

    namespace mozilla {
    namespace widget {

    #ifndef __MINGW32__
    static ComPtr GetInputPane(HWND aHwnd) {
      ComPtr inputPaneInterop;
      HRESULT hr = RoGetActivationFactory(
          HStringReference(RuntimeClass_Windows_UI_ViewManagement_InputPane).Get(),
          IID_PPV_ARGS(&inputPaneInterop));
      if (NS_WARN_IF(FAILED(hr))) {
        return nullptr;
      }

      ComPtr inputPane;
      hr = inputPaneInterop->GetForWindow(aHwnd, IID_PPV_ARGS(&inputPane));
      if (NS_WARN_IF(FAILED(hr))) {
        return nullptr;
      }

      ComPtr inputPane2;
      inputPane.As(&inputPane2);
      return inputPane2;
    }

    #  ifdef DEBUG
    static bool IsInputPaneVisible(ComPtr& aInputPane2) {
      ComPtr inputPaneControl;
      aInputPane2.As(&inputPaneControl);
      if (NS_WARN_IF(!inputPaneControl)) {
        return false;
      }
      boolean visible = false;
      inputPaneControl->get_Visible(&visible);
      return visible;
    }

    static bool IsForegroundApp() {
      HWND foregroundWnd = ::GetForegroundWindow();
      if (!foregroundWnd) {
        return false;
      }
      DWORD pid;
      ::GetWindowThreadProcessId(foregroundWnd, &pid);
      return pid == ::GetCurrentProcessId();
    }
    #  endif
    #endif

    // static
    void OSKInputPaneManager::ShowOnScreenKeyboard(HWND aWnd) {
    #ifndef __MINGW32__
      ComPtr inputPane2 = GetInputPane(aWnd);
      if (!inputPane2) {
        return;
      }
      boolean result;
      inputPane2->TryShow(&result);
      NS_WARNING_ASSERTION(
          result || !IsForegroundApp() || IsInputPaneVisible(inputPane2),
          "IInputPane2::TryShow is failure");
    #endif
    }

    // static
    void OSKInputPaneManager::DismissOnScreenKeyboard(HWND aWnd) {
    #ifndef __MINGW32__
      ComPtr inputPane2 = GetInputPane(aWnd);
      if (!inputPane2) {
        return;
      }
      boolean result;
      inputPane2->TryHide(&result);
      NS_WARNING_ASSERTION(
          result || !IsForegroundApp() || !IsInputPaneVisible(inputPane2),
          "IInputPane2::TryHide is failure");
    #endif
    }

    }  // namespace widget
    }  // namespace mozilla