Skip to content

Commit

Permalink
doc: fix the example implementation of MemoryRetainer
Browse files Browse the repository at this point in the history
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: #26262
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
joyeecheung authored and BethGriggs committed Apr 16, 2019
1 parent cb88c58 commit 77eae4e
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions src/memory_tracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand All @@ -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
Expand All @@ -71,8 +81,10 @@ class NodeBIO;
* v8::Local<v8::Object> WrappedObject() const override {
* return node::PersistentToLocal(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_;
Expand Down

0 comments on commit 77eae4e

Please sign in to comment.