src: add memory retainer traits for external types · nodejs/node@5c82ef3
@@ -8,6 +8,48 @@
88#include "path.h"
99#include "util-inl.h"
101011+namespace node {
12+using node::url_pattern::URLPatternRegexProvider;
13+14+template <>
15+struct MemoryRetainerTraits<ada::url_pattern<URLPatternRegexProvider>> {
16+using Type = ada::url_pattern<URLPatternRegexProvider>;
17+static void MemoryInfo(MemoryTracker* tracker, const Type& value) {
18+ tracker->TraitTrackInline(value.protocol_component, "protocol_component");
19+ tracker->TraitTrackInline(value.username_component, "username_component");
20+ tracker->TraitTrackInline(value.password_component, "password_component");
21+ tracker->TraitTrackInline(value.hostname_component, "hostname_component");
22+ tracker->TraitTrackInline(value.port_component, "port_component");
23+ tracker->TraitTrackInline(value.pathname_component, "pathname_component");
24+ tracker->TraitTrackInline(value.search_component, "search_component");
25+ tracker->TraitTrackInline(value.hash_component, "hash_component");
26+ }
27+28+static const char* MemoryInfoName(const Type& value) {
29+return "ada::url_pattern";
30+ }
31+32+static size_t SelfSize(const Type& value) { return sizeof(value); }
33+};
34+35+template <>
36+struct MemoryRetainerTraits<
37+ ada::url_pattern_component<URLPatternRegexProvider>> {
38+using Type = ada::url_pattern_component<URLPatternRegexProvider>;
39+static void MemoryInfo(MemoryTracker* tracker, const Type& value) {
40+ tracker->TrackField("pattern", value.pattern);
41+ tracker->TrackField("group_name_list", value.group_name_list);
42+ }
43+44+static const char* MemoryInfoName(const Type& value) {
45+return "ada::url_pattern_component";
46+ }
47+48+static size_t SelfSize(const Type& value) { return sizeof(value); }
49+};
50+51+} // namespace node
52+1153namespace node::url_pattern {
12541355using v8::Array;
@@ -125,13 +167,7 @@ URLPattern::URLPattern(Environment* env,
125167}
126168127169void URLPattern::MemoryInfo(MemoryTracker* tracker) const {
128- tracker->TrackFieldWithSize("protocol", url_pattern_.get_protocol().size());
129- tracker->TrackFieldWithSize("username", url_pattern_.get_username().size());
130- tracker->TrackFieldWithSize("password", url_pattern_.get_password().size());
131- tracker->TrackFieldWithSize("hostname", url_pattern_.get_hostname().size());
132- tracker->TrackFieldWithSize("pathname", url_pattern_.get_pathname().size());
133- tracker->TrackFieldWithSize("search", url_pattern_.get_search().size());
134- tracker->TrackFieldWithSize("hash", url_pattern_.get_hash().size());
170+ tracker->TraitTrackInline(url_pattern_, "url_pattern");
135171}
136172137173void URLPattern::New(const FunctionCallbackInfo<Value>& args) {