diff --git a/lib/_http_client.js b/lib/_http_client.js index a4f7a255a99671..9bf36f73d7bd3a 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -79,6 +79,8 @@ const { hasObserver, } = require('internal/perf/observe'); +const { now } = require('internal/perf/utils'); + const kClientRequestStatistics = Symbol('ClientRequestStatistics'); const { addAbortSignal, finished } = require('stream'); @@ -345,7 +347,7 @@ ClientRequest.prototype._finish = function _finish() { FunctionPrototypeCall(OutgoingMessage.prototype._finish, this); if (hasObserver('http')) { this[kClientRequestStatistics] = { - startTime: process.hrtime(), + startTime: now(), type: 'HttpClient', }; } diff --git a/lib/_http_server.js b/lib/_http_server.js index c8dc22929bfabd..2be636b26433e1 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -96,6 +96,8 @@ const { hasObserver, } = require('internal/perf/observe'); +const { now } = require('internal/perf/utils'); + const STATUS_CODES = { 100: 'Continue', // RFC 7231 6.2.1 101: 'Switching Protocols', // RFC 7231 6.2.2 @@ -194,7 +196,7 @@ function ServerResponse(req) { if (hasObserver('http')) { this[kServerResponseStatistics] = { - startTime: process.hrtime(), + startTime: now(), type: 'HttpRequest', }; } diff --git a/lib/internal/http.js b/lib/internal/http.js index 375118da49f59b..a92a985ffacccc 100644 --- a/lib/internal/http.js +++ b/lib/internal/http.js @@ -16,6 +16,8 @@ const { hasObserver, } = require('internal/perf/observe'); +const { now } = require('internal/perf/utils'); + let utcCache; function utcDate() { @@ -36,12 +38,11 @@ function resetCache() { function emitStatistics(statistics) { if (!hasObserver('http') || statistics == null) return; const startTime = statistics.startTime; - const diff = process.hrtime(startTime); const entry = new InternalPerformanceEntry( statistics.type, 'http', - startTime[0] * 1000 + startTime[1] / 1e6, - diff[0] * 1000 + diff[1] / 1e6, + startTime, + now() - startTime, undefined, ); enqueue(entry); diff --git a/lib/internal/perf/observe.js b/lib/internal/perf/observe.js index 18fc10eb789e01..a9e680ffa026c5 100644 --- a/lib/internal/perf/observe.js +++ b/lib/internal/perf/observe.js @@ -63,6 +63,8 @@ const { const { inspect } = require('util'); +const { now } = require('internal/perf/utils'); + const kDispatch = Symbol('kDispatch'); const kMaybeBuffer = Symbol('kMaybeBuffer'); const kDeprecatedFields = Symbol('kDeprecatedFields'); @@ -451,7 +453,7 @@ function startPerf(target, key, context = {}) { if (hasObserver(context.type)) { target[key] = { ...context, - startTime: process.hrtime(), + startTime: now(), }; } } @@ -460,12 +462,11 @@ function stopPerf(target, key, context = {}) { const ctx = target[key]; if (ctx && hasObserver(ctx.type)) { const startTime = ctx.startTime; - const diff = process.hrtime(startTime); const entry = new InternalPerformanceEntry( ctx.name, ctx.type, - startTime[0] * 1000 + startTime[1] / 1e6, - diff[0] * 1000 + diff[1] / 1e6, + startTime, + now() - startTime, { ...ctx.detail, ...context.detail }, ); enqueue(entry); diff --git a/src/node_http2.cc b/src/node_http2.cc index e0786677264b2e..edbd6f88511651 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -641,7 +641,7 @@ void Http2Stream::EmitStatistics() { std::unique_ptr entry = std::make_unique( "Http2Stream", - start, + start - (node::performance::timeOrigin / 1e6), duration, statistics_); @@ -661,7 +661,7 @@ void Http2Session::EmitStatistics() { std::unique_ptr entry = std::make_unique( "Http2Session", - start, + start - (node::performance::timeOrigin / 1e6), duration, statistics_); diff --git a/src/node_perf.cc b/src/node_perf.cc index 8bda1791fce7db..524328dd13a419 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -165,11 +165,10 @@ void MarkGarbageCollectionEnd( std::unique_ptr entry = std::make_unique( "gc", - start_time, + start_time - (timeOrigin / 1e6), duration, - GCPerformanceEntry::Details( - static_cast(type), - static_cast(flags))); + GCPerformanceEntry::Details(static_cast(type), + static_cast(flags))); env->SetImmediate([entry = std::move(entry)](Environment* env) { entry->Notify(env);