# Global Metrics

path: .metrics.halstead.length
old: 181.0
new: 186.0
path: .metrics.halstead.n1
old: 16.0
new: 18.0
path: .metrics.halstead.vocabulary
old: 55.0
new: 57.0
path: .metrics.halstead.bugs
old: 0.19516293171448423
new: 0.24584147859434083
path: .metrics.halstead.difficulty
old: 13.538461538461538
new: 18.46153846153846
path: .metrics.halstead.level
old: 0.07386363636363637
new: 0.05416666666666667
path: .metrics.halstead.N2
old: 66.0
new: 80.0
path: .metrics.halstead.volume
old: 1046.4261081479635
new: 1084.917542634642
path: .metrics.halstead.estimated_program_length
old: 270.13068653562766
new: 281.1893365615893
path: .metrics.halstead.N1
old: 115.0
new: 106.0
path: .metrics.halstead.effort
old: 14166.999618003198
new: 20029.246940947232
path: .metrics.halstead.purity_ratio
old: 1.4924347322410367
new: 1.5117706266752111
path: .metrics.halstead.time
old: 787.055534333511
new: 1112.735941163735
path: .metrics.nargs.sum
old: 3.0
new: 1.0
path: .metrics.nargs.average
old: 0.75
new: 1.0
path: .metrics.cyclomatic.sum
old: 14.0
new: 9.0
path: .metrics.cyclomatic.average
old: 1.5555555555555556
new: 3.0
path: .metrics.nexits.sum
old: 7.0
new: 1.0
path: .metrics.nexits.average
old: 1.75
new: 1.0
path: .metrics.mi.mi_original
old: 56.54108355031768
new: 64.2298269954699
path: .metrics.mi.mi_sei
old: 40.1138634491527
new: 45.867263914649214
path: .metrics.mi.mi_visual_studio
old: 33.06496114053665
new: 37.56130233653211
path: .metrics.loc.ploc
old: 62.0
new: 47.0
path: .metrics.loc.sloc
old: 103.0
new: 68.0
path: .metrics.loc.blank
old: 19.0
new: 11.0
path: .metrics.loc.lloc
old: 21.0
new: 15.0
path: .metrics.loc.cloc
old: 22.0
new: 10.0
path: .metrics.cognitive.average
old: 1.25
new: 9.0
path: .metrics.cognitive.sum
old: 5.0
new: 9.0
path: .metrics.nom.functions
old: 4.0
new: 1.0
path: .metrics.nom.total
old: 4.0
new: 1.0

# Spaces Data

## Minimal test - lines (22, 66)

path: .spaces[0].metrics.mi.mi_original
old: 124.51705364749066
new: 71.30711061514155
path: .spaces[0].metrics.mi.mi_sei
old: 104.14292353013596
new: 47.45903886324095
path: .spaces[0].metrics.mi.mi_visual_studio
old: 72.81699043712904
new: 41.700064687217285
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 15.0
path: .spaces[0].metrics.loc.ploc
old: 5.0
new: 34.0
path: .spaces[0].metrics.loc.sloc
old: 7.0
new: 45.0
path: .spaces[0].metrics.loc.blank
old: 2.0
new: 8.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 9.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 9.0
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.nargs.average
old: null
new: 1.0
path: .spaces[0].metrics.halstead.n2
old: 2.0
new: 37.0
path: .spaces[0].metrics.halstead.effort
old: 24.380244996317305
new: 19451.61913560157
path: .spaces[0].metrics.halstead.n1
old: 3.0
new: 18.0
path: .spaces[0].metrics.halstead.N1
old: 5.0
new: 106.0
path: .spaces[0].metrics.halstead.length
old: 7.0
new: 182.0
path: .spaces[0].metrics.halstead.time
old: 1.3544580553509613
new: 1080.6455075334204
path: .spaces[0].metrics.halstead.vocabulary
old: 5.0
new: 55.0
path: .spaces[0].metrics.halstead.N2
old: 2.0
new: 76.0
path: .spaces[0].metrics.halstead.difficulty
old: 1.5
new: 18.486486486486488
path: .spaces[0].metrics.halstead.bugs
old: 0.002802662411680566
new: 0.24109188002461196
path: .spaces[0].metrics.halstead.estimated_program_length
old: 6.754887502163468
new: 267.8084245542328
path: .spaces[0].metrics.halstead.level
old: 0.6666666666666666
new: 0.054093567251461985
path: .spaces[0].metrics.halstead.purity_ratio
old: 0.9649839288804954
new: 1.4714748601880925
path: .spaces[0].metrics.halstead.volume
old: 16.253496664211536
new: 1052.207467861488
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].metrics.nexits.average
old: null
new: 1.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 8.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 4.0

### Code

    namespace mozilla {

    inline void NoteIntentionalCrash(const char* aProcessType) {
    // In opt builds we don't actually have the leak checking enabled, and the
    // sandbox doesn't allow writing to this path, so we just disable this
    // function's behaviour.
    #ifdef MOZ_DEBUG
      char* f = getenv("XPCOM_MEM_BLOAT_LOG");
      if (!f) {
        return;
      }

      fprintf(stderr, "XPCOM_MEM_BLOAT_LOG: %s\n", f);

      std::ostringstream bloatName;
      std::string processType(aProcessType);
      if (!processType.compare("default")) {
        bloatName << f;
      } else {
        std::string bloatLog(f);

        bool hasExt = false;
        if (bloatLog.size() >= 4 &&
            bloatLog.compare(bloatLog.size() - 4, 4, ".log", 4) == 0) {
          hasExt = true;
          bloatLog.erase(bloatLog.size() - 4, 4);
        }

        bloatName << bloatLog << "_" << processType << "_pid" << getpid();
        if (hasExt) {
          bloatName << ".log";
        }
      }

      fprintf(stderr, "Writing to log: %s\n", bloatName.str().c_str());

      FILE* processfd = fopen(bloatName.str().c_str(), "a");
      if (processfd) {
        fprintf(processfd, "==> process %d will purposefully crash\n", getpid());
        fclose(processfd);
      }
    #endif
    }

    }  // namespace mozilla

## Minimal test - lines (24, 64)

path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.0
new: 7.0
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 7.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 0.0
new: 9.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: null
new: 9.0
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 3.0
new: 32.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 0.0
new: 6.0
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 0.0
new: 15.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 3.0
new: 41.0
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 126.6999002570717
new: 50.8561404762176
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 82.00171614982087
new: 42.764034810078535
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 140.22293461619367
new: 73.1264995252343
path: .spaces[0].spaces[0].metrics.halstead.time
old: 0.9674700395364008
new: 1079.0414066556505
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 17.414460711655217
new: 19422.745319801707
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 2.0
new: 75.0
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 11.60964047443681
new: 1035.8797503894243
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 6.754887502163468
new: 261.17595007788486
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.6666666666666666
new: 0.05333333333333334
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.3509775004326936
new: 1.4509775004326937
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 1.5
new: 18.75
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 2.0
new: 36.0
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 3.0
new: 18.0
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.002239505320238735
new: 0.2408532378212832
path: .spaces[0].spaces[0].metrics.halstead.length
old: 5.0
new: 180.0
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 5.0
new: 54.0
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 3.0
new: 105.0
path: .spaces[0].spaces[0].metrics.nargs.average
old: null
new: 1.0
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: null
new: 1.0

### Code

    inline void NoteIntentionalCrash(const char* aProcessType) {
    // In opt builds we don't actually have the leak checking enabled, and the
    // sandbox doesn't allow writing to this path, so we just disable this
    // function's behaviour.
    #ifdef MOZ_DEBUG
      char* f = getenv("XPCOM_MEM_BLOAT_LOG");
      if (!f) {
        return;
      }

      fprintf(stderr, "XPCOM_MEM_BLOAT_LOG: %s\n", f);

      std::ostringstream bloatName;
      std::string processType(aProcessType);
      if (!processType.compare("default")) {
        bloatName << f;
      } else {
        std::string bloatLog(f);

        bool hasExt = false;
        if (bloatLog.size() >= 4 &&
            bloatLog.compare(bloatLog.size() - 4, 4, ".log", 4) == 0) {
          hasExt = true;
          bloatLog.erase(bloatLog.size() - 4, 4);
        }

        bloatName << bloatLog << "_" << processType << "_pid" << getpid();
        if (hasExt) {
          bloatName << ".log";
        }
      }

      fprintf(stderr, "Writing to log: %s\n", bloatName.str().c_str());

      FILE* processfd = fopen(bloatName.str().c_str(), "a");
      if (processfd) {
        fprintf(processfd, "==> process %d will purposefully crash\n", getpid());
        fclose(processfd);
      }
    #endif
    }