Coverage Report

Created: 2025-08-03 10:06

/src/node/src/memory_tracker.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
5
#include "v8-profiler.h"
6
7
#include <uv.h>
8
9
#include <limits>
10
#include <queue>
11
#include <stack>
12
#include <string>
13
#include <unordered_map>
14
15
namespace v8 {
16
class BackingStore;
17
}
18
19
namespace node {
20
21
template <typename T>
22
struct MallocedBuffer;
23
24
// Set the node name of a MemoryRetainer to klass
25
#define SET_MEMORY_INFO_NAME(Klass)                                            \
26
0
  inline const char* MemoryInfoName() const override { return #Klass; }
Unexecuted instantiation: node::CleanupQueue::MemoryInfoName() const
Unexecuted instantiation: node::mksnapshot::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::PrincipalRealm::MemoryInfoName() const
Unexecuted instantiation: node::IsolateData::MemoryInfoName() const
Unexecuted instantiation: node::AsyncHooks::MemoryInfoName() const
Unexecuted instantiation: node::ImmediateInfo::MemoryInfoName() const
Unexecuted instantiation: node::TickInfo::MemoryInfoName() const
Unexecuted instantiation: node::Environment::MemoryInfoName() const
Unexecuted instantiation: node::crypto::CryptoErrorStore::MemoryInfoName() const
Unexecuted instantiation: node::worker::Message::MemoryInfoName() const
Unexecuted instantiation: node::worker::MessagePortData::MemoryInfoName() const
Unexecuted instantiation: node::worker::MessagePort::MemoryInfoName() const
Unexecuted instantiation: node::worker::JSTransferable::MemoryInfoName() const
Unexecuted instantiation: node::worker::JSTransferable::Data::MemoryInfoName() const
Unexecuted instantiation: node::worker::Worker::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ManagedEVPPKey::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyObjectData::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyObjectHandle::MemoryInfoName() const
Unexecuted instantiation: node::crypto::NativeKeyObject::MemoryInfoName() const
Unexecuted instantiation: node::crypto::NativeKeyObject::KeyObjectTransferData::MemoryInfoName() const
Unexecuted instantiation: node::crypto::CipherBase::MemoryInfoName() const
Unexecuted instantiation: node::crypto::AESCipherConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::SecureContext::MemoryInfoName() const
Unexecuted instantiation: node::crypto::SecretKeyGenConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::NidKeyPairParams::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DiffieHellman::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DhKeyPairParams::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DHKeyExportConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DHBitsConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DsaKeyPairParams::MemoryInfoName() const
Unexecuted instantiation: node::crypto::DSAKeyExportConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ECDH::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ECDHBitsConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::EcKeyPairParams::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ECKeyExportConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::Hash::MemoryInfoName() const
Unexecuted instantiation: node::crypto::HashConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::HKDFConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::SignBase::MemoryInfoName() const
Unexecuted instantiation: node::crypto::SignConfiguration::MemoryInfoName() const
Unexecuted instantiation: node::crypto::Hmac::MemoryInfoName() const
Unexecuted instantiation: node::crypto::HmacConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::PBKDF2Config::MemoryInfoName() const
Unexecuted instantiation: node::crypto::RandomBytesConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::RandomPrimeConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::CheckPrimeConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::RsaKeyPairParams::MemoryInfoName() const
Unexecuted instantiation: node::crypto::RSAKeyExportConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::RSACipherConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ScryptConfig::MemoryInfoName() const
Unexecuted instantiation: node::crypto::TLSWrap::MemoryInfoName() const
Unexecuted instantiation: node::crypto::ManagedX509::MemoryInfoName() const
Unexecuted instantiation: node::crypto::X509Certificate::MemoryInfoName() const
Unexecuted instantiation: node::crypto::X509Certificate::X509CertificateTransferData::MemoryInfoName() const
Unexecuted instantiation: node::crypto::NodeBIO::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::NodeAresTask::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::ChannelWrap::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::GetAddrInfoReqWrap::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::GetNameInfoReqWrap::MemoryInfoName() const
Unexecuted instantiation: node::shadow_realm::ShadowRealm::MemoryInfoName() const
Unexecuted instantiation: node::wasm_web_api::WasmStreamingObject::MemoryInfoName() const
Unexecuted instantiation: node::process::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::AnyTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::ATraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::AaaaTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::CaaTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::CnameTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::MxTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::NsTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::TxtTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::SrvTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::PtrTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::NaptrTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::SoaTraits>::MemoryInfoName() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::ReverseTraits>::MemoryInfoName() const
Unexecuted instantiation: node::loader::ModuleWrap::MemoryInfoName() const
Unexecuted instantiation: node::contextify::ContextifyContext::MemoryInfoName() const
Unexecuted instantiation: node::contextify::ContextifyScript::MemoryInfoName() const
Unexecuted instantiation: heap_utils.cc:node::heap::(anonymous namespace)::HeapSnapshotStream::MemoryInfoName() const
Unexecuted instantiation: node::TraceSigintWatchdog::MemoryInfoName() const
Unexecuted instantiation: node::Histogram::MemoryInfoName() const
Unexecuted instantiation: node::HistogramBase::MemoryInfoName() const
Unexecuted instantiation: node::HistogramBase::HistogramTransferData::MemoryInfoName() const
Unexecuted instantiation: node::IntervalHistogram::MemoryInfoName() const
Unexecuted instantiation: node::i18n::ConverterObject::MemoryInfoName() const
Unexecuted instantiation: node::url::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::Blob::BlobTransferData::MemoryInfoName() const
Unexecuted instantiation: node::Blob::MemoryInfoName() const
Unexecuted instantiation: node::BlobBindingData::StoredDataObject::MemoryInfoName() const
Unexecuted instantiation: node::BlobBindingData::MemoryInfoName() const
Unexecuted instantiation: node::Blob::Reader::MemoryInfoName() const
Unexecuted instantiation: node::fs::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::fs::FSContinuationData::MemoryInfoName() const
Unexecuted instantiation: node::fs::FSReqCallback::MemoryInfoName() const
Unexecuted instantiation: node::fs::FileHandleReadWrap::MemoryInfoName() const
Unexecuted instantiation: node::fs::FileHandle::MemoryInfoName() const
Unexecuted instantiation: node::fs::FileHandle::TransferData::MemoryInfoName() const
Unexecuted instantiation: node::fs::FileHandle::CloseReq::MemoryInfoName() const
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::MemoryInfoName() const
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::MemoryInfoName() const
Unexecuted instantiation: node::fs_dir::DirHandle::MemoryInfoName() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_fs_s> >::MemoryInfoName() const
Unexecuted instantiation: node::StatWatcher::MemoryInfoName() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::BindingData::MemoryInfoName() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::Parser::MemoryInfoName() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::ConnectionsList::MemoryInfoName() const
Unexecuted instantiation: node::NgRcBufPointer<node::http2::Http2RcBufferPointerTraits>::MemoryInfoName() const
Unexecuted instantiation: node::http2::Http2State::MemoryInfoName() const
Unexecuted instantiation: node::http2::NgHttp2StreamWrite::MemoryInfoName() const
Unexecuted instantiation: node::http2::Http2Settings::MemoryInfoName() const
Unexecuted instantiation: node::http2::Http2Session::MemoryInfoName() const
Unexecuted instantiation: node::http2::Http2Stream::MemoryInfoName() const
Unexecuted instantiation: node::http2::Http2Ping::MemoryInfoName() const
Unexecuted instantiation: node::NgHeader<node::http2::Http2HeaderTraits>::MemoryInfoName() const
Unexecuted instantiation: node::modules::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::serdes::SerializerContext::MemoryInfoName() const
Unexecuted instantiation: node::serdes::DeserializerContext::MemoryInfoName() const
Unexecuted instantiation: node::encoding_binding::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::v8_utils::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::v8_utils::GCProfiler::MemoryInfoName() const
Unexecuted instantiation: node::timers::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBase::TransferData::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockListWrap::TransferData::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockList::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressRule::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressRangeRule::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressMaskRule::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBlockListWrap::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressBase::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddress::MemoryInfoName() const
Unexecuted instantiation: node::NodeCategorySet::MemoryInfoName() const
Unexecuted instantiation: node::wasi::WASI::MemoryInfoName() const
Unexecuted instantiation: node::worker::WorkerHeapSnapshotTaker::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::ZlibContext::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::ZlibStream::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliEncoderContext::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliCompressionStream<node::(anonymous namespace)::BrotliEncoderContext>::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliDecoderContext::MemoryInfoName() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliCompressionStream<node::(anonymous namespace)::BrotliDecoderContext>::MemoryInfoName() const
Unexecuted instantiation: node::PipeWrap::MemoryInfoName() const
Unexecuted instantiation: node::ConnectWrap::MemoryInfoName() const
Unexecuted instantiation: process_wrap.cc:node::(anonymous namespace)::ProcessWrap::MemoryInfoName() const
Unexecuted instantiation: signal_wrap.cc:node::(anonymous namespace)::SignalWrap::MemoryInfoName() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::AsyncWrap>::MemoryInfoName() const
Unexecuted instantiation: node::SimpleWriteWrap<node::AsyncWrap>::MemoryInfoName() const
Unexecuted instantiation: node::JSStream::MemoryInfoName() const
Unexecuted instantiation: node::StreamPipe::MemoryInfoName() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_shutdown_s> >::MemoryInfoName() const
Unexecuted instantiation: node::SimpleWriteWrap<node::ReqWrap<uv_write_s> >::MemoryInfoName() const
Unexecuted instantiation: node::UDPWrap::MemoryInfoName() const
Unexecuted instantiation: node::TTYWrap::MemoryInfoName() const
Unexecuted instantiation: node::SendWrap::MemoryInfoName() const
Unexecuted instantiation: node::TimerWrap::MemoryInfoName() const
Unexecuted instantiation: node::TimerWrapHandle::MemoryInfoName() const
Unexecuted instantiation: inspector_js_api.cc:node::inspector::(anonymous namespace)::JSBindingsConnection<node::inspector::(anonymous namespace)::LocalConnection>::MemoryInfoName() const
Unexecuted instantiation: inspector_js_api.cc:node::inspector::(anonymous namespace)::JSBindingsConnection<node::inspector::(anonymous namespace)::MainThreadConnection>::MemoryInfoName() const
Unexecuted instantiation: node::quic::BindingData::MemoryInfoName() const
Unexecuted instantiation: node::quic::CID::MemoryInfoName() const
Unexecuted instantiation: node::quic::Store::MemoryInfoName() const
Unexecuted instantiation: node::quic::QuicError::MemoryInfoName() const
Unexecuted instantiation: node::quic::TokenSecret::MemoryInfoName() const
Unexecuted instantiation: node::quic::StatelessResetToken::MemoryInfoName() const
Unexecuted instantiation: node::quic::RetryToken::MemoryInfoName() const
Unexecuted instantiation: node::quic::RegularToken::MemoryInfoName() const
Unexecuted instantiation: node::quic::Packet::MemoryInfoName() const
Unexecuted instantiation: node::quic::LogStream::MemoryInfoName() const
Unexecuted instantiation: node::quic::SessionTicket::MemoryInfoName() const
Unexecuted instantiation: node::quic::Stream::MemoryInfoName() const
Unexecuted instantiation: node::quic::TLSContext::Options::MemoryInfoName() const
Unexecuted instantiation: node::quic::TLSContext::MemoryInfoName() const
Unexecuted instantiation: node::quic::TransportParams::Options::MemoryInfoName() const
Unexecuted instantiation: node::quic::Session::Application_Options::MemoryInfoName() const
Unexecuted instantiation: node::quic::Session::Options::MemoryInfoName() const
Unexecuted instantiation: node::quic::Session::Config::MemoryInfoName() const
Unexecuted instantiation: node::quic::Session::MemoryInfoName() const
Unexecuted instantiation: node::quic::Endpoint::Options::MemoryInfoName() const
Unexecuted instantiation: node::quic::Endpoint::MemoryInfoName() const
Unexecuted instantiation: node::quic::Endpoint::UDP::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::ReaderImpl::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueImpl::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::IdempotentDataQueueReader::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::NonIdempotentDataQueueReader::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueEntry::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueEntry::ReaderImpl::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::InMemoryEntry::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::EmptyReader::MemoryInfoName() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::InMemoryEntry::InMemoryReader::MemoryInfoName() const
Unexecuted instantiation: fs_event_wrap.cc:node::(anonymous namespace)::FSEventWrap::MemoryInfoName() const
Unexecuted instantiation: node::JSUDPWrap::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::DsaKeyPairParams>::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::EcKeyPairParams>::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::RsaKeyPairParams>::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::DhKeyPairParams>::MemoryInfoName() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::NidKeyPairParams>::MemoryInfoName() const
Unexecuted instantiation: node::quic::Endpoint::UDP::Impl::MemoryInfoName() const
Unexecuted instantiation: node::SocketAddressLRU<node::quic::Endpoint::SocketAddressInfoTraits>::MemoryInfoName() const
Unexecuted instantiation: node::quic::Packet::Data::MemoryInfoName() const
Unexecuted instantiation: node::quic::Stream::Outbound::MemoryInfoName() const
Unexecuted instantiation: node::quic::DefaultApplication::MemoryInfoName() const
Unexecuted instantiation: http3.cc:node::NgRcBufPointer<node::quic::(anonymous namespace)::Http3RcBufferPointerTraits>::MemoryInfoName() const
Unexecuted instantiation: http3.cc:node::NgHeader<node::quic::(anonymous namespace)::Http3HeaderTraits>::MemoryInfoName() const
Unexecuted instantiation: http3.cc:node::quic::(anonymous namespace)::Http3Application::MemoryInfoName() const
27
28
// Set the self size of a MemoryRetainer to the stack-allocated size of a
29
// certain class
30
#define SET_SELF_SIZE(Klass)                                                   \
31
0
  inline size_t SelfSize() const override { return sizeof(Klass); }
Unexecuted instantiation: node::mksnapshot::BindingData::SelfSize() const
Unexecuted instantiation: node::PrincipalRealm::SelfSize() const
Unexecuted instantiation: node::IsolateData::SelfSize() const
Unexecuted instantiation: node::AsyncHooks::SelfSize() const
Unexecuted instantiation: node::ImmediateInfo::SelfSize() const
Unexecuted instantiation: node::TickInfo::SelfSize() const
Unexecuted instantiation: node::crypto::CryptoErrorStore::SelfSize() const
Unexecuted instantiation: node::worker::Message::SelfSize() const
Unexecuted instantiation: node::worker::MessagePortData::SelfSize() const
Unexecuted instantiation: node::worker::MessagePort::SelfSize() const
Unexecuted instantiation: node::worker::JSTransferable::SelfSize() const
Unexecuted instantiation: node::worker::JSTransferable::Data::SelfSize() const
Unexecuted instantiation: node::worker::Worker::SelfSize() const
Unexecuted instantiation: node::crypto::ManagedEVPPKey::SelfSize() const
Unexecuted instantiation: node::crypto::KeyObjectData::SelfSize() const
Unexecuted instantiation: node::crypto::KeyObjectHandle::SelfSize() const
Unexecuted instantiation: node::crypto::NativeKeyObject::SelfSize() const
Unexecuted instantiation: node::crypto::NativeKeyObject::KeyObjectTransferData::SelfSize() const
Unexecuted instantiation: node::crypto::CipherBase::SelfSize() const
Unexecuted instantiation: node::crypto::AESCipherConfig::SelfSize() const
Unexecuted instantiation: node::crypto::SecureContext::SelfSize() const
Unexecuted instantiation: node::crypto::SecretKeyGenConfig::SelfSize() const
Unexecuted instantiation: node::crypto::NidKeyPairParams::SelfSize() const
Unexecuted instantiation: node::crypto::DiffieHellman::SelfSize() const
Unexecuted instantiation: node::crypto::DhKeyPairParams::SelfSize() const
Unexecuted instantiation: node::crypto::DHKeyExportConfig::SelfSize() const
Unexecuted instantiation: node::crypto::DHBitsConfig::SelfSize() const
Unexecuted instantiation: node::crypto::DsaKeyPairParams::SelfSize() const
Unexecuted instantiation: node::crypto::DSAKeyExportConfig::SelfSize() const
Unexecuted instantiation: node::crypto::ECDH::SelfSize() const
Unexecuted instantiation: node::crypto::ECDHBitsConfig::SelfSize() const
Unexecuted instantiation: node::crypto::EcKeyPairParams::SelfSize() const
Unexecuted instantiation: node::crypto::ECKeyExportConfig::SelfSize() const
Unexecuted instantiation: node::crypto::Hash::SelfSize() const
Unexecuted instantiation: node::crypto::HashConfig::SelfSize() const
Unexecuted instantiation: node::crypto::HKDFConfig::SelfSize() const
Unexecuted instantiation: node::crypto::SignBase::SelfSize() const
Unexecuted instantiation: node::crypto::SignConfiguration::SelfSize() const
Unexecuted instantiation: node::crypto::Hmac::SelfSize() const
Unexecuted instantiation: node::crypto::HmacConfig::SelfSize() const
Unexecuted instantiation: node::crypto::PBKDF2Config::SelfSize() const
Unexecuted instantiation: node::crypto::RandomBytesConfig::SelfSize() const
Unexecuted instantiation: node::crypto::RandomPrimeConfig::SelfSize() const
Unexecuted instantiation: node::crypto::CheckPrimeConfig::SelfSize() const
Unexecuted instantiation: node::crypto::RsaKeyPairParams::SelfSize() const
Unexecuted instantiation: node::crypto::RSAKeyExportConfig::SelfSize() const
Unexecuted instantiation: node::crypto::RSACipherConfig::SelfSize() const
Unexecuted instantiation: node::crypto::ScryptConfig::SelfSize() const
Unexecuted instantiation: node::crypto::TLSWrap::SelfSize() const
Unexecuted instantiation: node::crypto::ManagedX509::SelfSize() const
Unexecuted instantiation: node::crypto::X509Certificate::SelfSize() const
Unexecuted instantiation: node::crypto::X509Certificate::X509CertificateTransferData::SelfSize() const
Unexecuted instantiation: node::crypto::NodeBIO::SelfSize() const
Unexecuted instantiation: node::cares_wrap::NodeAresTask::SelfSize() const
Unexecuted instantiation: node::cares_wrap::ChannelWrap::SelfSize() const
Unexecuted instantiation: node::cares_wrap::GetAddrInfoReqWrap::SelfSize() const
Unexecuted instantiation: node::cares_wrap::GetNameInfoReqWrap::SelfSize() const
Unexecuted instantiation: node::shadow_realm::ShadowRealm::SelfSize() const
Unexecuted instantiation: node::wasm_web_api::WasmStreamingObject::SelfSize() const
Unexecuted instantiation: node::process::BindingData::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::AnyTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::ATraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::AaaaTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::CaaTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::CnameTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::MxTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::NsTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::TxtTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::SrvTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::PtrTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::NaptrTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::SoaTraits>::SelfSize() const
Unexecuted instantiation: node::cares_wrap::QueryWrap<node::cares_wrap::ReverseTraits>::SelfSize() const
Unexecuted instantiation: node::loader::ModuleWrap::SelfSize() const
Unexecuted instantiation: node::contextify::ContextifyContext::SelfSize() const
Unexecuted instantiation: node::contextify::ContextifyScript::SelfSize() const
Unexecuted instantiation: heap_utils.cc:node::heap::(anonymous namespace)::HeapSnapshotStream::SelfSize() const
Unexecuted instantiation: node::TraceSigintWatchdog::SelfSize() const
Unexecuted instantiation: node::Histogram::SelfSize() const
Unexecuted instantiation: node::HistogramBase::SelfSize() const
Unexecuted instantiation: node::HistogramBase::HistogramTransferData::SelfSize() const
Unexecuted instantiation: node::IntervalHistogram::SelfSize() const
Unexecuted instantiation: node::i18n::ConverterObject::SelfSize() const
Unexecuted instantiation: node::url::BindingData::SelfSize() const
Unexecuted instantiation: node::Blob::BlobTransferData::SelfSize() const
Unexecuted instantiation: node::Blob::SelfSize() const
Unexecuted instantiation: node::BlobBindingData::StoredDataObject::SelfSize() const
Unexecuted instantiation: node::BlobBindingData::SelfSize() const
Unexecuted instantiation: node::Blob::Reader::SelfSize() const
Unexecuted instantiation: node::fs::BindingData::SelfSize() const
Unexecuted instantiation: node::fs::FSContinuationData::SelfSize() const
Unexecuted instantiation: node::fs::FSReqCallback::SelfSize() const
Unexecuted instantiation: node::fs::FileHandleReadWrap::SelfSize() const
Unexecuted instantiation: node::fs::FileHandle::SelfSize() const
Unexecuted instantiation: node::fs::FileHandle::TransferData::SelfSize() const
Unexecuted instantiation: node::fs::FileHandle::CloseReq::SelfSize() const
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<long, v8::BigInt64Array> >::SelfSize() const
Unexecuted instantiation: node::fs::FSReqPromise<node::AliasedBufferBase<double, v8::Float64Array> >::SelfSize() const
Unexecuted instantiation: node::fs_dir::DirHandle::SelfSize() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_fs_s> >::SelfSize() const
Unexecuted instantiation: node::StatWatcher::SelfSize() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::BindingData::SelfSize() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::Parser::SelfSize() const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::ConnectionsList::SelfSize() const
Unexecuted instantiation: node::NgRcBufPointer<node::http2::Http2RcBufferPointerTraits>::SelfSize() const
Unexecuted instantiation: node::http2::Http2State::SelfSize() const
Unexecuted instantiation: node::http2::NgHttp2StreamWrite::SelfSize() const
Unexecuted instantiation: node::http2::Http2Settings::SelfSize() const
Unexecuted instantiation: node::http2::Http2Session::SelfSize() const
Unexecuted instantiation: node::http2::Http2Stream::SelfSize() const
Unexecuted instantiation: node::http2::Http2Ping::SelfSize() const
Unexecuted instantiation: node::NgHeader<node::http2::Http2HeaderTraits>::SelfSize() const
Unexecuted instantiation: node::modules::BindingData::SelfSize() const
Unexecuted instantiation: node::serdes::SerializerContext::SelfSize() const
Unexecuted instantiation: node::serdes::DeserializerContext::SelfSize() const
Unexecuted instantiation: node::encoding_binding::BindingData::SelfSize() const
Unexecuted instantiation: node::v8_utils::BindingData::SelfSize() const
Unexecuted instantiation: node::v8_utils::GCProfiler::SelfSize() const
Unexecuted instantiation: node::timers::BindingData::SelfSize() const
Unexecuted instantiation: node::SocketAddressBase::TransferData::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockListWrap::TransferData::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockList::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressRule::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressRangeRule::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockList::SocketAddressMaskRule::SelfSize() const
Unexecuted instantiation: node::SocketAddressBlockListWrap::SelfSize() const
Unexecuted instantiation: node::SocketAddressBase::SelfSize() const
Unexecuted instantiation: node::SocketAddress::SelfSize() const
Unexecuted instantiation: node::NodeCategorySet::SelfSize() const
Unexecuted instantiation: node::wasi::WASI::SelfSize() const
Unexecuted instantiation: node::worker::WorkerHeapSnapshotTaker::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::ZlibContext::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::ZlibStream::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliEncoderContext::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliCompressionStream<node::(anonymous namespace)::BrotliEncoderContext>::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliDecoderContext::SelfSize() const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliCompressionStream<node::(anonymous namespace)::BrotliDecoderContext>::SelfSize() const
Unexecuted instantiation: node::PipeWrap::SelfSize() const
Unexecuted instantiation: node::ConnectWrap::SelfSize() const
Unexecuted instantiation: process_wrap.cc:node::(anonymous namespace)::ProcessWrap::SelfSize() const
Unexecuted instantiation: signal_wrap.cc:node::(anonymous namespace)::SignalWrap::SelfSize() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::AsyncWrap>::SelfSize() const
Unexecuted instantiation: node::SimpleWriteWrap<node::AsyncWrap>::SelfSize() const
Unexecuted instantiation: node::JSStream::SelfSize() const
Unexecuted instantiation: node::StreamPipe::SelfSize() const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_shutdown_s> >::SelfSize() const
Unexecuted instantiation: node::SimpleWriteWrap<node::ReqWrap<uv_write_s> >::SelfSize() const
Unexecuted instantiation: node::TCPWrap::SelfSize() const
Unexecuted instantiation: node::UDPWrap::SelfSize() const
Unexecuted instantiation: node::TTYWrap::SelfSize() const
Unexecuted instantiation: node::SendWrap::SelfSize() const
Unexecuted instantiation: node::TimerWrap::SelfSize() const
Unexecuted instantiation: node::TimerWrapHandle::SelfSize() const
Unexecuted instantiation: inspector_js_api.cc:node::inspector::(anonymous namespace)::JSBindingsConnection<node::inspector::(anonymous namespace)::LocalConnection>::SelfSize() const
Unexecuted instantiation: inspector_js_api.cc:node::inspector::(anonymous namespace)::JSBindingsConnection<node::inspector::(anonymous namespace)::MainThreadConnection>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::HKDFTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::PBKDF2Traits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::ScryptTraits>::SelfSize() const
Unexecuted instantiation: node::quic::BindingData::SelfSize() const
Unexecuted instantiation: node::quic::CID::SelfSize() const
Unexecuted instantiation: node::quic::Store::SelfSize() const
Unexecuted instantiation: node::quic::QuicError::SelfSize() const
Unexecuted instantiation: node::quic::TokenSecret::SelfSize() const
Unexecuted instantiation: node::quic::StatelessResetToken::SelfSize() const
Unexecuted instantiation: node::quic::RetryToken::SelfSize() const
Unexecuted instantiation: node::quic::RegularToken::SelfSize() const
Unexecuted instantiation: node::quic::Packet::SelfSize() const
Unexecuted instantiation: node::quic::LogStream::SelfSize() const
Unexecuted instantiation: node::quic::SessionTicket::SelfSize() const
Unexecuted instantiation: node::quic::Stream::SelfSize() const
Unexecuted instantiation: node::quic::TLSContext::Options::SelfSize() const
Unexecuted instantiation: node::quic::TLSContext::SelfSize() const
Unexecuted instantiation: node::quic::TransportParams::Options::SelfSize() const
Unexecuted instantiation: node::quic::Session::Application_Options::SelfSize() const
Unexecuted instantiation: node::quic::Session::Options::SelfSize() const
Unexecuted instantiation: node::quic::Session::Config::SelfSize() const
Unexecuted instantiation: node::quic::Session::SelfSize() const
Unexecuted instantiation: node::quic::Endpoint::Options::SelfSize() const
Unexecuted instantiation: node::quic::Endpoint::SelfSize() const
Unexecuted instantiation: node::quic::Endpoint::UDP::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::ReaderImpl::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueImpl::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::IdempotentDataQueueReader::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::NonIdempotentDataQueueReader::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueEntry::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueEntry::ReaderImpl::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::InMemoryEntry::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::EmptyReader::SelfSize() const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::InMemoryEntry::InMemoryReader::SelfSize() const
Unexecuted instantiation: fs_event_wrap.cc:node::(anonymous namespace)::FSEventWrap::SelfSize() const
Unexecuted instantiation: node::JSUDPWrap::SelfSize() const
Unexecuted instantiation: node::crypto::CipherJob<node::crypto::AESCipherTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::DsaKeyPairParams>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::KeyPairGenTraits<node::crypto::DsaKeyGenTraits> >::SelfSize() const
Unexecuted instantiation: node::crypto::KeyExportJob<node::crypto::DSAKeyExportTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::SignTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::ECDHBitsTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::EcKeyPairParams>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::KeyPairGenTraits<node::crypto::EcKeyGenTraits> >::SelfSize() const
Unexecuted instantiation: node::crypto::KeyExportJob<node::crypto::ECKeyExportTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::HmacTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::RandomBytesTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::RandomPrimeTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::CheckPrimeTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::RsaKeyPairParams>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::KeyPairGenTraits<node::crypto::RsaKeyGenTraits> >::SelfSize() const
Unexecuted instantiation: node::crypto::KeyExportJob<node::crypto::RSAKeyExportTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::CipherJob<node::crypto::RSACipherTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::DhKeyPairParams>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::KeyPairGenTraits<node::crypto::DhKeyGenTraits> >::SelfSize() const
Unexecuted instantiation: node::crypto::KeyExportJob<node::crypto::DHKeyExportTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::DHBitsTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::DeriveBitsJob<node::crypto::HashTraits>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyPairGenConfig<node::crypto::NidKeyPairParams>::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::KeyPairGenTraits<node::crypto::NidKeyPairGenTraits> >::SelfSize() const
Unexecuted instantiation: node::crypto::KeyGenJob<node::crypto::SecretKeyGenTraits>::SelfSize() const
Unexecuted instantiation: node::quic::Endpoint::UDP::Impl::SelfSize() const
Unexecuted instantiation: node::SocketAddressLRU<node::quic::Endpoint::SocketAddressInfoTraits>::SelfSize() const
Unexecuted instantiation: node::quic::Packet::Data::SelfSize() const
Unexecuted instantiation: node::quic::Stream::Outbound::SelfSize() const
Unexecuted instantiation: node::quic::DefaultApplication::SelfSize() const
Unexecuted instantiation: http3.cc:node::NgRcBufPointer<node::quic::(anonymous namespace)::Http3RcBufferPointerTraits>::SelfSize() const
Unexecuted instantiation: http3.cc:node::NgHeader<node::quic::(anonymous namespace)::Http3HeaderTraits>::SelfSize() const
Unexecuted instantiation: http3.cc:node::quic::(anonymous namespace)::Http3Application::SelfSize() const
32
33
// Used when there is no additional fields to track
34
#define SET_NO_MEMORY_INFO()                                                   \
35
0
  inline void MemoryInfo(node::MemoryTracker* tracker) const override {}
Unexecuted instantiation: node::crypto::CryptoErrorStore::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::worker::JSTransferable::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::worker::JSTransferable::Data::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::worker::Worker::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::KeyObjectHandle::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::NativeKeyObject::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::NativeKeyObject::KeyObjectTransferData::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::SecureContext::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::NidKeyPairParams::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::DhKeyPairParams::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::DHKeyExportConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::DHBitsConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::DsaKeyPairParams::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::DSAKeyExportConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::EcKeyPairParams::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::ECKeyExportConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::RandomBytesConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::RsaKeyPairParams::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::RSAKeyExportConfig::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::crypto::X509Certificate::X509CertificateTransferData::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::cares_wrap::GetAddrInfoReqWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::cares_wrap::GetNameInfoReqWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::contextify::ContextifyScript::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::i18n::ConverterObject::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::Blob::BlobTransferData::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::Blob::Reader::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::fs::FileHandle::TransferData::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_fs_s> >::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::StatWatcher::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::Parser::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node_http_parser.cc:node::(anonymous namespace)::ConnectionsList::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::serdes::SerializerContext::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::serdes::DeserializerContext::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::v8_utils::GCProfiler::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::timers::BindingData::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SocketAddress::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::worker::WorkerHeapSnapshotTaker::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliEncoderContext::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node_zlib.cc:node::(anonymous namespace)::BrotliDecoderContext::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::PipeWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::ConnectWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: process_wrap.cc:node::(anonymous namespace)::ProcessWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: signal_wrap.cc:node::(anonymous namespace)::SignalWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SimpleShutdownWrap<node::AsyncWrap>::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SimpleWriteWrap<node::AsyncWrap>::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::JSStream::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::StreamPipe::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SimpleShutdownWrap<node::ReqWrap<uv_shutdown_s> >::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SimpleWriteWrap<node::ReqWrap<uv_write_s> >::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::TCPWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::UDPWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::TTYWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::SendWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::TimerWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::CID::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::TokenSecret::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::StatelessResetToken::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::RetryToken::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::RegularToken::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::Stream::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::Session::Application_Options::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::FdEntry::ReaderImpl::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::IdempotentDataQueueReader::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::NonIdempotentDataQueueReader::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::DataQueueEntry::ReaderImpl::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::EmptyEntry::EmptyReader::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: queue.cc:node::(anonymous namespace)::InMemoryEntry::InMemoryReader::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: fs_event_wrap.cc:node::(anonymous namespace)::FSEventWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::JSUDPWrap::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::Endpoint::UDP::Impl::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: node::quic::DefaultApplication::MemoryInfo(node::MemoryTracker*) const
Unexecuted instantiation: http3.cc:node::quic::(anonymous namespace)::Http3Application::MemoryInfo(node::MemoryTracker*) const
36
37
class MemoryTracker;
38
class MemoryRetainerNode;
39
template <typename T, bool kIsWeak>
40
class BaseObjectPtrImpl;
41
42
namespace crypto {
43
class NodeBIO;
44
}
45
46
class CleanupHookCallback;
47
48
/* Example:
49
 *
50
 * class ExampleRetainer : public MemoryRetainer {
51
 *   public:
52
 *     // Or use SET_NO_MEMORY_INFO() when there is no additional fields
53
 *     // to track.
54
 *     void MemoryInfo(MemoryTracker* tracker) const override {
55
 *       // Node name and size comes from the MemoryInfoName and SelfSize of
56
 *       // AnotherRetainerClass
57
 *       tracker->TrackField("another_retainer", another_retainer_);
58
 *
59
 *       // Add non_pointer_retainer as a separate node into the graph
60
 *       // and track its memory information recursively.
61
 *       // Note that we need to make sure its size is not accounted in
62
 *       // ExampleRetainer::SelfSize().
63
 *       tracker->TrackField("non_pointer_retainer", &non_pointer_retainer_);
64
 *
65
 *       // Specify node name and size explicitly
66
 *       tracker->TrackFieldWithSize("internal_member",
67
 *                                   internal_member_.size(),
68
 *                                   "InternalClass");
69
 *       // Node name falls back to the edge name,
70
 *       // elements in the container appear as grandchildren nodes
71
 *       tracker->TrackField("vector", vector_);
72
 *       // Node name and size come from the JS object
73
 *       tracker->TrackField("target", target_);
74
 *     }
75
 *
76
 *     // Or use SET_MEMORY_INFO_NAME(ExampleRetainer)
77
 *     const char* MemoryInfoName() const override {
78
 *       return "ExampleRetainer";
79
 *     }
80
 *
81
 *     // Classes that only want to return its sizeof() value can use the
82
 *     // SET_SELF_SIZE(Class) macro instead.
83
 *     size_t SelfSize() const override {
84
 *       // We need to exclude the size of non_pointer_retainer so that
85
 *       // we can track it separately in ExampleRetainer::MemoryInfo().
86
 *       return sizeof(ExampleRetainer) - sizeof(NonPointerRetainerClass);
87
 *     }
88
 *
89
 *     // Note: no need to implement these two methods when implementing
90
 *     // a BaseObject or an AsyncWrap class
91
 *     bool IsRootNode() const override { return !wrapped_.IsWeak(); }
92
 *     v8::Local<v8::Object> WrappedObject() const override {
93
 *       return node::PersistentToLocal::Default(wrapped_);
94
 *     }
95
 *
96
 *   private:
97
 *     AnotherRetainerClass* another_retainer_;
98
 *     NonPointerRetainerClass non_pointer_retainer;
99
 *     InternalClass internal_member_;
100
 *     std::vector<uv_async_t> vector_;
101
 *     v8::Global<Object> target_;
102
 *
103
 *     v8::Global<Object> wrapped_;
104
 * }
105
 *
106
 * This creates the following graph:
107
 *   Node / ExampleRetainer
108
 *    |> another_retainer :: Node / AnotherRetainerClass
109
 *    |> internal_member :: Node / InternalClass
110
 *    |> vector :: Node / vector (elements will be grandchildren)
111
 *        |> [1] :: Node / uv_async_t (uv_async_t has predefined names)
112
 *        |> [2] :: Node / uv_async_t
113
 *        |> ...
114
 *    |> target :: TargetClass (JS class name of the target object)
115
 *    |> wrapped :: WrappedClass (JS class name of the wrapped object)
116
 *        |> wrapper :: Node / ExampleRetainer (back reference)
117
 */
118
class MemoryRetainer {
119
 public:
120
4.69M
  virtual ~MemoryRetainer() = default;
121
122
  // Subclasses should implement these methods to provide information
123
  // for the V8 heap snapshot generator.
124
  // The MemoryInfo() method is assumed to be called within a context
125
  // where all the edges start from the node of the current retainer,
126
  // and point to the nodes as specified by tracker->Track* calls.
127
  virtual void MemoryInfo(MemoryTracker* tracker) const = 0;
128
  virtual const char* MemoryInfoName() const = 0;
129
  virtual size_t SelfSize() const = 0;
130
131
0
  virtual v8::Local<v8::Object> WrappedObject() const {
132
0
    return v8::Local<v8::Object>();
133
0
  }
134
135
0
  virtual bool IsRootNode() const { return false; }
136
0
  virtual v8::EmbedderGraph::Node::Detachedness GetDetachedness() const {
137
0
    return v8::EmbedderGraph::Node::Detachedness::kUnknown;
138
0
  }
139
};
140
141
class MemoryTracker {
142
 public:
143
  // Used to specify node name and size explicitly
144
  inline void TrackFieldWithSize(const char* edge_name,
145
                                 size_t size,
146
                                 const char* node_name = nullptr);
147
  inline void TrackInlineFieldWithSize(const char* edge_name,
148
                                       size_t size,
149
                                       const char* node_name = nullptr);
150
151
  // Shortcut to extract the underlying object out of the smart pointer
152
  template <typename T, typename D>
153
  inline void TrackField(const char* edge_name,
154
                         const std::unique_ptr<T, D>& value,
155
                         const char* node_name = nullptr);
156
157
  template <typename T>
158
  inline void TrackField(const char* edge_name,
159
                         const std::shared_ptr<T>& value,
160
                         const char* node_name = nullptr);
161
162
  template <typename T, bool kIsWeak>
163
  void TrackField(const char* edge_name,
164
                  const BaseObjectPtrImpl<T, kIsWeak>& value,
165
                  const char* node_name = nullptr);
166
167
  // For containers, the elements will be graphed as grandchildren nodes
168
  // if the container is not empty.
169
  // By default, we assume the parent count the stack size of the container
170
  // into its SelfSize so that will be subtracted from the parent size when we
171
  // spin off a new node for the container.
172
  // TODO(joyeecheung): use RTTI to retrieve the class name at runtime?
173
  template <typename T, typename Iterator = typename T::const_iterator>
174
  inline void TrackField(const char* edge_name,
175
                         const T& value,
176
                         const char* node_name = nullptr,
177
                         const char* element_name = nullptr,
178
                         bool subtract_from_self = true);
179
  template <typename T>
180
  inline void TrackField(const char* edge_name,
181
                         const std::queue<T>& value,
182
                         const char* node_name = nullptr,
183
                         const char* element_name = nullptr);
184
  template <typename T, typename U>
185
  inline void TrackField(const char* edge_name,
186
                         const std::pair<T, U>& value,
187
                         const char* node_name = nullptr);
188
189
  // For the following types, node_name will be ignored and predefined names
190
  // will be used instead. They are only in the signature for template
191
  // expansion.
192
  inline void TrackField(const char* edge_name,
193
                         const MemoryRetainer& value,
194
                         const char* node_name = nullptr);
195
  inline void TrackField(const char* edge_name,
196
                         const MemoryRetainer* value,
197
                         const char* node_name = nullptr);
198
  template <typename T>
199
  inline void TrackField(const char* edge_name,
200
                         const std::basic_string<T>& value,
201
                         const char* node_name = nullptr);
202
  template <typename T,
203
            typename test_for_number = typename std::
204
                enable_if<std::numeric_limits<T>::is_specialized, bool>::type,
205
            typename dummy = bool>
206
  inline void TrackField(const char* edge_name,
207
                         const T& value,
208
                         const char* node_name = nullptr);
209
  template <typename T>
210
  void TrackField(const char* edge_name,
211
                  const v8::Eternal<T>& value,
212
                  const char* node_name);
213
  template <typename T>
214
  inline void TrackField(const char* edge_name,
215
                         const v8::PersistentBase<T>& value,
216
                         const char* node_name = nullptr);
217
  template <typename T>
218
  inline void TrackField(const char* edge_name,
219
                         const v8::Local<T>& value,
220
                         const char* node_name = nullptr);
221
  template <typename T>
222
  inline void TrackField(const char* edge_name,
223
                         const MallocedBuffer<T>& value,
224
                         const char* node_name = nullptr);
225
  inline void TrackField(const char* edge_name,
226
                         const v8::BackingStore* value,
227
                         const char* node_name = nullptr);
228
  inline void TrackField(const char* edge_name,
229
                         const uv_buf_t& value,
230
                         const char* node_name = nullptr);
231
  inline void TrackField(const char* edge_name,
232
                         const uv_timer_t& value,
233
                         const char* node_name = nullptr);
234
  inline void TrackField(const char* edge_name,
235
                         const uv_async_t& value,
236
                         const char* node_name = nullptr);
237
  inline void TrackInlineField(const char* edge_name,
238
                               const uv_async_t& value,
239
                               const char* node_name = nullptr);
240
241
  // Put a memory container into the graph, create an edge from
242
  // the current node if there is one on the stack.
243
  inline void Track(const MemoryRetainer* retainer,
244
                    const char* edge_name = nullptr);
245
246
  // Useful for parents that do not wish to perform manual
247
  // adjustments to its `SelfSize()` when embedding retainer
248
  // objects inline.
249
  // Put a memory container into the graph, create an edge from
250
  // the current node if there is one on the stack - there should
251
  // be one, of the container object which the current field is part of.
252
  // Reduce the size of memory from the container so as to avoid
253
  // duplication in accounting.
254
  inline void TrackInlineField(const MemoryRetainer* retainer,
255
                               const char* edge_name = nullptr);
256
257
0
  inline v8::EmbedderGraph* graph() { return graph_; }
258
0
  inline v8::Isolate* isolate() { return isolate_; }
259
260
  inline explicit MemoryTracker(v8::Isolate* isolate,
261
                                v8::EmbedderGraph* graph)
262
0
    : isolate_(isolate), graph_(graph) {}
263
264
 private:
265
  typedef std::unordered_map<const MemoryRetainer*, MemoryRetainerNode*>
266
      NodeMap;
267
268
  inline MemoryRetainerNode* CurrentNode() const;
269
  inline MemoryRetainerNode* AddNode(const MemoryRetainer* retainer,
270
                                     const char* edge_name = nullptr);
271
  inline MemoryRetainerNode* PushNode(const MemoryRetainer* retainer,
272
                                      const char* edge_name = nullptr);
273
  inline MemoryRetainerNode* AddNode(const char* node_name,
274
                                     size_t size,
275
                                     const char* edge_name = nullptr);
276
  inline MemoryRetainerNode* PushNode(const char* node_name,
277
                                      size_t size,
278
                                      const char* edge_name = nullptr);
279
  inline void PopNode();
280
281
  v8::Isolate* isolate_;
282
  v8::EmbedderGraph* graph_;
283
  std::stack<MemoryRetainerNode*> node_stack_;
284
  NodeMap seen_;
285
};
286
287
}  // namespace node
288
289
#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS