From 98d9540dd7a7aa2e612f16caeea6e57d56ed9f12 Mon Sep 17 00:00:00 2001
From: Ali Ijaz Sheikh <ofrobots@google.com>
Date: Tue, 16 Jan 2018 17:13:36 -0800
Subject: [PATCH] src: use uv_hrtime as tracing timestamp

Override the V8 TracingController to provide uv_hrtime based
timestamps. This allows tracing timestamps to be comparable with
process.hrtime timestamps.

Fixes: https://github.com/nodejs/node/issues/17349
PR-URL: https://github.com/nodejs/node/pull/18196
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Andreas Madsen <amwebdk@gmail.com>
---
 doc/api/tracing.md  | 4 ++++
 src/tracing/agent.h | 9 ++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/doc/api/tracing.md b/doc/api/tracing.md
index e03477b1adf20c..fbfa2941eff9ed 100644
--- a/doc/api/tracing.md
+++ b/doc/api/tracing.md
@@ -19,3 +19,7 @@ node --trace-events-enabled --trace-event-categories v8,node,node.async_hooks se
 Running Node.js with tracing enabled will produce log files that can be opened
 in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
 tab of Chrome.
+
+Starting with Node 10.0.0, the tracing system uses the same time source as the
+one used by `process.hrtime()` however the trace-event timestamps are expressed
+in microseconds, unlike `process.hrtime()` which returns nanoseconds.
diff --git a/src/tracing/agent.h b/src/tracing/agent.h
index bd8e90004b015c..203f53be7eaecc 100644
--- a/src/tracing/agent.h
+++ b/src/tracing/agent.h
@@ -8,7 +8,14 @@
 namespace node {
 namespace tracing {
 
-using v8::platform::tracing::TracingController;
+class TracingController : public v8::platform::tracing::TracingController {
+ public:
+  TracingController() : v8::platform::tracing::TracingController() {}
+
+  int64_t CurrentTimestampMicroseconds() override {
+    return uv_hrtime() / 1000;
+  }
+};
 
 class Agent {
  public: