diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-06-10 16:40:13 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-07-13 19:53:15 +0200 |
commit | 57e301539bff2599974b7269a56377330c9b730e (patch) | |
tree | 6f5c866728f22bbacb8dadb89a2c8a12e5b66508 /src/cares_wrap.cc | |
parent | 36cc5f5caf52af895079d153a9131fe2b0c6b8f9 (diff) | |
download | android-node-v8-57e301539bff2599974b7269a56377330c9b730e.tar.gz android-node-v8-57e301539bff2599974b7269a56377330c9b730e.tar.bz2 android-node-v8-57e301539bff2599974b7269a56377330c9b730e.zip |
src: enable more detailed memory tracking
This will enable more detailed heap snapshots based on
a newer V8 API.
This commit itself is not tied to that API and could
be backported.
PR-URL: https://github.com/nodejs/node/pull/21742
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/cares_wrap.cc')
-rw-r--r-- | src/cares_wrap.cc | 77 |
1 files changed, 59 insertions, 18 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 3cf1d434d3..69a3d46668 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -121,10 +121,12 @@ inline const char* ToErrorCodeString(int status) { class ChannelWrap; -struct node_ares_task { +struct node_ares_task : public MemoryRetainer { ChannelWrap* channel; ares_socket_t sock; uv_poll_t poll_watcher; + + void MemoryInfo(MemoryTracker* tracker) const override; }; struct TaskHash { @@ -167,7 +169,12 @@ class ChannelWrap : public AsyncWrap { inline int active_query_count() { return active_query_count_; } inline node_ares_task_list* task_list() { return &task_list_; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + if (timer_handle_ != nullptr) + tracker->TrackFieldWithSize("timer handle", sizeof(*timer_handle_)); + tracker->TrackField("task list", task_list_); + } static void AresTimeout(uv_timer_t* handle); @@ -181,6 +188,11 @@ class ChannelWrap : public AsyncWrap { node_ares_task_list task_list_; }; +void node_ares_task::MemoryInfo(MemoryTracker* tracker) const { + tracker->TrackThis(this); + tracker->TrackField("channel", channel); +} + ChannelWrap::ChannelWrap(Environment* env, Local<Object> object) : AsyncWrap(env, object, PROVIDER_DNSCHANNEL), @@ -209,7 +221,10 @@ class GetAddrInfoReqWrap : public ReqWrap<uv_getaddrinfo_t> { Local<Object> req_wrap_obj, bool verbatim); - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } + bool verbatim() const { return verbatim_; } private: @@ -228,7 +243,9 @@ class GetNameInfoReqWrap : public ReqWrap<uv_getnameinfo_t> { public: GetNameInfoReqWrap(Environment* env, Local<Object> req_wrap_obj); - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } }; GetNameInfoReqWrap::GetNameInfoReqWrap(Environment* env, @@ -270,13 +287,13 @@ void ares_poll_cb(uv_poll_t* watcher, int status, int events) { void ares_poll_close_cb(uv_poll_t* watcher) { node_ares_task* task = ContainerOf(&node_ares_task::poll_watcher, watcher); - free(task); + delete task; } /* Allocates and returns a new node_ares_task */ node_ares_task* ares_task_create(ChannelWrap* channel, ares_socket_t sock) { - auto task = node::UncheckedMalloc<node_ares_task>(1); + auto task = new node_ares_task(); if (task == nullptr) { /* Out of memory. */ @@ -1172,7 +1189,9 @@ class QueryAnyWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1349,7 +1368,9 @@ class QueryAWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1393,7 +1414,9 @@ class QueryAaaaWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1437,7 +1460,9 @@ class QueryCnameWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1468,7 +1493,9 @@ class QueryMxWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1499,7 +1526,9 @@ class QueryNsWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1530,7 +1559,9 @@ class QueryTxtWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1560,7 +1591,9 @@ class QuerySrvWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1589,7 +1622,9 @@ class QueryPtrWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1620,7 +1655,9 @@ class QueryNaptrWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1650,7 +1687,9 @@ class QuerySoaWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(unsigned char* buf, int len) override { @@ -1729,7 +1768,9 @@ class GetHostByAddrWrap: public QueryWrap { return 0; } - size_t self_size() const override { return sizeof(*this); } + void MemoryInfo(MemoryTracker* tracker) const override { + tracker->TrackThis(this); + } protected: void Parse(struct hostent* host) override { |