# Global Metrics

path: .metrics.cyclomatic.average
old: 1.0
new: 1.2
path: .metrics.cyclomatic.sum
old: 2.0
new: 12.0
path: .metrics.nom.total
old: 1.0
new: 7.0
path: .metrics.nom.functions
old: 1.0
new: 7.0
path: .metrics.nargs.sum
old: 0.0
new: 3.0
path: .metrics.nargs.average
old: 0.0
new: 0.42857142857142855
path: .metrics.nexits.sum
old: 1.0
new: 2.0
path: .metrics.nexits.average
old: 1.0
new: 0.2857142857142857
path: .metrics.halstead.n2
old: 2.0
new: 91.0
path: .metrics.halstead.time
old: 2.7293728408893374
new: 1406.4435778190295
path: .metrics.halstead.length
old: 7.0
new: 305.0
path: .metrics.halstead.N1
old: 5.0
new: 181.0
path: .metrics.halstead.effort
old: 49.12871113600807
new: 25315.98440074253
path: .metrics.halstead.vocabulary
old: 7.0
new: 109.0
path: .metrics.halstead.volume
old: 19.651484454403228
new: 2064.2962190569624
path: .metrics.halstead.estimated_program_length
old: 13.60964047443681
new: 667.2679622840429
path: .metrics.halstead.N2
old: 2.0
new: 124.0
path: .metrics.halstead.difficulty
old: 2.5
new: 12.263736263736265
path: .metrics.halstead.level
old: 0.4
new: 0.08154121863799282
path: .metrics.halstead.purity_ratio
old: 1.944234353490973
new: 2.187763810767354
path: .metrics.halstead.n1
old: 5.0
new: 18.0
path: .metrics.halstead.bugs
old: 0.004471319041702271
new: 0.28739240818856404
path: .metrics.loc.sloc
old: 3.0
new: 133.0
path: .metrics.loc.cloc
old: 0.0
new: 17.0
path: .metrics.loc.blank
old: 0.0
new: 14.0
path: .metrics.loc.ploc
old: 3.0
new: 102.0
path: .metrics.loc.lloc
old: 1.0
new: 4.0
path: .metrics.mi.mi_sei
old: 122.52146225357944
new: 22.983900818519867
path: .metrics.mi.mi_visual_studio
old: 80.26671692775281
new: 28.846264344857097
path: .metrics.mi.mi_original
old: 137.2560859464573
new: 49.32711202970563

# Spaces Data

## Minimal test - lines (67, 132)

path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.2222222222222223
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 11.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 7.0
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 7.0
path: .spaces[0].metrics.mi.mi_original
old: 137.4860859464573
new: 64.10468695240657
path: .spaces[0].metrics.mi.mi_sei
old: 122.75146225357946
new: 43.582023346917765
path: .spaces[0].metrics.mi.mi_visual_studio
old: 80.40121985172942
new: 37.48812102479916
path: .spaces[0].metrics.nexits.average
old: 1.0
new: 0.2857142857142857
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 2.0
path: .spaces[0].metrics.nargs.average
old: 0.0
new: 0.42857142857142855
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 3.0
path: .spaces[0].metrics.halstead.n2
old: 2.0
new: 42.0
path: .spaces[0].metrics.halstead.bugs
old: 0.004471319041702271
new: 0.2033832010864647
path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 18.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 13.60964047443681
new: 301.5359817826695
path: .spaces[0].metrics.halstead.length
old: 7.0
new: 189.0
path: .spaces[0].metrics.halstead.volume
old: 19.651484454403228
new: 1116.40232257001
path: .spaces[0].metrics.halstead.effort
old: 49.12871113600807
new: 15071.431354695136
path: .spaces[0].metrics.halstead.N2
old: 2.0
new: 63.0
path: .spaces[0].metrics.halstead.N1
old: 5.0
new: 126.0
path: .spaces[0].metrics.halstead.time
old: 2.7293728408893374
new: 837.3017419275076
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.944234353490973
new: 1.5954284750405794
path: .spaces[0].metrics.halstead.vocabulary
old: 7.0
new: 60.0
path: .spaces[0].metrics.halstead.difficulty
old: 2.5
new: 13.5
path: .spaces[0].metrics.halstead.level
old: 0.4
new: 0.07407407407407407
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 8.0
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 4.0
path: .spaces[0].metrics.loc.sloc
old: 3.0
new: 66.0
path: .spaces[0].metrics.loc.ploc
old: 3.0
new: 47.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 11.0

### Code

    class nsUXThemeData {
      // This class makes sure we don't attempt to open a theme if the previous
      // loading attempt has failed because OpenThemeData is a heavy task and
      // it's less likely that the API returns a different result.
      class ThemeHandle final {
        mozilla::Maybe mHandle;

       public:
        ThemeHandle() = default;
        ~ThemeHandle();

        // Disallow copy and move
        ThemeHandle(const ThemeHandle&) = delete;
        ThemeHandle(ThemeHandle&&) = delete;
        ThemeHandle& operator=(const ThemeHandle&) = delete;
        ThemeHandle& operator=(ThemeHandle&&) = delete;

        operator HANDLE();
        void OpenOnce(HWND aWindow, LPCWSTR aClassList);
        void Close();
      };

      static ThemeHandle sThemes[eUXNumClasses];

      // We initialize sCommandButtonBoxMetrics separately as a performance
      // optimization to avoid fetching dummy values for sCommandButtonMetrics
      // when we don't need those.
      static SIZE sCommandButtonMetrics[3];
      static bool sCommandButtonMetricsInitialized;
      static SIZE sCommandButtonBoxMetrics;
      static bool sCommandButtonBoxMetricsInitialized;

      static const wchar_t* GetClassName(nsUXThemeClass);
      static void EnsureCommandButtonMetrics();
      static void EnsureCommandButtonBoxMetrics();

     public:
      static bool sTitlebarInfoPopulatedAero;
      static bool sTitlebarInfoPopulatedThemed;
      static mozilla::LookAndFeel::WindowsTheme sThemeId;
      static bool sIsDefaultWindowsTheme;
      static bool sIsHighContrastOn;

      static void Invalidate();
      static HANDLE GetTheme(nsUXThemeClass cls);
      static HMODULE GetThemeDLL();

      // nsWindow calls this to update desktop settings info
      static void UpdateTitlebarInfo(HWND aWnd);

      static SIZE GetCommandButtonMetrics(CmdButtonIdx aMetric) {
        EnsureCommandButtonMetrics();
        return sCommandButtonMetrics[aMetric];
      }
      static SIZE GetCommandButtonBoxMetrics() {
        EnsureCommandButtonBoxMetrics();
        return sCommandButtonBoxMetrics;
      }
      static void UpdateNativeThemeInfo();
      static mozilla::LookAndFeel::WindowsTheme GetNativeThemeId();
      static bool IsDefaultWindowTheme();
      static bool IsHighContrastOn();

      static bool AreFlatMenusEnabled();
      static bool IsAppThemed();
    };