Global Metrics

path: .metrics.halstead.n1
old: 19.0
new: 20.0

path: .metrics.halstead.volume
old: 52843.87140175083
new: 3488.6399617499583

path: .metrics.halstead.bugs
old: 2.916674543419937
new: 0.5613819771700606

path: .metrics.halstead.difficulty
old: 15.488851351351352
new: 19.81132075471698

path: .metrics.halstead.level
old: 0.06456256679826379
new: 0.05047619047619048

path: .metrics.halstead.N1
old: 2596.0
new: 290.0

path: .metrics.halstead.purity_ratio
old: 3.1278009950727834
new: 1.5991962601628926

path: .metrics.halstead.effort
old: 818490.8689716455
new: 69114.565279952

path: .metrics.halstead.time
old: 45471.71494286919
new: 3839.6980711084448

path: .metrics.halstead.vocabulary
old: 1499.0
new: 126.0

path: .metrics.halstead.n2
old: 1480.0
new: 106.0

path: .metrics.halstead.length
old: 5009.0
new: 500.0

path: .metrics.halstead.N2
old: 2413.0
new: 210.0

path: .metrics.halstead.estimated_program_length
old: 15667.155184319572
new: 799.5981300814464

path: .metrics.mi.mi_visual_studio
old: 0.0
new: 17.93037090322618

path: .metrics.mi.mi_sei
old: -69.61195665889596
new: 4.399605426958921

path: .metrics.mi.mi_original
old: -31.062091871646444
new: 30.660934244516767

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

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

path: .metrics.nargs.average
old: null
new: 0.75

path: .metrics.nargs.sum
old: 0.0
new: 9.0

path: .metrics.cyclomatic.average
old: 2.1818181818181817
new: 1.0434782608695652

path: .metrics.cyclomatic.sum
old: 72.0
new: 24.0

path: .metrics.cognitive.sum
old: 37.0
new: 1.0

path: .metrics.cognitive.average
old: null
new: 0.08333333333333333

path: .metrics.loc.cloc
old: 1336.0
new: 67.0

path: .metrics.loc.sloc
old: 2864.0
new: 300.0

path: .metrics.loc.lloc
old: 3.0
new: 18.0

path: .metrics.loc.ploc
old: 1308.0
new: 138.0

path: .metrics.loc.blank
old: 220.0
new: 95.0

path: .metrics.nexits.sum
old: 0.0
new: 6.0

path: .metrics.nexits.average
old: null
new: 0.5

Spaces Data

Minimal test - lines (141, 246)

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

path: .spaces[5].metrics.cognitive.average
old: null
new: 0.125

path: .spaces[5].metrics.mi.mi_original
old: 113.96941655574688
new: 57.441802830837176

path: .spaces[5].metrics.mi.mi_sei
old: 127.9184323240276
new: 30.000216682361724

path: .spaces[5].metrics.mi.mi_visual_studio
old: 66.64878161154789
new: 33.591697561893085

path: .spaces[5].metrics.nargs.average
old: null
new: 0.375

path: .spaces[5].metrics.nargs.sum
old: 0.0
new: 3.0

path: .spaces[5].metrics.cyclomatic.sum
old: 2.0
new: 10.0

path: .spaces[5].metrics.cyclomatic.average
old: 1.0
new: 1.1111111111111112

path: .spaces[5].metrics.nexits.sum
old: 0.0
new: 4.0

path: .spaces[5].metrics.nexits.average
old: null
new: 0.5

path: .spaces[5].metrics.halstead.time
old: 4.70606480109043
new: 1421.4643151417615

path: .spaces[5].metrics.halstead.volume
old: 56.47277761308516
new: 960.4488615822712

path: .spaces[5].metrics.halstead.estimated_program_length
old: 24.406371956566694
new: 191.15505477032977

path: .spaces[5].metrics.halstead.N1
old: 10.0
new: 103.0

path: .spaces[5].metrics.halstead.difficulty
old: 1.5
new: 26.64

path: .spaces[5].metrics.halstead.level
old: 0.6666666666666666
new: 0.03753753753753754

path: .spaces[5].metrics.halstead.n2
old: 7.0
new: 25.0

path: .spaces[5].metrics.halstead.N2
old: 7.0
new: 74.0

path: .spaces[5].metrics.halstead.effort
old: 84.70916641962773
new: 25586.35767255171

path: .spaces[5].metrics.halstead.bugs
old: 0.006429329504347988
new: 0.28943500614866496

path: .spaces[5].metrics.halstead.n1
old: 3.0
new: 18.0

path: .spaces[5].metrics.halstead.vocabulary
old: 10.0
new: 43.0

path: .spaces[5].metrics.halstead.length
old: 17.0
new: 177.0

path: .spaces[5].metrics.halstead.purity_ratio
old: 1.4356689386215702
new: 1.0799720608493206

path: .spaces[5].metrics.loc.sloc
old: 9.0
new: 106.0

path: .spaces[5].metrics.loc.lloc
old: 0.0
new: 11.0

path: .spaces[5].metrics.loc.ploc
old: 7.0
new: 46.0

path: .spaces[5].metrics.loc.blank
old: 0.0
new: 51.0

path: .spaces[5].metrics.loc.cloc
old: 3.0
new: 9.0

path: .spaces[5].metrics.nom.functions
old: 0.0
new: 8.0

path: .spaces[5].metrics.nom.total
old: 0.0
new: 8.0

Code

class RunningTimes {
 public:
  constexpr RunningTimes() = default;

  // Constructor with only a timestamp, useful when no measurements will be
  // taken.
  constexpr explicit RunningTimes(const mozilla::TimeStamp& aTimeStamp)
      : mPostMeasurementTimeStamp(aTimeStamp) {}

  constexpr void Clear() { *this = RunningTimes{}; }

  constexpr bool IsEmpty() const { return mKnownBits == 0; }

  // This should be called right after CPU measurements have been taken.
  void SetPostMeasurementTimeStamp(const mozilla::TimeStamp& aTimeStamp) {
    mPostMeasurementTimeStamp = aTimeStamp;
  }

  const mozilla::TimeStamp& PostMeasurementTimeStamp() const {
    return mPostMeasurementTimeStamp;
  }

  // Should be filled for any registered thread.

#define RUNNING_TIME_MEMBER(index, name, unit, jsonProperty)          \
  constexpr bool Is##name##unit##Known() const {                      \
    return (mKnownBits & mGot##name##unit) != 0;                      \
  }                                                                   \
                                                                      \
  constexpr void Clear##name##unit() {                                \
    m##name##unit = 0;                                                \
    mKnownBits &= ~mGot##name##unit;                                  \
  }                                                                   \
                                                                      \
  constexpr void Reset##name##unit(uint64_t a##name##unit) {          \
    m##name##unit = a##name##unit;                                    \
    mKnownBits |= mGot##name##unit;                                   \
  }                                                                   \
                                                                      \
  constexpr void Set##name##unit(uint64_t a##name##unit) {            \
    MOZ_ASSERT(!Is##name##unit##Known(), #name #unit " already set"); \
    Reset##name##unit(a##name##unit);                                 \
  }                                                                   \
                                                                      \
  constexpr mozilla::Maybe Get##name##unit() const {        \
    if (Is##name##unit##Known()) {                                    \
      return mozilla::Some(m##name##unit);                            \
    }                                                                 \
    return mozilla::Nothing{};                                        \
  }

  PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_MEMBER)

#undef RUNNING_TIME_MEMBER

  // Take values from another RunningTimes.
  RunningTimes& TakeFrom(RunningTimes& aOther) {
    if (!aOther.IsEmpty()) {
#define RUNNING_TIME_TAKE(index, name, unit, jsonProperty)   \
  if (aOther.Is##name##unit##Known()) {                      \
    Set##name##unit(std::exchange(aOther.m##name##unit, 0)); \
  }

      PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_TAKE)

#undef RUNNING_TIME_TAKE

      aOther.mKnownBits = 0;
    }
    return *this;
  }

  // Difference from `aBefore` to `this`. Any unknown makes the result unknown.
  // PostMeasurementTimeStamp set to `this` PostMeasurementTimeStamp, to keep
  // the most recent timestamp associated with the end of the interval over
  // which the difference applies.
  RunningTimes operator-(const RunningTimes& aBefore) const {
    RunningTimes diff;
    diff.mPostMeasurementTimeStamp = mPostMeasurementTimeStamp;
#define RUNNING_TIME_SUB(index, name, unit, jsonProperty)           \
  if (Is##name##unit##Known() && aBefore.Is##name##unit##Known()) { \
    diff.Set##name##unit(m##name##unit - aBefore.m##name##unit);    \
  }

    PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_SUB)

#undef RUNNING_TIME_SUB
    return diff;
  }

 private:
  friend mozilla::ProfileBufferEntryWriter::Serializer;
  friend mozilla::ProfileBufferEntryReader::Deserializer;

  mozilla::TimeStamp mPostMeasurementTimeStamp;

  uint32_t mKnownBits = 0u;

#define RUNNING_TIME_MEMBER(index, name, unit, jsonProperty) \
  static constexpr uint32_t mGot##name##unit = 1u << index;  \
  uint64_t m##name##unit = 0;

  PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_MEMBER)

#undef RUNNING_TIME_MEMBER
};

Minimal test - lines (249, 269)

path: .spaces[6].metrics.nargs.average
old: null
new: 1.5

path: .spaces[6].metrics.nargs.sum
old: 0.0
new: 3.0

path: .spaces[6].metrics.halstead.volume
old: 0.0
new: 320.0

path: .spaces[6].metrics.halstead.n1
old: 0.0
new: 14.0

path: .spaces[6].metrics.halstead.purity_ratio
old: null
new: 2.005650295855751

path: .spaces[6].metrics.halstead.N1
old: 0.0
new: 36.0

path: .spaces[6].metrics.halstead.time
old: 0.0
new: 193.58024691358025

path: .spaces[6].metrics.halstead.difficulty
old: 0.0
new: 10.88888888888889

path: .spaces[6].metrics.halstead.n2
old: 1.0
new: 18.0

path: .spaces[6].metrics.halstead.vocabulary
old: 1.0
new: 32.0

path: .spaces[6].metrics.halstead.effort
old: 0.0
new: 3484.4444444444443

path: .spaces[6].metrics.halstead.length
old: 1.0
new: 64.0

path: .spaces[6].metrics.halstead.estimated_program_length
old: null
new: 128.36161893476807

path: .spaces[6].metrics.halstead.N2
old: 1.0
new: 28.0

path: .spaces[6].metrics.halstead.bugs
old: 0.0
new: 0.07661276001857677

path: .spaces[6].metrics.halstead.level
old: null
new: 0.09183673469387754

path: .spaces[6].metrics.nexits.sum
old: 0.0
new: 1.0

path: .spaces[6].metrics.nexits.average
old: null
new: 0.5

path: .spaces[6].metrics.cognitive.average
old: null
new: 0.0

path: .spaces[6].metrics.loc.lloc
old: 0.0
new: 3.0

path: .spaces[6].metrics.loc.blank
old: 0.0
new: 6.0

path: .spaces[6].metrics.loc.sloc
old: 1.0
new: 21.0

path: .spaces[6].metrics.loc.ploc
old: 1.0
new: 15.0

path: .spaces[6].metrics.cyclomatic.sum
old: 1.0
new: 3.0

path: .spaces[6].metrics.nom.total
old: 0.0
new: 2.0

path: .spaces[6].metrics.nom.functions
old: 0.0
new: 2.0

path: .spaces[6].metrics.mi.mi_original
old: null
new: 90.99346733075294

path: .spaces[6].metrics.mi.mi_sei
old: null
new: 55.8804316575698

path: .spaces[6].metrics.mi.mi_visual_studio
old: null
new: 53.21255399459236

Code

struct mozilla::ProfileBufferEntryWriter::Serializer {
  static Length Bytes(const RunningTimes& aRunningTimes) {
    return ULEB128Size(aRunningTimes.mKnownBits) +
           mozilla::CountPopulation32(aRunningTimes.mKnownBits) *
               sizeof(uint64_t);
  }

  static void Write(ProfileBufferEntryWriter& aEW,
                    const RunningTimes& aRunningTimes) {
    aEW.WriteULEB128(aRunningTimes.mKnownBits);

#define RUNNING_TIME_SERIALIZE(index, name, unit, jsonProperty) \
  if (aRunningTimes.Is##name##unit##Known()) {                  \
    aEW.WriteObject(aRunningTimes.m##name##unit);               \
  }

    PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_SERIALIZE)

#undef RUNNING_TIME_SERIALIZE
  }
};

Minimal test - lines (272, 298)

path: .spaces[7].metrics.nexits.average
old: null
new: 0.5

path: .spaces[7].metrics.nexits.sum
old: 0.0
new: 1.0

path: .spaces[7].metrics.nom.total
old: 0.0
new: 2.0

path: .spaces[7].metrics.nom.functions
old: 0.0
new: 2.0

path: .spaces[7].metrics.cognitive.average
old: null
new: 0.0

path: .spaces[7].metrics.cyclomatic.sum
old: 1.0
new: 3.0

path: .spaces[7].metrics.halstead.length
old: 12.0
new: 62.0

path: .spaces[7].metrics.halstead.difficulty
old: 2.0
new: 10.5

path: .spaces[7].metrics.halstead.estimated_program_length
old: 19.60964047443681
new: 107.01955000865388

path: .spaces[7].metrics.halstead.purity_ratio
old: 1.6341367062030674
new: 1.7261217743331272

path: .spaces[7].metrics.halstead.time
old: 4.22656666858975
new: 173.86600301441666

path: .spaces[7].metrics.halstead.vocabulary
old: 9.0
new: 28.0

path: .spaces[7].metrics.halstead.volume
old: 38.039100017307746
new: 298.0560051675714

path: .spaces[7].metrics.halstead.effort
old: 76.07820003461549
new: 3129.5880542595

path: .spaces[7].metrics.halstead.N1
old: 7.0
new: 34.0

path: .spaces[7].metrics.halstead.n1
old: 4.0
new: 12.0

path: .spaces[7].metrics.halstead.n2
old: 5.0
new: 16.0

path: .spaces[7].metrics.halstead.bugs
old: 0.0059848356844364944
new: 0.07131871816861657

path: .spaces[7].metrics.halstead.level
old: 0.5
new: 0.09523809523809525

path: .spaces[7].metrics.halstead.N2
old: 5.0
new: 28.0

path: .spaces[7].metrics.nargs.average
old: null
new: 1.5

path: .spaces[7].metrics.nargs.sum
old: 0.0
new: 3.0

path: .spaces[7].metrics.loc.cloc
old: 2.0
new: 4.0

path: .spaces[7].metrics.loc.lloc
old: 0.0
new: 4.0

path: .spaces[7].metrics.loc.sloc
old: 6.0
new: 27.0

path: .spaces[7].metrics.loc.blank
old: 0.0
new: 8.0

path: .spaces[7].metrics.loc.ploc
old: 5.0
new: 15.0

path: .spaces[7].metrics.mi.mi_sei
old: 140.5892017250539
new: 78.61835097713342

path: .spaces[7].metrics.mi.mi_visual_studio
old: 71.82614081290335
new: 51.04770728733476

path: .spaces[7].metrics.mi.mi_original
old: 122.82270079006472
new: 87.29157946134245

Code

struct mozilla::ProfileBufferEntryReader::Deserializer {
  static void ReadInto(ProfileBufferEntryReader& aER,
                       RunningTimes& aRunningTimes) {
    aRunningTimes = Read(aER);
  }

  static RunningTimes Read(ProfileBufferEntryReader& aER) {
    // Start with empty running times, everything is cleared.
    RunningTimes times;

    // This sets all the bits into mKnownBits, we don't need to modify it
    // further.
    times.mKnownBits = aER.ReadULEB128();

    // For each member that should be known, read its value.
#define RUNNING_TIME_DESERIALIZE(index, name, unit, jsonProperty) \
  if (times.Is##name##unit##Known()) {                            \
    aER.ReadIntoObject(times.m##name##unit);                      \
  }

    PROFILER_FOR_EACH_RUNNING_TIME(RUNNING_TIME_DESERIALIZE)

#undef RUNNING_TIME_DESERIALIZE

    return times;
  }
};

Minimal test - lines (77, 79)

path: .spaces[3].metrics.mi.mi_visual_studio
old: 51.635128354665085
new: 80.40121985172942

path: .spaces[3].metrics.mi.mi_sei
old: 77.00114602066648
new: 122.75146225357946

path: .spaces[3].metrics.mi.mi_original
old: 88.29606948647731
new: 137.4860859464573

path: .spaces[3].metrics.loc.sloc
old: 26.0
new: 3.0

path: .spaces[3].metrics.loc.blank
old: 2.0
new: 0.0

path: .spaces[3].metrics.loc.ploc
old: 21.0
new: 3.0

path: .spaces[3].metrics.loc.cloc
old: 3.0
new: 0.0

path: .spaces[3].metrics.halstead.bugs
old: 0.02463833887226839
new: 0.004471319041702271

path: .spaces[3].metrics.halstead.volume
old: 288.85263754543286
new: 19.651484454403228

path: .spaces[3].metrics.halstead.vocabulary
old: 24.0
new: 7.0

path: .spaces[3].metrics.halstead.N1
old: 41.0
new: 5.0

path: .spaces[3].metrics.halstead.estimated_program_length
old: 94.43856189774723
new: 13.60964047443681

path: .spaces[3].metrics.halstead.length
old: 63.0
new: 7.0

path: .spaces[3].metrics.halstead.n1
old: 4.0
new: 5.0

path: .spaces[3].metrics.halstead.purity_ratio
old: 1.4990247920277342
new: 1.944234353490973

path: .spaces[3].metrics.halstead.effort
old: 635.4758025999523
new: 49.12871113600807

path: .spaces[3].metrics.halstead.time
old: 35.30421125555291
new: 2.7293728408893374

path: .spaces[3].metrics.halstead.n2
old: 20.0
new: 2.0

path: .spaces[3].metrics.halstead.difficulty
old: 2.2
new: 2.5

path: .spaces[3].metrics.halstead.level
old: 0.4545454545454546
new: 0.4

path: .spaces[3].metrics.halstead.N2
old: 22.0
new: 2.0

path: .spaces[3].metrics.cyclomatic.sum
old: 2.0
new: 1.0

Code

struct PlatformDataDestructor {
  void operator()(PlatformData*);
};

Minimal test - lines (85, 87)

path: .spaces[4].metrics.mi.mi_original
old: null
new: 141.92938490684145

path: .spaces[4].metrics.mi.mi_visual_studio
old: null
new: 82.99964029639851

path: .spaces[4].metrics.mi.mi_sei
old: null
new: 129.26360748831726

path: .spaces[4].metrics.loc.sloc
old: 1.0
new: 3.0

path: .spaces[4].metrics.loc.ploc
old: 1.0
new: 3.0

path: .spaces[4].metrics.cyclomatic.sum
old: 1.0
new: 2.0

path: .spaces[4].metrics.halstead.volume
old: 0.0
new: 8.0

path: .spaces[4].metrics.halstead.time
old: 0.0
new: 0.4444444444444444

path: .spaces[4].metrics.halstead.difficulty
old: 0.0
new: 1.0

path: .spaces[4].metrics.halstead.level
old: null
new: 1.0

path: .spaces[4].metrics.halstead.effort
old: 0.0
new: 8.0

path: .spaces[4].metrics.halstead.N2
old: 1.0
new: 2.0

path: .spaces[4].metrics.halstead.length
old: 1.0
new: 4.0

path: .spaces[4].metrics.halstead.vocabulary
old: 1.0
new: 4.0

path: .spaces[4].metrics.halstead.N1
old: 0.0
new: 2.0

path: .spaces[4].metrics.halstead.purity_ratio
old: null
new: 1.0

path: .spaces[4].metrics.halstead.estimated_program_length
old: null
new: 4.0

path: .spaces[4].metrics.halstead.bugs
old: 0.0
new: 0.0013333333333333333

path: .spaces[4].metrics.halstead.n1
old: 0.0
new: 2.0

path: .spaces[4].metrics.halstead.n2
old: 1.0
new: 2.0

Code

namespace mozilla {
class JSONWriter;
}

Minimal test - lines (143, 143)

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

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

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

path: .spaces[5].spaces[0].metrics.mi.mi_visual_studio
old: null
new: 92.40962204246613

path: .spaces[5].spaces[0].metrics.mi.mi_sei
old: null
new: 152.37629276875444

path: .spaces[5].spaces[0].metrics.mi.mi_original
old: null
new: 158.02045369261705

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

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

path: .spaces[5].spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.6

path: .spaces[5].spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 5.0

path: .spaces[5].spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.002712967490108627

path: .spaces[5].spaces[0].metrics.halstead.n1
old: 0.0
new: 4.0

path: .spaces[5].spaces[0].metrics.halstead.time
old: 0.0
new: 1.289960052715201

path: .spaces[5].spaces[0].metrics.halstead.difficulty
old: 0.0
new: 2.0

path: .spaces[5].spaces[0].metrics.halstead.estimated_program_length
old: null
new: 8.0

path: .spaces[5].spaces[0].metrics.halstead.level
old: null
new: 0.5

path: .spaces[5].spaces[0].metrics.halstead.effort
old: 0.0
new: 23.21928094887362

path: .spaces[5].spaces[0].metrics.halstead.volume
old: 0.0
new: 11.60964047443681

path: .spaces[5].spaces[0].metrics.halstead.N1
old: 0.0
new: 4.0

path: .spaces[5].spaces[0].metrics.halstead.length
old: 1.0
new: 5.0

Code

  constexpr RunningTimes() = default;

Minimal test - lines (48, 50)

path: .spaces[1].metrics.mi.mi_original
old: null
new: 141.92938490684145

path: .spaces[1].metrics.mi.mi_visual_studio
old: null
new: 82.99964029639851

path: .spaces[1].metrics.mi.mi_sei
old: null
new: 129.26360748831726

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

path: .spaces[1].metrics.halstead.effort
old: 0.0
new: 8.0

path: .spaces[1].metrics.halstead.N1
old: 0.0
new: 2.0

path: .spaces[1].metrics.halstead.N2
old: 1.0
new: 2.0

path: .spaces[1].metrics.halstead.length
old: 1.0
new: 4.0

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

path: .spaces[1].metrics.halstead.vocabulary
old: 1.0
new: 4.0

path: .spaces[1].metrics.halstead.bugs
old: 0.0
new: 0.0013333333333333333

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

path: .spaces[1].metrics.halstead.n2
old: 1.0
new: 2.0

path: .spaces[1].metrics.halstead.volume
old: 0.0
new: 8.0

path: .spaces[1].metrics.halstead.estimated_program_length
old: null
new: 4.0

path: .spaces[1].metrics.halstead.purity_ratio
old: null
new: 1.0

path: .spaces[1].metrics.halstead.time
old: 0.0
new: 0.4444444444444444

path: .spaces[1].metrics.loc.sloc
old: 1.0
new: 3.0

path: .spaces[1].metrics.loc.ploc
old: 1.0
new: 3.0

path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 2.0

Code

namespace mozilla {
struct SymbolTable;
}

Minimal test - lines (73, 73)

path: .spaces[2].metrics.mi.mi_sei
old: 88.3635755463951
new: null

path: .spaces[2].metrics.mi.mi_visual_studio
old: 46.72833471160905
new: null

path: .spaces[2].metrics.mi.mi_original
old: 79.90545235685147
new: null

path: .spaces[2].metrics.halstead.n2
old: 25.0
new: 1.0

path: .spaces[2].metrics.halstead.length
old: 57.0
new: 1.0

path: .spaces[2].metrics.halstead.volume
old: 276.9049167222716
new: 0.0

path: .spaces[2].metrics.halstead.n1
old: 4.0
new: 0.0

path: .spaces[2].metrics.halstead.time
old: 33.22859000667259
new: 0.0

path: .spaces[2].metrics.halstead.bugs
old: 0.023662921199721396
new: 0.0

path: .spaces[2].metrics.halstead.difficulty
old: 2.16
new: 0.0

path: .spaces[2].metrics.halstead.estimated_program_length
old: 124.09640474436812
new: null

path: .spaces[2].metrics.halstead.N1
old: 30.0
new: 0.0

path: .spaces[2].metrics.halstead.effort
old: 598.1146201201067
new: 0.0

path: .spaces[2].metrics.halstead.purity_ratio
old: 2.1771299077959316
new: null

path: .spaces[2].metrics.halstead.level
old: 0.4629629629629629
new: null

path: .spaces[2].metrics.halstead.vocabulary
old: 29.0
new: 1.0

path: .spaces[2].metrics.halstead.N2
old: 27.0
new: 1.0

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

path: .spaces[2].metrics.loc.ploc
old: 24.0
new: 1.0

path: .spaces[2].metrics.loc.sloc
old: 43.0
new: 1.0

path: .spaces[2].metrics.loc.cloc
old: 31.0
new: 0.0

Code

class PlatformData;