diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-02-22 21:50:15 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-03-06 17:48:55 +0100 |
commit | f3d620787403c00ee5c7d5e9e1601d389802082b (patch) | |
tree | 8db1320943a4e86524f125708160a2445046a7d0 /src/memory_tracker.h | |
parent | 617f0554beca8f323d7d8922d3f1186a94720dfe (diff) | |
download | node-new-f3d620787403c00ee5c7d5e9e1601d389802082b.tar.gz |
doc: fix the example implementation of MemoryRetainer
We need to be careful not to include the size of non-pointer
fields in the parent's self size if we want to track them separately
as a different node.
Refs: https://github.com/nodejs/node/pull/26161/files#r259170771
PR-URL: https://github.com/nodejs/node/pull/26262
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/memory_tracker.h')
-rw-r--r-- | src/memory_tracker.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/memory_tracker.h b/src/memory_tracker.h index 673cd811c3..4125f9585f 100644 --- a/src/memory_tracker.h +++ b/src/memory_tracker.h @@ -44,6 +44,13 @@ class NodeBIO; * // Node name and size comes from the MemoryInfoName and SelfSize of * // AnotherRetainerClass * tracker->TrackField("another_retainer", another_retainer_); + * + * // Add non_pointer_retainer as a separate node into the graph + * // and track its memory information recursively. + * // Note that we need to make sure its size is not accounted in + * // ExampleRetainer::SelfSize(). + * tracker->TrackField("non_pointer_retainer", &non_pointer_retainer_); + * * // Specify node name and size explicitly * tracker->TrackFieldWithSize("internal_member", * internal_member_.size(), @@ -60,9 +67,12 @@ class NodeBIO; * return "ExampleRetainer"; * } * - * // Or use SET_SELF_SIZE(ExampleRetainer) + * // Classes that only want to return its sizeof() value can use the + * // SET_SELF_SIZE(Class) macro instead. * size_t SelfSize() const override { - * return sizeof(ExampleRetainer); + * // We need to exclude the size of non_pointer_retainer so that + * // we can track it separately in ExampleRetainer::MemoryInfo(). + * return sizeof(ExampleRetainer) - sizeof(NonPointerRetainerClass); * } * * // Note: no need to implement these two methods when implementing @@ -71,8 +81,10 @@ class NodeBIO; * v8::Local<v8::Object> WrappedObject() const override { * return node::PersistentToLocal::Default(wrapped_); * } + * * private: - * AnotherRetainerClass another_retainer_; + * AnotherRetainerClass* another_retainer_; + * NonPointerRetainerClass non_pointer_retainer; * InternalClass internal_member_; * std::vector<uv_async_t> vector_; * node::Persistent<Object> target_; |