# Global Metrics

path: .metrics.mi.mi_visual_studio
old: 36.620889939213285
new: 28.385262073978904
path: .metrics.mi.mi_original
old: 62.621721796054715
new: 48.53879814650392
path: .metrics.mi.mi_sei
old: 39.62101997121368
new: 24.488374241795047
path: .metrics.loc.cloc
old: 6.0
new: 20.0
path: .metrics.loc.ploc
old: 50.0
new: 85.0
path: .metrics.loc.blank
old: 5.0
new: 22.0
path: .metrics.loc.lloc
old: 34.0
new: 36.0
path: .metrics.loc.sloc
old: 61.0
new: 127.0
path: .metrics.cyclomatic.average
old: 4.0
new: 3.25
path: .metrics.cyclomatic.sum
old: 16.0
new: 13.0
path: .metrics.nargs.average
old: 1.0
new: 1.6666666666666667
path: .metrics.nargs.sum
old: 3.0
new: 5.0
path: .metrics.cognitive.sum
old: 9.0
new: 18.0
path: .metrics.cognitive.average
old: 3.0
new: 6.0
path: .metrics.halstead.bugs
old: 0.270554091914671
new: 0.567423286397629
path: .metrics.halstead.n2
old: 55.0
new: 73.0
path: .metrics.halstead.effort
old: 23124.00433360221
new: 70233.22552344506
path: .metrics.halstead.purity_ratio
old: 1.6272873755072832
new: 1.3794022773884678
path: .metrics.halstead.time
old: 1284.666907422345
new: 3901.845862413614
path: .metrics.halstead.N1
old: 157.0
new: 235.0
path: .metrics.halstead.difficulty
old: 15.2
new: 26.465753424657535
path: .metrics.halstead.level
old: 0.06578947368421052
new: 0.03778467908902691
path: .metrics.halstead.n1
old: 19.0
new: 23.0
path: .metrics.halstead.N2
old: 88.0
new: 168.0
path: .metrics.halstead.estimated_program_length
old: 398.6854069992844
new: 555.8991177875525
path: .metrics.halstead.length
old: 245.0
new: 403.0
path: .metrics.halstead.volume
old: 1521.3160745790929
new: 2653.7398877906257
path: .metrics.halstead.vocabulary
old: 74.0
new: 96.0

# Spaces Data

## Minimal test - lines (22, 73)

path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 7.0
path: .spaces[0].metrics.cognitive.average
old: 1.0
new: 7.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 60.75309573198398
new: 40.647809235120654
path: .spaces[0].metrics.mi.mi_original
old: 103.88779370169262
new: 69.50775379205632
path: .spaces[0].metrics.mi.mi_sei
old: 74.78847194674167
new: 57.77407821575229
path: .spaces[0].metrics.cyclomatic.average
old: 6.0
new: 5.0
path: .spaces[0].metrics.cyclomatic.sum
old: 6.0
new: 5.0
path: .spaces[0].metrics.halstead.volume
old: 236.83666567851097
new: 1082.4063210825789
path: .spaces[0].metrics.halstead.estimated_program_length
old: 91.8226398830014
new: 293.5877465509226
path: .spaces[0].metrics.halstead.N2
old: 16.0
new: 77.0
path: .spaces[0].metrics.halstead.vocabulary
old: 25.0
new: 59.0
path: .spaces[0].metrics.halstead.N1
old: 35.0
new: 107.0
path: .spaces[0].metrics.halstead.bugs
old: 0.03895027450206386
new: 0.2439168772000967
path: .spaces[0].metrics.halstead.difficulty
old: 5.333333333333333
new: 18.2875
path: .spaces[0].metrics.halstead.n1
old: 10.0
new: 19.0
path: .spaces[0].metrics.halstead.length
old: 51.0
new: 184.0
path: .spaces[0].metrics.halstead.effort
old: 1263.128883618725
new: 19794.505596797662
path: .spaces[0].metrics.halstead.level
old: 0.1875
new: 0.05468215994531784
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.8004439192745376
new: 1.595585579081101
path: .spaces[0].metrics.halstead.n2
old: 15.0
new: 40.0
path: .spaces[0].metrics.halstead.time
old: 70.17382686770695
new: 1099.694755377648
path: .spaces[0].metrics.nexits.sum
old: 5.0
new: 3.0
path: .spaces[0].metrics.nexits.average
old: 5.0
new: 3.0
path: .spaces[0].metrics.nargs.average
old: 0.0
new: 2.0
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.sloc
old: 10.0
new: 52.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 11.0
path: .spaces[0].metrics.loc.lloc
old: 12.0
new: 16.0
path: .spaces[0].metrics.loc.ploc
old: 10.0
new: 33.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 8.0

### Code

    nsPrintSettingsServiceWin::SerializeToPrintData(nsIPrintSettings* aSettings,
                                                    PrintData* data) {
      nsresult rv = nsPrintSettingsService::SerializeToPrintData(aSettings, data);
      NS_ENSURE_SUCCESS(rv, rv);

      nsCOMPtr psWin = do_QueryInterface(aSettings);
      if (!psWin) {
        return NS_ERROR_FAILURE;
      }

      nsAutoString deviceName;
      nsAutoString driverName;

      psWin->GetDeviceName(deviceName);
      psWin->GetDriverName(driverName);

      data->deviceName().Assign(deviceName);
      data->driverName().Assign(driverName);

      // When creating the print dialog on Windows, we only need to send certain
      // print settings information from the parent to the child not vice versa.
      if (XRE_IsParentProcess()) {
        // A DEVMODE can actually be of arbitrary size. If it turns out that it'll
        // make our IPC message larger than the limit, then we'll error out.
        LPDEVMODEW devModeRaw;
        psWin->GetDevMode(&devModeRaw);  // This actually allocates a copy of the
                                         // the nsIPrintSettingsWin DEVMODE, so
                                         // we're now responsible for deallocating
                                         // it. We'll use an nsAutoDevMode helper
                                         // to do this.
        if (devModeRaw) {
          nsAutoDevMode devMode(devModeRaw);
          devModeRaw = nullptr;

          size_t devModeTotalSize = devMode->dmSize + devMode->dmDriverExtra;
          size_t msgTotalSize = sizeof(PrintData) + devModeTotalSize;

          if (msgTotalSize > IPC::Channel::kMaximumMessageSize / 2) {
            return NS_ERROR_FAILURE;
          }

          // Instead of reaching in and manually reading each member, we'll just
          // copy the bits over.
          const char* devModeData = reinterpret_cast(devMode.get());
          nsTArray arrayBuf;
          arrayBuf.AppendElements(devModeData, devModeTotalSize);
          data->devModeData() = std::move(arrayBuf);
        }
      }

      return NS_OK;
    }

## Minimal test - lines (76, 115)

path: .spaces[1].metrics.loc.lloc
old: 10.0
new: 16.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[1].metrics.loc.sloc
old: 13.0
new: 40.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 6.0
path: .spaces[1].metrics.loc.ploc
old: 13.0
new: 31.0
path: .spaces[1].metrics.halstead.N1
old: 27.0
new: 100.0
path: .spaces[1].metrics.halstead.estimated_program_length
old: 71.27302875388389
new: 265.9634674908211
path: .spaces[1].metrics.halstead.volume
old: 175.69269691115042
new: 948.1429930180442
path: .spaces[1].metrics.halstead.N2
old: 13.0
new: 64.0
path: .spaces[1].metrics.halstead.effort
old: 1038.1841181113434
new: 17337.47187232995
path: .spaces[1].metrics.halstead.bugs
old: 0.03417655884469047
new: 0.22328999206568884
path: .spaces[1].metrics.halstead.time
old: 57.67689545063019
new: 963.1928817961084
path: .spaces[1].metrics.halstead.length
old: 40.0
new: 164.0
path: .spaces[1].metrics.halstead.difficulty
old: 5.909090909090909
new: 18.285714285714285
path: .spaces[1].metrics.halstead.vocabulary
old: 21.0
new: 55.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.7818257188470974
new: 1.6217284603098845
path: .spaces[1].metrics.halstead.n1
old: 10.0
new: 20.0
path: .spaces[1].metrics.halstead.n2
old: 11.0
new: 35.0
path: .spaces[1].metrics.halstead.level
old: 0.16923076923076924
new: 0.0546875
path: .spaces[1].metrics.cyclomatic.sum
old: 4.0
new: 6.0
path: .spaces[1].metrics.cyclomatic.average
old: 4.0
new: 6.0
path: .spaces[1].metrics.cognitive.average
old: 1.0
new: 11.0
path: .spaces[1].metrics.cognitive.sum
old: 1.0
new: 11.0
path: .spaces[1].metrics.nargs.sum
old: 1.0
new: 2.0
path: .spaces[1].metrics.nargs.average
old: 1.0
new: 2.0
path: .spaces[1].metrics.nexits.sum
old: 3.0
new: 4.0
path: .spaces[1].metrics.nexits.average
old: 3.0
new: 4.0
path: .spaces[1].metrics.mi.mi_sei
old: 71.35694241703989
new: 52.56467888820886
path: .spaces[1].metrics.mi.mi_original
old: 101.65039098011404
new: 74.21672514088847
path: .spaces[1].metrics.mi.mi_visual_studio
old: 59.444673087786
new: 43.401593649642386

### Code

    nsPrintSettingsServiceWin::DeserializeToPrintSettings(
        const PrintData& data, nsIPrintSettings* settings) {
      nsresult rv =
          nsPrintSettingsService::DeserializeToPrintSettings(data, settings);
      NS_ENSURE_SUCCESS(rv, rv);

      nsCOMPtr psWin = do_QueryInterface(settings);
      if (!settings) {
        return NS_ERROR_FAILURE;
      }

      if (XRE_IsContentProcess()) {
        psWin->SetDeviceName(data.deviceName());
        psWin->SetDriverName(data.driverName());

        if (data.devModeData().IsEmpty()) {
          psWin->SetDevMode(nullptr);
        } else {
          // Check minimum length of DEVMODE data.
          auto devModeDataLength = data.devModeData().Length();
          if (devModeDataLength < sizeof(DEVMODEW)) {
            NS_WARNING("DEVMODE data is too short.");
            return NS_ERROR_FAILURE;
          }

          DEVMODEW* devMode = reinterpret_cast(
              const_cast(data.devModeData().Elements()));

          // Check actual length of DEVMODE data.
          if ((devMode->dmSize + devMode->dmDriverExtra) != devModeDataLength) {
            NS_WARNING("DEVMODE length is incorrect.");
            return NS_ERROR_FAILURE;
          }

          psWin->SetDevMode(devMode);  // Copies
        }
      }

      return NS_OK;
    }

## Minimal test - lines (117, 127)

path: .spaces[2].metrics.cognitive.sum
old: 7.0
new: 0.0
path: .spaces[2].metrics.cognitive.average
old: 7.0
new: 0.0
path: .spaces[2].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[2].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[2].metrics.nargs.average
old: 2.0
new: 1.0
path: .spaces[2].metrics.nargs.sum
old: 2.0
new: 1.0
path: .spaces[2].metrics.loc.ploc
old: 25.0
new: 9.0
path: .spaces[2].metrics.loc.sloc
old: 25.0
new: 11.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 2.0
path: .spaces[2].metrics.loc.lloc
old: 12.0
new: 4.0
path: .spaces[2].metrics.cyclomatic.sum
old: 5.0
new: 1.0
path: .spaces[2].metrics.cyclomatic.average
old: 5.0
new: 1.0
path: .spaces[2].metrics.mi.mi_original
old: 82.72305108654508
new: 105.3974001211668
path: .spaces[2].metrics.mi.mi_sei
old: 44.15238287477253
new: 107.1359528256673
path: .spaces[2].metrics.mi.mi_visual_studio
old: 48.37605326698544
new: 61.63590650360632
path: .spaces[2].metrics.halstead.N2
old: 57.0
new: 16.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.3540136631735746
new: 1.752186126789239
path: .spaces[2].metrics.halstead.vocabulary
old: 45.0
new: 20.0
path: .spaces[2].metrics.halstead.time
old: 660.8529892583375
new: 59.72118822026174
path: .spaces[2].metrics.halstead.n1
old: 15.0
new: 9.0
path: .spaces[2].metrics.halstead.level
old: 0.07017543859649122
new: 0.15277777777777776
path: .spaces[2].metrics.halstead.difficulty
old: 14.25
new: 6.545454545454546
path: .spaces[2].metrics.halstead.N1
old: 95.0
new: 22.0
path: .spaces[2].metrics.halstead.effort
old: 11895.353806650077
new: 1074.9813879647113
path: .spaces[2].metrics.halstead.length
old: 152.0
new: 38.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 205.81007680238335
new: 66.58307281799108
path: .spaces[2].metrics.halstead.bugs
old: 0.1736988678931838
new: 0.03497942841987602
path: .spaces[2].metrics.halstead.n2
old: 30.0
new: 11.0
path: .spaces[2].metrics.halstead.volume
old: 834.7616706421105
new: 164.2332676057198

### Code

    nsresult nsPrintSettingsServiceWin::_CreatePrintSettings(
        nsIPrintSettings** _retval) {
      *_retval = nullptr;
      nsPrintSettingsWin* printSettings =
          new nsPrintSettingsWin();  // does not initially ref count
      NS_ENSURE_TRUE(printSettings, NS_ERROR_OUT_OF_MEMORY);

      NS_ADDREF(*_retval = printSettings);  // ref count

      return NS_OK;
    }