Global Metrics
path: .metrics.cognitive.average
old: 0.0
new: 0.1
path: .metrics.cognitive.sum
old: 0.0
new: 1.0
path: .metrics.halstead.purity_ratio
old: 2.3455532121088987
new: 1.3898773002021771
path: .metrics.halstead.time
old: 459.2815862071593
new: 2136.4082141912786
path: .metrics.halstead.N2
old: 74.0
new: 132.0
path: .metrics.halstead.N1
old: 79.0
new: 177.0
path: .metrics.halstead.volume
old: 928.1116461400392
new: 1942.1892856284348
path: .metrics.halstead.vocabulary
old: 67.0
new: 78.0
path: .metrics.halstead.n2
old: 54.0
new: 60.0
path: .metrics.halstead.level
old: 0.11226611226611229
new: 0.050505050505050504
path: .metrics.halstead.bugs
old: 0.13628449143039165
new: 0.3797664323946158
path: .metrics.halstead.effort
old: 8267.068551728868
new: 38455.34785544301
path: .metrics.halstead.n1
old: 13.0
new: 18.0
path: .metrics.halstead.estimated_program_length
old: 358.8696414526615
new: 429.4720857624727
path: .metrics.halstead.difficulty
old: 8.907407407407407
new: 19.8
path: .metrics.halstead.length
old: 153.0
new: 309.0
path: .metrics.nom.functions
old: 1.0
new: 10.0
path: .metrics.nom.total
old: 1.0
new: 10.0
path: .metrics.cyclomatic.average
old: 1.0
new: 1.1111111111111112
path: .metrics.cyclomatic.sum
old: 7.0
new: 20.0
path: .metrics.loc.blank
old: 17.0
new: 21.0
path: .metrics.loc.ploc
old: 42.0
new: 77.0
path: .metrics.loc.sloc
old: 83.0
new: 132.0
path: .metrics.loc.lloc
old: 1.0
new: 6.0
path: .metrics.loc.cloc
old: 24.0
new: 34.0
path: .metrics.mi.mi_sei
old: 51.85134556142588
new: 30.864061621199586
path: .metrics.mi.mi_visual_studio
old: 36.41660326167578
new: 28.027157347222055
path: .metrics.mi.mi_original
old: 62.272391577465584
new: 47.926439063749726
path: .metrics.nexits.sum
old: 1.0
new: 4.0
path: .metrics.nexits.average
old: 1.0
new: 0.4
path: .metrics.nargs.average
old: 0.0
new: 1.0
path: .metrics.nargs.sum
old: 0.0
new: 10.0
Spaces Data
Minimal test - lines (17, 130)
path: .spaces[1].metrics.nexits.sum
old: 0.0
new: 4.0
path: .spaces[1].metrics.nexits.average
old: null
new: 0.4
path: .spaces[1].metrics.mi.mi_sei
old: null
new: 33.902594874200474
path: .spaces[1].metrics.mi.mi_visual_studio
old: null
new: 29.811401574537825
path: .spaces[1].metrics.mi.mi_original
old: null
new: 50.97749669245968
path: .spaces[1].metrics.nom.functions
old: 0.0
new: 10.0
path: .spaces[1].metrics.nom.total
old: 0.0
new: 10.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 27.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 18.0
path: .spaces[1].metrics.loc.ploc
old: 1.0
new: 69.0
path: .spaces[1].metrics.loc.sloc
old: 1.0
new: 114.0
path: .spaces[1].metrics.loc.lloc
old: 0.0
new: 6.0
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 1.125
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 18.0
path: .spaces[1].metrics.halstead.N2
old: 1.0
new: 125.0
path: .spaces[1].metrics.halstead.effort
old: 0.0
new: 38109.6243863772
path: .spaces[1].metrics.halstead.estimated_program_length
old: null
new: 393.0334342698179
path: .spaces[1].metrics.halstead.level
old: null
new: 0.04888888888888889
path: .spaces[1].metrics.halstead.purity_ratio
old: null
new: 1.3057589178399267
path: .spaces[1].metrics.halstead.volume
old: 0.0
new: 1863.1371922228852
path: .spaces[1].metrics.halstead.N1
old: 0.0
new: 176.0
path: .spaces[1].metrics.halstead.n1
old: 0.0
new: 18.0
path: .spaces[1].metrics.halstead.difficulty
old: 0.0
new: 20.454545454545453
path: .spaces[1].metrics.halstead.vocabulary
old: 1.0
new: 73.0
path: .spaces[1].metrics.halstead.n2
old: 1.0
new: 55.0
path: .spaces[1].metrics.halstead.bugs
old: 0.0
new: 0.37748687625066185
path: .spaces[1].metrics.halstead.length
old: 1.0
new: 301.0
path: .spaces[1].metrics.halstead.time
old: 0.0
new: 2117.201354798733
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[1].metrics.cognitive.average
old: null
new: 0.1
path: .spaces[1].metrics.nargs.average
old: null
new: 1.0
path: .spaces[1].metrics.nargs.sum
old: 0.0
new: 10.0
Code
namespace mozilla {
enum class EventQueuePriority {
Idle,
DeferredTimers,
InputLow,
Normal,
MediumHigh,
InputHigh,
High,
Count
};
class IdlePeriodState;
namespace detail {
// EventQueue is our unsynchronized event queue implementation. It is a queue
// of runnables used for non-main thread, as well as optionally providing
// forwarding to TaskController.
//
// Since EventQueue is unsynchronized, it should be wrapped in an outer
// SynchronizedEventQueue implementation (like ThreadEventQueue).
template
class EventQueueInternal {
public:
explicit EventQueueInternal(bool aForwardToTC) : mForwardToTC(aForwardToTC) {}
// Add an event to the end of the queue. Implementors are free to use
// aPriority however they wish. If the runnable supports
// nsIRunnablePriority and the implementing class supports
// prioritization, aPriority represents the result of calling
// nsIRunnablePriority::GetPriority(). *aDelay is time the event has
// already been delayed (used when moving an event from one queue to
// another)
void PutEvent(already_AddRefed&& aEvent,
EventQueuePriority aPriority, const MutexAutoLock& aProofOfLock,
mozilla::TimeDuration* aDelay = nullptr);
// Get an event from the front of the queue. This should return null if the
// queue is non-empty but the event in front is not ready to run.
// *aLastEventDelay is the time the event spent in queues before being
// retrieved.
already_AddRefed GetEvent(
const MutexAutoLock& aProofOfLock,
mozilla::TimeDuration* aLastEventDelay = nullptr);
// Returns true if the queue is empty. Implies !HasReadyEvent().
bool IsEmpty(const MutexAutoLock& aProofOfLock);
// Returns true if the queue is non-empty and if the event in front is ready
// to run. Implies !IsEmpty(). This should return true iff GetEvent returns a
// non-null value.
bool HasReadyEvent(const MutexAutoLock& aProofOfLock);
// Returns the number of events in the queue.
size_t Count(const MutexAutoLock& aProofOfLock) const;
// For some reason, if we put this in the .cpp file the linker can't find it
already_AddRefed PeekEvent(const MutexAutoLock& aProofOfLock) {
if (mQueue.IsEmpty()) {
return nullptr;
}
nsCOMPtr result = mQueue.FirstElement();
return result.forget();
}
void EnableInputEventPrioritization(const MutexAutoLock& aProofOfLock) {}
void FlushInputEventPrioritization(const MutexAutoLock& aProofOfLock) {}
void SuspendInputEventPrioritization(const MutexAutoLock& aProofOfLock) {}
void ResumeInputEventPrioritization(const MutexAutoLock& aProofOfLock) {}
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
}
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
size_t size = mQueue.ShallowSizeOfExcludingThis(aMallocSizeOf);
#ifdef MOZ_GECKO_PROFILER
size += mDispatchTimes.ShallowSizeOfExcludingThis(aMallocSizeOf);
#endif
return size;
}
private:
mozilla::Queue, ItemsPerPage> mQueue;
#ifdef MOZ_GECKO_PROFILER
// This queue is only populated when the profiler is turned on.
mozilla::Queue mDispatchTimes;
TimeDuration mLastEventDelay;
#endif
// This indicates PutEvent forwards runnables to the TaskController. This
// should be true for the top level event queue on the main thread.
bool mForwardToTC;
};
} // namespace detail
class EventQueue final : public mozilla::detail::EventQueueInternal<16> {
public:
explicit EventQueue(bool aForwardToTC = false)
: mozilla::detail::EventQueueInternal<16>(aForwardToTC) {}
};
template
class EventQueueSized final
: public mozilla::detail::EventQueueInternal {
public:
explicit EventQueueSized(bool aForwardToTC = false)
: mozilla::detail::EventQueueInternal(aForwardToTC) {}
};
} // namespace mozilla