Global Metrics

path: .metrics.loc.blank
old: 23.0
new: 31.0

path: .metrics.loc.sloc
old: 460.0
new: 232.0

path: .metrics.loc.ploc
old: 226.0
new: 94.0

path: .metrics.loc.cloc
old: 211.0
new: 107.0

path: .metrics.loc.lloc
old: 107.0
new: 10.0

path: .metrics.nexits.average
old: 0.625
new: 0.25

path: .metrics.nexits.sum
old: 5.0
new: 3.0

path: .metrics.cognitive.average
old: 5.375
new: 0.3333333333333333

path: .metrics.cognitive.sum
old: 43.0
new: 4.0

path: .metrics.halstead.vocabulary
old: 123.0
new: 66.0

path: .metrics.halstead.estimated_program_length
old: 752.2093122580814
new: 343.1368500605771

path: .metrics.halstead.n1
old: 32.0
new: 18.0

path: .metrics.halstead.purity_ratio
old: 0.5522829018047587
new: 1.075664106772969

path: .metrics.halstead.time
old: 57727.1352641761
new: 2450.37219101242

path: .metrics.halstead.N1
old: 737.0
new: 197.0

path: .metrics.halstead.difficulty
old: 109.89010989010988
new: 22.875

path: .metrics.halstead.volume
old: 9455.704756272044
new: 1928.161724075347

path: .metrics.halstead.length
old: 1362.0
new: 319.0

path: .metrics.halstead.level
old: 0.0091
new: 0.04371584699453552

path: .metrics.halstead.bugs
old: 3.419640243204413
new: 0.416116674185234

path: .metrics.halstead.n2
old: 91.0
new: 48.0

path: .metrics.halstead.N2
old: 625.0
new: 122.0

path: .metrics.halstead.effort
old: 1039088.4347551698
new: 44106.69943822356

path: .metrics.cyclomatic.sum
old: 39.0
new: 28.0

path: .metrics.cyclomatic.average
old: 3.9
new: 1.2173913043478262

path: .metrics.mi.mi_sei
old: -6.5913536446879135
new: 23.93615427015211

path: .metrics.mi.mi_original
old: 15.101388585821311
new: 36.98837834114675

path: .metrics.mi.mi_visual_studio
old: 8.831221395217142
new: 21.63063060885775

path: .metrics.nom.functions
old: 8.0
new: 12.0

path: .metrics.nom.total
old: 8.0
new: 12.0

path: .metrics.nargs.average
old: 2.375
new: 0.3333333333333333

path: .metrics.nargs.sum
old: 19.0
new: 4.0

Spaces Data

Minimal test - lines (18, 20)

path: .spaces[0].metrics.loc.sloc
old: 35.0
new: 3.0

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

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

path: .spaces[0].metrics.loc.ploc
old: 24.0
new: 3.0

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

path: .spaces[0].metrics.cyclomatic.average
old: 2.0
new: 1.0

path: .spaces[0].metrics.mi.mi_sei
old: 73.67242810595283
new: 129.26360748831726

path: .spaces[0].metrics.mi.mi_visual_studio
old: 44.99446156214899
new: 82.99964029639851

path: .spaces[0].metrics.mi.mi_original
old: 76.94052927127477
new: 141.92938490684145

path: .spaces[0].metrics.halstead.N2
old: 85.0
new: 2.0

path: .spaces[0].metrics.halstead.difficulty
old: 23.448275862068964
new: 1.0

path: .spaces[0].metrics.halstead.N1
old: 100.0
new: 2.0

path: .spaces[0].metrics.halstead.volume
old: 1015.99282282099
new: 8.0

path: .spaces[0].metrics.halstead.n2
old: 29.0
new: 2.0

path: .spaces[0].metrics.halstead.vocabulary
old: 45.0
new: 4.0

path: .spaces[0].metrics.halstead.n1
old: 16.0
new: 2.0

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.1074672911281058
new: 1.0

path: .spaces[0].metrics.halstead.length
old: 185.0
new: 4.0

path: .spaces[0].metrics.halstead.level
old: 0.04264705882352941
new: 1.0

path: .spaces[0].metrics.halstead.bugs
old: 0.2759813799323924
new: 0.0013333333333333333

path: .spaces[0].metrics.halstead.estimated_program_length
old: 204.88144885869957
new: 4.0

path: .spaces[0].metrics.halstead.effort
old: 23823.27998338873
new: 8.0

path: .spaces[0].metrics.halstead.time
old: 1323.5155546327069
new: 0.4444444444444444

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

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

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

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

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

path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0

Code

namespace sandbox {
class BrokerServices;
}

Minimal test - lines (21, 25)

path: .spaces[1].metrics.mi.mi_original
old: 73.50766700801942
new: 130.53948741585606

path: .spaces[1].metrics.mi.mi_sei
old: 70.53167367865566
new: 112.93327872124344

path: .spaces[1].metrics.mi.mi_visual_studio
old: 42.98693977077159
new: 76.33888152974038

path: .spaces[1].metrics.halstead.N2
old: 98.0
new: 3.0

path: .spaces[1].metrics.halstead.bugs
old: 0.3367360218258065
new: 0.0019299471801733172

path: .spaces[1].metrics.halstead.difficulty
old: 28.26923076923077
new: 1.0

path: .spaces[1].metrics.halstead.estimated_program_length
old: 180.8147916057962
new: 6.754887502163468

path: .spaces[1].metrics.halstead.n1
old: 15.0
new: 2.0

path: .spaces[1].metrics.halstead.effort
old: 32108.22128306115
new: 13.931568569324174

path: .spaces[1].metrics.halstead.time
old: 1783.790071281175
new: 0.7739760316291208

path: .spaces[1].metrics.halstead.purity_ratio
old: 0.852899960404699
new: 1.1258145836939113

path: .spaces[1].metrics.halstead.n2
old: 26.0
new: 3.0

path: .spaces[1].metrics.halstead.N1
old: 114.0
new: 3.0

path: .spaces[1].metrics.halstead.length
old: 212.0
new: 6.0

path: .spaces[1].metrics.halstead.vocabulary
old: 41.0
new: 5.0

path: .spaces[1].metrics.halstead.volume
old: 1135.801024979034
new: 13.931568569324174

path: .spaces[1].metrics.halstead.level
old: 0.03537414965986394
new: 1.0

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

path: .spaces[1].metrics.nargs.sum
old: 1.0
new: 0.0

path: .spaces[1].metrics.loc.sloc
old: 40.0
new: 5.0

path: .spaces[1].metrics.loc.lloc
old: 12.0
new: 0.0

path: .spaces[1].metrics.loc.ploc
old: 26.0
new: 5.0

path: .spaces[1].metrics.loc.cloc
old: 14.0
new: 0.0

path: .spaces[1].metrics.cyclomatic.average
old: 5.0
new: 1.0

path: .spaces[1].metrics.cyclomatic.sum
old: 5.0
new: 3.0

path: .spaces[1].metrics.nom.functions
old: 1.0
new: 0.0

path: .spaces[1].metrics.nom.total
old: 1.0
new: 0.0

path: .spaces[1].metrics.nexits.average
old: 0.0
new: null

path: .spaces[1].metrics.cognitive.average
old: 7.0
new: null

path: .spaces[1].metrics.cognitive.sum
old: 7.0
new: 0.0

Code

namespace mozilla {
namespace sandboxing {
class PermissionsService;
}
}  // namespace mozilla

Minimal test - lines (28, 230)

path: .spaces[2].metrics.cyclomatic.average
old: 5.0
new: 1.2352941176470589

path: .spaces[2].metrics.cyclomatic.sum
old: 5.0
new: 21.0

path: .spaces[2].metrics.cognitive.average
old: 7.0
new: 0.25

path: .spaces[2].metrics.cognitive.sum
old: 7.0
new: 3.0

path: .spaces[2].metrics.mi.mi_sei
old: 76.47088196435759
new: 30.156889950579213

path: .spaces[2].metrics.mi.mi_original
old: 77.54356205619854
new: 41.29606999621721

path: .spaces[2].metrics.mi.mi_visual_studio
old: 45.34711231356639
new: 24.14974853579954

path: .spaces[2].metrics.nexits.sum
old: 0.0
new: 3.0

path: .spaces[2].metrics.nexits.average
old: 0.0
new: 0.25

path: .spaces[2].metrics.loc.cloc
old: 12.0
new: 99.0

path: .spaces[2].metrics.loc.sloc
old: 34.0
new: 203.0

path: .spaces[2].metrics.loc.lloc
old: 11.0
new: 10.0

path: .spaces[2].metrics.loc.blank
old: 1.0
new: 29.0

path: .spaces[2].metrics.loc.ploc
old: 21.0
new: 75.0

path: .spaces[2].metrics.halstead.N1
old: 85.0
new: 189.0

path: .spaces[2].metrics.halstead.difficulty
old: 23.142857142857142
new: 24.3

path: .spaces[2].metrics.halstead.level
old: 0.043209876543209874
new: 0.0411522633744856

path: .spaces[2].metrics.halstead.estimated_program_length
old: 209.6645878435745
new: 287.9357738214561

path: .spaces[2].metrics.halstead.vocabulary
old: 46.0
new: 58.0

path: .spaces[2].metrics.halstead.time
old: 1114.97043484408
new: 2348.7574799964004

path: .spaces[2].metrics.halstead.purity_ratio
old: 1.3354432346724492
new: 0.9694807199375628

path: .spaces[2].metrics.halstead.N2
old: 72.0
new: 108.0

path: .spaces[2].metrics.halstead.n2
old: 28.0
new: 40.0

path: .spaces[2].metrics.halstead.length
old: 157.0
new: 297.0

path: .spaces[2].metrics.halstead.bugs
old: 0.2461704859962159
new: 0.4045316750840616

path: .spaces[2].metrics.halstead.volume
old: 867.199227100951
new: 1739.820355552889

path: .spaces[2].metrics.halstead.effort
old: 20069.46782719344
new: 42277.6346399352

path: .spaces[2].metrics.nom.functions
old: 1.0
new: 12.0

path: .spaces[2].metrics.nom.total
old: 1.0
new: 12.0

path: .spaces[2].metrics.nargs.average
old: 1.0
new: 0.3333333333333333

path: .spaces[2].metrics.nargs.sum
old: 1.0
new: 4.0

Code

namespace mozilla {

struct StaticXREAppData;

/**
 * Application-specific data needed to start the apprunner.
 */
class XREAppData {
 public:
  XREAppData() = default;
  ~XREAppData() = default;
  XREAppData(const XREAppData& aOther) { *this = aOther; }

  explicit XREAppData(const StaticXREAppData& aOther) { *this = aOther; }

  XREAppData& operator=(const StaticXREAppData& aOther);
  XREAppData& operator=(const XREAppData& aOther);
  XREAppData& operator=(XREAppData&& aOther) = default;

  // Lots of code reads these fields directly like a struct, so rather
  // than using UniquePtr directly, use an auto-converting wrapper.
  class CharPtr {
   public:
    explicit CharPtr() = default;
    explicit CharPtr(const char* v) { *this = v; }
    CharPtr(CharPtr&&) = default;
    ~CharPtr() = default;

    CharPtr& operator=(const char* v) {
      if (v) {
        mValue.reset(NS_xstrdup(v));
      } else {
        mValue = nullptr;
      }
      return *this;
    }
    CharPtr& operator=(const CharPtr& v) {
      *this = (const char*)v;
      return *this;
    }

    operator const char*() const { return mValue.get(); }

   private:
    UniqueFreePtr mValue;
  };

  /**
   * The directory of the application to be run. May be null if the
   * xulrunner and the app are installed into the same directory.
   */
  nsCOMPtr directory;

  /**
   * The name of the application vendor. This must be ASCII, and is normally
   * mixed-case, e.g. "Mozilla". Optional (may be null), but highly
   * recommended. Must not be the empty string.
   */
  CharPtr vendor;

  /**
   * The name of the application. This must be ASCII, and is normally
   * mixed-case, e.g. "Firefox". Required (must not be null or an empty
   * string).
   */
  CharPtr name;

  /**
   * The internal name of the application for remoting purposes. When left
   * unspecified, "name" is used instead. This must be ASCII, and is normally
   * lowercase, e.g. "firefox". Optional (may be null but not an empty string).
   */
  CharPtr remotingName;

  /**
   * The major version, e.g. "0.8.0+". Optional (may be null), but
   * required for advanced application features such as the extension
   * manager and update service. Must not be the empty string.
   */
  CharPtr version;

  /**
   * The application's build identifier, e.g. "2004051604"
   */
  CharPtr buildID;

  /**
   * The application's UUID. Used by the extension manager to determine
   * compatible extensions. Optional, but required for advanced application
   * features such as the extension manager and update service.
   *
   * This has traditionally been in the form
   * "{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}" but for new applications
   * a more readable form is encouraged: "appname@vendor.tld". Only
   * the following characters are allowed: a-z A-Z 0-9 - . @ _ { } *
   */
  CharPtr ID;

  /**
   * The copyright information to print for the -h commandline flag,
   * e.g. "Copyright (c) 2003 mozilla.org".
   */
  CharPtr copyright;

  /**
   * Combination of NS_XRE_ prefixed flags (defined below).
   */
  uint32_t flags = 0;

  /**
   * The location of the XRE. XRE_main may not be able to figure this out
   * programatically.
   */
  nsCOMPtr xreDirectory;

  /**
   * The minimum/maximum compatible XRE version.
   */
  CharPtr minVersion;
  CharPtr maxVersion;

  /**
   * The server URL to send crash reports to.
   */
  CharPtr crashReporterURL;

  /**
   * The profile directory that will be used. Optional (may be null). Must not
   * be the empty string, must be ASCII. The path is split into components
   * along the path separator characters '/' and '\'.
   *
   * The application data directory ("UAppData", see below) is normally
   * composed as follows, where $HOME is platform-specific:
   *
   *   UAppData = $HOME[/$vendor]/$name
   *
   * If present, the 'profile' string will be used instead of the combination of
   * vendor and name as follows:
   *
   *   UAppData = $HOME/$profile
   */
  CharPtr profile;

  /**
   * The application name to use in the User Agent string.
   */
  CharPtr UAName;

  /**
   * The URL to the source revision for this build of the application.
   */
  CharPtr sourceURL;

  /**
   * The URL to use to check for updates.
   */
  CharPtr updateURL;

#if defined(XP_WIN) && defined(MOZ_SANDBOX)
  /**
   * Chromium sandbox BrokerServices.
   */
  sandbox::BrokerServices* sandboxBrokerServices = nullptr;
  mozilla::sandboxing::PermissionsService* sandboxPermissionsService;
#endif
};

/**
 * Indicates whether or not the profile migrator service may be
 * invoked at startup when creating a profile.
 */
#define NS_XRE_ENABLE_PROFILE_MIGRATOR (1 << 1)

/**
 * Indicates whether or not to use Breakpad crash reporting.
 */
#define NS_XRE_ENABLE_CRASH_REPORTER (1 << 3)

/**
 * A static version of the XRE app data is compiled into the application
 * so that it is not necessary to read application.ini at startup.
 *
 * This structure is initialized into and matches nsXREAppData
 */
struct StaticXREAppData {
  const char* vendor;
  const char* name;
  const char* remotingName;
  const char* version;
  const char* buildID;
  const char* ID;
  const char* copyright;
  uint32_t flags;
  const char* minVersion;
  const char* maxVersion;
  const char* crashReporterURL;
  const char* profile;
  const char* UAName;
  const char* sourceURL;
  const char* updateURL;
};

}  // namespace mozilla