Skip to content

Commit d766cfa

Browse files
theanarkhtargos
authored andcommitted
net,dns: move hasObserver out of perf function
move the hasObserver out of startPerf and stopPerf to avoid generating useless objects when these are no observer PR-URL: #43217 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Minwoo Jung <[email protected]>
1 parent 1431861 commit d766cfa

File tree

4 files changed

+79
-52
lines changed

4 files changed

+79
-52
lines changed

lib/dns.js

+42-27
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const kPerfHooksDnsLookupServiceContext = Symbol('kPerfHooksDnsLookupServiceCont
6868
const kPerfHooksDnsLookupResolveContext = Symbol('kPerfHooksDnsLookupResolveContext');
6969

7070
const {
71+
hasObserver,
7172
startPerf,
7273
stopPerf,
7374
} = require('internal/perf/observe');
@@ -81,7 +82,9 @@ function onlookup(err, addresses) {
8182
return this.callback(dnsException(err, 'getaddrinfo', this.hostname));
8283
}
8384
this.callback(null, addresses[0], this.family || isIP(addresses[0]));
84-
stopPerf(this, kPerfHooksDnsLookupContext);
85+
if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) {
86+
stopPerf(this, kPerfHooksDnsLookupContext);
87+
}
8588
}
8689

8790

@@ -100,7 +103,9 @@ function onlookupall(err, addresses) {
100103
}
101104

102105
this.callback(null, addresses);
103-
stopPerf(this, kPerfHooksDnsLookupContext);
106+
if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) {
107+
stopPerf(this, kPerfHooksDnsLookupContext);
108+
}
104109
}
105110

106111

@@ -173,13 +178,15 @@ function lookup(hostname, options, callback) {
173178
process.nextTick(callback, dnsException(err, 'getaddrinfo', hostname));
174179
return {};
175180
}
176-
const detail = {
177-
hostname,
178-
family,
179-
hints,
180-
verbatim,
181-
};
182-
startPerf(req, kPerfHooksDnsLookupContext, { type: 'dns', name: 'lookup', detail });
181+
if (hasObserver('dns')) {
182+
const detail = {
183+
hostname,
184+
family,
185+
hints,
186+
verbatim,
187+
};
188+
startPerf(req, kPerfHooksDnsLookupContext, { type: 'dns', name: 'lookup', detail });
189+
}
183190
return req;
184191
}
185192

@@ -192,7 +199,9 @@ function onlookupservice(err, hostname, service) {
192199
return this.callback(dnsException(err, 'getnameinfo', this.hostname));
193200

194201
this.callback(null, hostname, service);
195-
stopPerf(this, kPerfHooksDnsLookupServiceContext);
202+
if (this[kPerfHooksDnsLookupServiceContext] && hasObserver('dns')) {
203+
stopPerf(this, kPerfHooksDnsLookupServiceContext);
204+
}
196205
}
197206

198207

@@ -217,14 +226,16 @@ function lookupService(address, port, callback) {
217226

218227
const err = cares.getnameinfo(req, address, port);
219228
if (err) throw dnsException(err, 'getnameinfo', address);
220-
startPerf(req, kPerfHooksDnsLookupServiceContext, {
221-
type: 'dns',
222-
name: 'lookupService',
223-
detail: {
224-
host: address,
225-
port
226-
}
227-
});
229+
if (hasObserver('dns')) {
230+
startPerf(req, kPerfHooksDnsLookupServiceContext, {
231+
type: 'dns',
232+
name: 'lookupService',
233+
detail: {
234+
host: address,
235+
port,
236+
},
237+
});
238+
}
228239
return req;
229240
}
230241

@@ -241,7 +252,9 @@ function onresolve(err, result, ttls) {
241252
this.callback(dnsException(err, this.bindingName, this.hostname));
242253
else {
243254
this.callback(null, result);
244-
stopPerf(this, kPerfHooksDnsLookupResolveContext);
255+
if (this[kPerfHooksDnsLookupResolveContext] && hasObserver('dns')) {
256+
stopPerf(this, kPerfHooksDnsLookupResolveContext);
257+
}
245258
}
246259
}
247260

@@ -264,14 +277,16 @@ function resolver(bindingName) {
264277
req.ttl = !!(options && options.ttl);
265278
const err = this._handle[bindingName](req, toASCII(name));
266279
if (err) throw dnsException(err, bindingName, name);
267-
startPerf(req, kPerfHooksDnsLookupResolveContext, {
268-
type: 'dns',
269-
name: bindingName,
270-
detail: {
271-
host: name,
272-
ttl: req.ttl
273-
}
274-
});
280+
if (hasObserver('dns')) {
281+
startPerf(req, kPerfHooksDnsLookupResolveContext, {
282+
type: 'dns',
283+
name: bindingName,
284+
detail: {
285+
host: name,
286+
ttl: req.ttl,
287+
},
288+
});
289+
}
275290
return req;
276291
}
277292
ObjectDefineProperty(query, 'name', { value: bindingName });

lib/internal/dns/promises.js

+17-7
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const kPerfHooksDnsLookupServiceContext = Symbol('kPerfHooksDnsLookupServiceCont
4343
const kPerfHooksDnsLookupResolveContext = Symbol('kPerfHooksDnsLookupResolveContext');
4444

4545
const {
46+
hasObserver,
4647
startPerf,
4748
stopPerf,
4849
} = require('internal/perf/observe');
@@ -55,7 +56,9 @@ function onlookup(err, addresses) {
5556

5657
const family = this.family || isIP(addresses[0]);
5758
this.resolve({ address: addresses[0], family });
58-
stopPerf(this, kPerfHooksDnsLookupContext);
59+
if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) {
60+
stopPerf(this, kPerfHooksDnsLookupContext);
61+
}
5962
}
6063

6164
function onlookupall(err, addresses) {
@@ -76,7 +79,9 @@ function onlookupall(err, addresses) {
7679
}
7780

7881
this.resolve(addresses);
79-
stopPerf(this, kPerfHooksDnsLookupContext);
82+
if (this[kPerfHooksDnsLookupContext] && hasObserver('dns')) {
83+
stopPerf(this, kPerfHooksDnsLookupContext);
84+
}
8085
}
8186

8287
function createLookupPromise(family, hostname, all, hints, verbatim) {
@@ -107,7 +112,7 @@ function createLookupPromise(family, hostname, all, hints, verbatim) {
107112

108113
if (err) {
109114
reject(dnsException(err, 'getaddrinfo', hostname));
110-
} else {
115+
} else if (hasObserver('dns')) {
111116
const detail = {
112117
hostname,
113118
family,
@@ -156,7 +161,9 @@ function onlookupservice(err, hostname, service) {
156161
}
157162

158163
this.resolve({ hostname, service });
159-
stopPerf(this, kPerfHooksDnsLookupServiceContext);
164+
if (this[kPerfHooksDnsLookupServiceContext] && hasObserver('dns')) {
165+
stopPerf(this, kPerfHooksDnsLookupServiceContext);
166+
}
160167
}
161168

162169
function createLookupServicePromise(hostname, port) {
@@ -173,7 +180,7 @@ function createLookupServicePromise(hostname, port) {
173180

174181
if (err)
175182
reject(dnsException(err, 'getnameinfo', hostname));
176-
else
183+
else if (hasObserver('dns')) {
177184
startPerf(req, kPerfHooksDnsLookupServiceContext, {
178185
type: 'dns',
179186
name: 'lookupService',
@@ -182,6 +189,7 @@ function createLookupServicePromise(hostname, port) {
182189
port
183190
}
184191
});
192+
}
185193
});
186194
}
187195

@@ -209,7 +217,9 @@ function onresolve(err, result, ttls) {
209217
result, (address, index) => ({ address, ttl: ttls[index] }));
210218

211219
this.resolve(result);
212-
stopPerf(this, kPerfHooksDnsLookupResolveContext);
220+
if (this[kPerfHooksDnsLookupResolveContext] && hasObserver('dns')) {
221+
stopPerf(this, kPerfHooksDnsLookupResolveContext);
222+
}
213223
}
214224

215225
function createResolverPromise(resolver, bindingName, hostname, ttl) {
@@ -227,7 +237,7 @@ function createResolverPromise(resolver, bindingName, hostname, ttl) {
227237

228238
if (err)
229239
reject(dnsException(err, bindingName, hostname));
230-
else {
240+
else if (hasObserver('dns')) {
231241
startPerf(req, kPerfHooksDnsLookupResolveContext, {
232242
type: 'dns',
233243
name: bindingName,

lib/internal/perf/observe.js

+15-16
Original file line numberDiff line numberDiff line change
@@ -463,27 +463,26 @@ function hasObserver(type) {
463463

464464

465465
function startPerf(target, key, context = {}) {
466-
if (hasObserver(context.type)) {
467-
target[key] = {
468-
...context,
469-
startTime: now(),
470-
};
471-
}
466+
target[key] = {
467+
...context,
468+
startTime: now(),
469+
};
472470
}
473471

474472
function stopPerf(target, key, context = {}) {
475473
const ctx = target[key];
476-
if (ctx && hasObserver(ctx.type)) {
477-
const startTime = ctx.startTime;
478-
const entry = new InternalPerformanceEntry(
479-
ctx.name,
480-
ctx.type,
481-
startTime,
482-
now() - startTime,
483-
{ ...ctx.detail, ...context.detail },
484-
);
485-
enqueue(entry);
474+
if (!ctx) {
475+
return;
486476
}
477+
const startTime = ctx.startTime;
478+
const entry = new InternalPerformanceEntry(
479+
ctx.name,
480+
ctx.type,
481+
startTime,
482+
now() - startTime,
483+
{ ...ctx.detail, ...context.detail },
484+
);
485+
enqueue(entry);
487486
}
488487

489488
module.exports = {

lib/net.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ const noop = () => {};
133133

134134
const kPerfHooksNetConnectContext = Symbol('kPerfHooksNetConnectContext');
135135
const {
136+
hasObserver,
136137
startPerf,
137138
stopPerf,
138139
} = require('internal/perf/observe');
@@ -990,7 +991,7 @@ function internalConnect(
990991

991992
const ex = exceptionWithHostPort(err, 'connect', address, port, details);
992993
self.destroy(ex);
993-
} else if (addressType === 6 || addressType === 4) {
994+
} else if ((addressType === 6 || addressType === 4) && hasObserver('net')) {
994995
startPerf(self, kPerfHooksNetConnectContext, { type: 'net', name: 'connect', detail: { host: address, port } });
995996
}
996997
}
@@ -1217,7 +1218,9 @@ function afterConnect(status, handle, req, readable, writable) {
12171218
// this doesn't actually consume any bytes, because len=0.
12181219
if (readable && !self.isPaused())
12191220
self.read(0);
1220-
stopPerf(self, kPerfHooksNetConnectContext);
1221+
if (self[kPerfHooksNetConnectContext] && hasObserver('net')) {
1222+
stopPerf(self, kPerfHooksNetConnectContext);
1223+
}
12211224
} else {
12221225
self.connecting = false;
12231226
let details;

0 commit comments

Comments
 (0)