diff --git a/src/node_perf.cc b/src/node_perf.cc index 910e1e47efa..253f72157e8 100644 --- a/src/node_perf.cc +++ b/src/node_perf.cc @@ -159,8 +159,10 @@ void MarkGarbageCollectionEnd( if (LIKELY(!state->observers[NODE_PERFORMANCE_ENTRY_TYPE_GC])) return; - double start_time = state->performance_last_gc_start_mark / 1e6; - double duration = (PERFORMANCE_NOW() / 1e6) - start_time; + double start_time = + (state->performance_last_gc_start_mark - timeOrigin) / 1e6; + double duration = + (PERFORMANCE_NOW() / 1e6) - (state->performance_last_gc_start_mark / 1e6); std::unique_ptr entry = std::make_unique( diff --git a/test/parallel/test-performance-gc.js b/test/parallel/test-performance-gc.js index 1561bc5fb78..9c4a3a850a2 100644 --- a/test/parallel/test-performance-gc.js +++ b/test/parallel/test-performance-gc.js @@ -35,6 +35,7 @@ const kinds = [ assert.strictEqual(entry.flags, NODE_PERFORMANCE_GC_FLAGS_FORCED); assert.strictEqual(entry.detail.flags, NODE_PERFORMANCE_GC_FLAGS_FORCED); assert.strictEqual(typeof entry.startTime, 'number'); + assert(entry.startTime < 1e4, 'startTime should be relative to performance.timeOrigin.'); assert.strictEqual(typeof entry.duration, 'number'); obs.disconnect(); }));