# Global Metrics

path: .metrics.nom.functions
old: 3.0
new: 2.0
path: .metrics.nom.total
old: 3.0
new: 2.0
path: .metrics.nargs.average
old: 0.3333333333333333
new: 0.5
path: .metrics.cognitive.sum
old: 0.0
new: 5.0
path: .metrics.cognitive.average
old: 0.0
new: 2.5
path: .metrics.cyclomatic.average
old: 1.2
new: 2.6666666666666665
path: .metrics.cyclomatic.sum
old: 12.0
new: 8.0
path: .metrics.loc.cloc
old: 58.0
new: 5.0
path: .metrics.loc.lloc
old: 0.0
new: 23.0
path: .metrics.loc.ploc
old: 59.0
new: 39.0
path: .metrics.loc.blank
old: 26.0
new: 16.0
path: .metrics.loc.sloc
old: 143.0
new: 60.0
path: .metrics.halstead.bugs
old: 0.23847373031413824
new: 0.2856813732212078
path: .metrics.halstead.volume
old: 1643.7013046707143
new: 1345.043650314424
path: .metrics.halstead.n2
old: 67.0
new: 52.0
path: .metrics.halstead.length
old: 260.0
new: 218.0
path: .metrics.halstead.N1
old: 140.0
new: 121.0
path: .metrics.halstead.N2
old: 120.0
new: 97.0
path: .metrics.halstead.vocabulary
old: 80.0
new: 72.0
path: .metrics.halstead.difficulty
old: 11.64179104477612
new: 18.653846153846153
path: .metrics.halstead.level
old: 0.0858974358974359
new: 0.053608247422680416
path: .metrics.halstead.time
old: 1063.090396055686
new: 1393.902073509606
path: .metrics.halstead.n1
old: 13.0
new: 20.0
path: .metrics.halstead.estimated_program_length
old: 454.5336920965049
new: 382.861427241084
path: .metrics.halstead.effort
old: 19135.627129002347
new: 25090.237323172907
path: .metrics.halstead.purity_ratio
old: 1.7482065080634803
new: 1.7562450790875417
path: .metrics.mi.mi_visual_studio
old: 28.852307871834725
new: 38.227995916124875
path: .metrics.mi.mi_sei
old: 38.40831289860112
new: 41.045240455468345
path: .metrics.mi.mi_original
old: 49.337446460837384
new: 65.36987301657354
path: .metrics.nexits.sum
old: 0.0
new: 6.0
path: .metrics.nexits.average
old: 0.0
new: 3.0

# Spaces Data

## Minimal test - lines (9, 58)

path: .spaces[0].metrics.cyclomatic.sum
old: 11.0
new: 6.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.2222222222222223
new: 6.0
path: .spaces[0].metrics.halstead.level
old: 0.08488063660477453
new: 0.05268817204301075
path: .spaces[0].metrics.halstead.bugs
old: 0.2365172957271224
new: 0.2782294468184387
path: .spaces[0].metrics.halstead.difficulty
old: 11.78125
new: 18.979591836734695
path: .spaces[0].metrics.halstead.length
old: 256.0
new: 208.0
path: .spaces[0].metrics.halstead.vocabulary
old: 77.0
new: 69.0
path: .spaces[0].metrics.halstead.N1
old: 140.0
new: 115.0
path: .spaces[0].metrics.halstead.n2
old: 64.0
new: 49.0
path: .spaces[0].metrics.halstead.volume
old: 1604.297354417895
new: 1270.5730870098591
path: .spaces[0].metrics.halstead.estimated_program_length
old: 432.1057163358342
new: 361.5593442593925
path: .spaces[0].metrics.halstead.effort
old: 18900.628206735822
new: 24114.958590187125
path: .spaces[0].metrics.halstead.n1
old: 13.0
new: 20.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.6879129544368523
new: 1.738266078170156
path: .spaces[0].metrics.halstead.time
old: 1050.0349003742124
new: 1339.7199216770623
path: .spaces[0].metrics.halstead.N2
old: 116.0
new: 93.0
path: .spaces[0].metrics.nargs.average
old: 0.3333333333333333
new: 1.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 30.96168903738195
new: 40.39746550303284
path: .spaces[0].metrics.mi.mi_sei
old: 40.794449627022075
new: 39.816208258856406
path: .spaces[0].metrics.mi.mi_original
old: 52.94448825392314
new: 69.07966601018616
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 5.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 5.0
path: .spaces[0].metrics.nom.total
old: 3.0
new: 1.0
path: .spaces[0].metrics.nom.functions
old: 3.0
new: 1.0
path: .spaces[0].metrics.loc.ploc
old: 54.0
new: 35.0
path: .spaces[0].metrics.loc.sloc
old: 117.0
new: 50.0
path: .spaces[0].metrics.loc.cloc
old: 39.0
new: 2.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 22.0
path: .spaces[0].metrics.loc.blank
old: 24.0
new: 13.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 5.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 5.0

### Code

    bool nsUserIdleServiceX::PollIdleTime(uint32_t* aIdleTime) {
      NS_OBJC_BEGIN_TRY_BLOCK_RETURN;

      kern_return_t rval;
      mach_port_t masterPort;

      rval = IOMasterPort(kIOMasterPortDefault, &masterPort);
      if (rval != KERN_SUCCESS) return false;

      io_iterator_t hidItr;
      rval = IOServiceGetMatchingServices(masterPort, IOServiceMatching("IOHIDSystem"), &hidItr);

      if (rval != KERN_SUCCESS) return false;
      NS_ASSERTION(hidItr, "Our iterator is null, but it ought not to be!");

      io_registry_entry_t entry = IOIteratorNext(hidItr);
      NS_ASSERTION(entry, "Our IO Registry Entry is null, but it shouldn't be!");

      IOObjectRelease(hidItr);

      NSMutableDictionary* hidProps;
      rval = IORegistryEntryCreateCFProperties(entry, (CFMutableDictionaryRef*)&hidProps,
                                               kCFAllocatorDefault, 0);
      if (rval != KERN_SUCCESS) return false;
      NS_ASSERTION(hidProps, "HIDProperties is null, but no error was returned.");
      [hidProps autorelease];

      id idleObj = [hidProps objectForKey:@"HIDIdleTime"];
      NS_ASSERTION([idleObj isKindOfClass:[NSData class]] || [idleObj isKindOfClass:[NSNumber class]],
                   "What we got for the idle object is not what we expect!");

      uint64_t time;
      if ([idleObj isKindOfClass:[NSData class]])
        [idleObj getBytes:&time length:sizeof(time)];
      else
        time = [idleObj unsignedLongLongValue];

      IOObjectRelease(entry);

      // convert to ms from ns
      time /= 1000000;
      if (time > UINT32_MAX)  // Overflow will occur
        return false;

      *aIdleTime = static_cast(time);

      return true;

      NS_OBJC_END_TRY_BLOCK_RETURN(false);
    }