diff --git a/src/histogram.cc b/src/histogram.cc index d21cf2883a0ca8..6fbb0eda6c0792 100644 --- a/src/histogram.cc +++ b/src/histogram.cc @@ -1,8 +1,10 @@ #include "histogram.h" // NOLINT(build/include_inline) -#include "histogram-inl.h" #include "base_object-inl.h" +#include "histogram-inl.h" #include "memory_tracker-inl.h" #include "node_errors.h" +#include "node_external_reference.h" + namespace node { using v8::BigInt; @@ -197,6 +199,21 @@ Local HistogramBase::GetConstructorTemplate( return tmpl; } +void HistogramBase::RegisterExternalReferences( + ExternalReferenceRegistry* registry) { + registry->Register(New); + registry->Register(GetExceeds); + registry->Register(GetMin); + registry->Register(GetMax); + registry->Register(GetMean); + registry->Register(GetStddev); + registry->Register(GetPercentile); + registry->Register(GetPercentiles); + registry->Register(DoReset); + registry->Register(Record); + registry->Register(RecordDelta); +} + void HistogramBase::Initialize(Environment* env, Local target) { env->SetConstructorFunction(target, "Histogram", GetConstructorTemplate(env)); } @@ -240,6 +257,20 @@ Local IntervalHistogram::GetConstructorTemplate( return tmpl; } +void IntervalHistogram::RegisterExternalReferences( + ExternalReferenceRegistry* registry) { + registry->Register(GetExceeds); + registry->Register(GetMin); + registry->Register(GetMax); + registry->Register(GetMean); + registry->Register(GetStddev); + registry->Register(GetPercentile); + registry->Register(GetPercentiles); + registry->Register(DoReset); + registry->Register(Start); + registry->Register(Stop); +} + IntervalHistogram::IntervalHistogram( Environment* env, Local wrap, diff --git a/src/histogram.h b/src/histogram.h index 8c164f54cfd9ed..00b4f7796f8be6 100644 --- a/src/histogram.h +++ b/src/histogram.h @@ -18,6 +18,8 @@ namespace node { +class ExternalReferenceRegistry; + constexpr int kDefaultHistogramFigures = 3; class Histogram : public MemoryRetainer { @@ -78,6 +80,7 @@ class HistogramBase : public BaseObject, public HistogramImpl { static v8::Local GetConstructorTemplate( Environment* env); static void Initialize(Environment* env, v8::Local target); + static void RegisterExternalReferences(ExternalReferenceRegistry* registry); static BaseObjectPtr Create( Environment* env, @@ -154,6 +157,8 @@ class IntervalHistogram : public HandleWrap, public HistogramImpl { RESET }; + static void RegisterExternalReferences(ExternalReferenceRegistry* registry); + static v8::Local GetConstructorTemplate( Environment* env); diff --git a/src/node_external_reference.h b/src/node_external_reference.h index 2d6bc34322fd61..094558783f770e 100644 --- a/src/node_external_reference.h +++ b/src/node_external_reference.h @@ -61,6 +61,7 @@ class ExternalReferenceRegistry { V(heap_utils) \ V(messaging) \ V(native_module) \ + V(performance) \ V(process_methods) \ V(process_object) \ V(task_queue) \ diff --git a/src/node_perf.cc b/src/node_perf.cc index 41c93ea1640e5e..acbb0e0d902c3e 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -1,10 +1,11 @@ +#include "node_perf.h" #include "aliased_buffer.h" #include "env-inl.h" #include "histogram-inl.h" #include "memory_tracker-inl.h" -#include "node_internals.h" -#include "node_perf.h" #include "node_buffer.h" +#include "node_external_reference.h" +#include "node_internals.h" #include "node_process-inl.h" #include "util-inl.h" @@ -250,6 +251,12 @@ void ELDHistogram::Initialize(Environment* env, Local target) { env->SetConstructorFunction(target, "ELDHistogram", tmpl); } +void ELDHistogram::RegisterExternalReferences( + ExternalReferenceRegistry* registry) { + registry->Register(New); + IntervalHistogram::RegisterExternalReferences(registry); +} + ELDHistogram::ELDHistogram( Environment* env, Local wrap, @@ -364,7 +371,21 @@ void Initialize(Local target, ELDHistogram::Initialize(env, target); } +void RegisterExternalReferences(ExternalReferenceRegistry* registry) { + registry->Register(MarkMilestone); + registry->Register(SetupPerformanceObservers); + registry->Register(InstallGarbageCollectionTracking); + registry->Register(RemoveGarbageCollectionTracking); + registry->Register(Notify); + registry->Register(LoopIdleTime); + registry->Register(GetTimeOrigin); + registry->Register(GetTimeOriginTimeStamp); + HistogramBase::RegisterExternalReferences(registry); + ELDHistogram::RegisterExternalReferences(registry); +} } // namespace performance } // namespace node NODE_MODULE_CONTEXT_AWARE_INTERNAL(performance, node::performance::Initialize) +NODE_MODULE_EXTERNAL_REFERENCE(performance, + node::performance::RegisterExternalReferences) diff --git a/src/node_perf.h b/src/node_perf.h index 33cf9f2ec651bf..64913ab9de7c61 100644 --- a/src/node_perf.h +++ b/src/node_perf.h @@ -3,10 +3,11 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "node.h" -#include "node_perf_common.h" #include "base_object-inl.h" #include "histogram.h" +#include "node.h" +#include "node_internals.h" +#include "node_perf_common.h" #include "v8.h" #include "uv.h" @@ -16,6 +17,7 @@ namespace node { class Environment; +class ExternalReferenceRegistry; namespace performance { @@ -160,6 +162,7 @@ using GCPerformanceEntry = PerformanceEntry; class ELDHistogram : public IntervalHistogram { public: + static void RegisterExternalReferences(ExternalReferenceRegistry* registry); static void Initialize(Environment* env, v8::Local target); static void New(const v8::FunctionCallbackInfo& args);