/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 |