Global Metrics

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

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

path: .metrics.mi.mi_sei
old: 39.3915502845437
new: 36.6798428908176

path: .metrics.mi.mi_original
old: 62.682884944284
new: 58.56408689061831

path: .metrics.mi.mi_visual_studio
old: 36.65665786215438
new: 34.248004029601354

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

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

path: .metrics.cyclomatic.sum
old: 5.0
new: 10.0

path: .metrics.cyclomatic.average
old: 1.0
new: 2.0

path: .metrics.halstead.bugs
old: 0.08797763511458057
new: 0.4082612642519561

path: .metrics.halstead.n2
old: 56.0
new: 54.0

path: .metrics.halstead.length
old: 145.0
new: 274.0

path: .metrics.halstead.n1
old: 8.0
new: 24.0

path: .metrics.halstead.purity_ratio
old: 2.408357763001557
new: 1.5357774639931936

path: .metrics.halstead.level
old: 0.20289855072463767
new: 0.040178571428571425

path: .metrics.halstead.vocabulary
old: 64.0
new: 78.0

path: .metrics.halstead.N1
old: 76.0
new: 162.0

path: .metrics.halstead.estimated_program_length
old: 349.2118756352258
new: 420.80302513413505

path: .metrics.halstead.volume
old: 870.0
new: 1722.200207968256

path: .metrics.halstead.time
old: 238.21428571428572
new: 2381.313867807959

path: .metrics.halstead.N2
old: 69.0
new: 112.0

path: .metrics.halstead.difficulty
old: 4.928571428571429
new: 24.88888888888889

path: .metrics.halstead.effort
old: 4287.857142857143
new: 42863.64962054326

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

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

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

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

path: .metrics.loc.cloc
old: 9.0
new: 11.0

path: .metrics.loc.ploc
old: 60.0
new: 54.0

path: .metrics.loc.blank
old: 16.0
new: 17.0

path: .metrics.loc.sloc
old: 85.0
new: 82.0

path: .metrics.loc.lloc
old: 0.0
new: 12.0

Spaces Data

Minimal test - lines (64, 82)

path: .spaces[2].metrics.cognitive.average
old: null
new: 2.0

path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 2.0

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

path: .spaces[2].metrics.halstead.difficulty
old: 1.5
new: 15.11111111111111

path: .spaces[2].metrics.halstead.N1
old: 3.0
new: 62.0

path: .spaces[2].metrics.halstead.n1
old: 3.0
new: 17.0

path: .spaces[2].metrics.halstead.bugs
old: 0.002239505320238735
new: 0.14502284536501403

path: .spaces[2].metrics.halstead.time
old: 0.9674700395364008
new: 504.15491984453064

path: .spaces[2].metrics.halstead.effort
old: 17.414460711655217
new: 9074.788557201551

path: .spaces[2].metrics.halstead.n2
old: 2.0
new: 27.0

path: .spaces[2].metrics.halstead.purity_ratio
old: 1.3509775004326936
new: 1.798807553269722

path: .spaces[2].metrics.halstead.N2
old: 2.0
new: 48.0

path: .spaces[2].metrics.halstead.level
old: 0.6666666666666666
new: 0.0661764705882353

path: .spaces[2].metrics.halstead.length
old: 5.0
new: 110.0

path: .spaces[2].metrics.halstead.volume
old: 11.60964047443681
new: 600.5374780501027

path: .spaces[2].metrics.halstead.vocabulary
old: 5.0
new: 44.0

path: .spaces[2].metrics.halstead.estimated_program_length
old: 6.754887502163468
new: 197.8688308596694

path: .spaces[2].metrics.nargs.average
old: null
new: 2.0

path: .spaces[2].metrics.nargs.sum
old: 0.0
new: 2.0

path: .spaces[2].metrics.mi.mi_original
old: 140.22293461619367
new: 89.3413982724084

path: .spaces[2].metrics.mi.mi_sei
old: 126.6999002570717
new: 70.89570681025234

path: .spaces[2].metrics.mi.mi_visual_studio
old: 82.00171614982087
new: 52.24643173825053

path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 3.0

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

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

path: .spaces[2].metrics.loc.lloc
old: 0.0
new: 5.0

path: .spaces[2].metrics.loc.sloc
old: 3.0
new: 19.0

path: .spaces[2].metrics.loc.blank
old: 0.0
new: 3.0

path: .spaces[2].metrics.loc.ploc
old: 3.0
new: 15.0

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

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

Code

TEST(RWLock, SmokeTest)
{
  nsCOMPtr threads[sNumThreads];
  RWLock rwlock("test lock");
  mozilla::Atomic data(0);

  for (size_t i = 0; i < sNumThreads; ++i) {
    nsCOMPtr event = new RWLockRunnable(&rwlock, &data);
    NS_NewNamedThread("RWLockTester", getter_AddRefs(threads[i]), event);
  }

  // Wait for all the threads to finish.
  for (size_t i = 0; i < sNumThreads; ++i) {
    nsresult rv = threads[i]->Shutdown();
    EXPECT_TRUE(NS_SUCCEEDED(rv));
  }

  EXPECT_EQ(data, (sOuterIterations / sWriteLockIteration) * sNumThreads);
}

Minimal test - lines (23, 37)

path: .spaces[0].metrics.loc.sloc
old: 10.0
new: 15.0

path: .spaces[0].metrics.loc.blank
old: 0.0
new: 3.0

path: .spaces[0].metrics.loc.ploc
old: 10.0
new: 12.0

path: .spaces[0].metrics.halstead.volume
old: 96.2114326716684
new: 247.58797503894243

path: .spaces[0].metrics.halstead.bugs
old: 0.009171155120168624
new: 0.06302187353766961

path: .spaces[0].metrics.halstead.effort
old: 144.3171490075026
new: 2599.6737379088954

path: .spaces[0].metrics.halstead.length
old: 26.0
new: 54.0

path: .spaces[0].metrics.halstead.vocabulary
old: 13.0
new: 24.0

path: .spaces[0].metrics.halstead.n2
old: 10.0
new: 12.0

path: .spaces[0].metrics.halstead.difficulty
old: 1.5
new: 10.5

path: .spaces[0].metrics.halstead.n1
old: 3.0
new: 12.0

path: .spaces[0].metrics.halstead.time
old: 8.0176193893057
new: 144.4263187727164

path: .spaces[0].metrics.halstead.level
old: 0.6666666666666666
new: 0.09523809523809525

path: .spaces[0].metrics.halstead.estimated_program_length
old: 37.974168451037094
new: 86.03910001730775

path: .spaces[0].metrics.halstead.N1
old: 16.0
new: 33.0

path: .spaces[0].metrics.halstead.N2
old: 10.0
new: 21.0

path: .spaces[0].metrics.halstead.purity_ratio
old: 1.4605449404245037
new: 1.5933166669871806

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

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: 0.0

path: .spaces[0].metrics.mi.mi_original
old: 109.72207088806992
new: 98.00840367967126

path: .spaces[0].metrics.mi.mi_visual_studio
old: 64.16495373571341
new: 57.31485595302413

path: .spaces[0].metrics.mi.mi_sei
old: 82.6964554136775
new: 65.89902568090156

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

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

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

Code

class RWLockRunnable : public mozilla::Runnable {
 public:
  RWLockRunnable(RWLock* aRWLock, mozilla::Atomic* aSharedData)
      : mozilla::Runnable("RWLockRunnable"),
        mRWLock(aRWLock),
        mSharedData(aSharedData) {}

  NS_DECL_NSIRUNNABLE

 private:
  ~RWLockRunnable() = default;

  RWLock* mRWLock;
  mozilla::Atomic* mSharedData;
};

Minimal test - lines (40, 62)

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

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

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

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

path: .spaces[1].metrics.halstead.length
old: 13.0
new: 81.0

path: .spaces[1].metrics.halstead.N1
old: 7.0
new: 52.0

path: .spaces[1].metrics.halstead.effort
old: 86.37013046707142
new: 5576.132605352003

path: .spaces[1].metrics.halstead.vocabulary
old: 10.0
new: 33.0

path: .spaces[1].metrics.halstead.estimated_program_length
old: 23.509775004326936
new: 133.48686830125575

path: .spaces[1].metrics.halstead.level
old: 0.5
new: 0.07327586206896552

path: .spaces[1].metrics.halstead.purity_ratio
old: 1.808444231102072
new: 1.647986028410565

path: .spaces[1].metrics.halstead.difficulty
old: 2.0
new: 13.647058823529411

path: .spaces[1].metrics.halstead.volume
old: 43.18506523353571
new: 408.59592366803474

path: .spaces[1].metrics.halstead.N2
old: 6.0
new: 29.0

path: .spaces[1].metrics.halstead.bugs
old: 0.006513100741703149
new: 0.10481758291654523

path: .spaces[1].metrics.halstead.time
old: 4.798340581503968
new: 309.78514474177797

path: .spaces[1].metrics.halstead.n1
old: 4.0
new: 16.0

path: .spaces[1].metrics.halstead.n2
old: 6.0
new: 17.0

path: .spaces[1].metrics.mi.mi_sei
old: 104.90596993113904
new: 78.22898255849393

path: .spaces[1].metrics.mi.mi_original
old: 125.11653325745355
new: 88.01881483077315

path: .spaces[1].metrics.mi.mi_visual_studio
old: 73.16756330845239
new: 51.47299112910711

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

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

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

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

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

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

path: .spaces[1].metrics.loc.blank
old: 0.0
new: 4.0

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

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

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

Code

RWLockRunnable::Run() {
  for (size_t i = 0; i < sOuterIterations; ++i) {
    if (i % sWriteLockIteration == 0) {
      mozilla::AutoWriteLock lock(*mRWLock);

      ++(*mSharedData);
    } else {
      mozilla::AutoReadLock lock(*mRWLock);

      // Loop and try to force other threads to run, but check that our
      // shared data isn't being modified by them.
      size_t initialValue = *mSharedData;
      for (size_t j = 0; j < sInnerIterations; ++j) {
        EXPECT_EQ(initialValue, *mSharedData);

        // This is a magic yield call.
        PR_Sleep(PR_INTERVAL_NO_WAIT);
      }
    }
  }

  return NS_OK;
}