You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/12/18 17:02:28 UTC

(camel) 03/03: CAMEL-20225: use a monotonic source for computing duration

This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5f3c86019c15ef9f883cd3c19bd0084cdb5a6e91
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Dec 15 12:11:58 2023 -0300

    CAMEL-20225: use a monotonic source for computing duration
---
 .../src/main/java/org/apache/camel/support/MonotonicClock.java   | 6 +++++-
 .../src/main/java/org/apache/camel/support/ResetableClock.java   | 9 ++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MonotonicClock.java b/core/camel-support/src/main/java/org/apache/camel/support/MonotonicClock.java
index 3a3ca3f482b..1642f57dfae 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MonotonicClock.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MonotonicClock.java
@@ -17,18 +17,22 @@
 
 package org.apache.camel.support;
 
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.Clock;
 
 public class MonotonicClock implements Clock {
     private final long created;
+    private final long createdNano;
 
     MonotonicClock() {
         this.created = System.currentTimeMillis();
+        this.createdNano = System.nanoTime();
     }
 
     @Override
     public long elapsed() {
-        return System.currentTimeMillis() - created;
+        return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - createdNano);
     }
 
     @Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ResetableClock.java b/core/camel-support/src/main/java/org/apache/camel/support/ResetableClock.java
index cabf9c776fc..130deaecfd4 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ResetableClock.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ResetableClock.java
@@ -17,22 +17,27 @@
 
 package org.apache.camel.support;
 
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.Clock;
 
 public final class ResetableClock implements Clock {
     private long created;
+    private long createdNano;
 
     ResetableClock(Clock clock) {
         this.created = clock.getCreated();
+        this.createdNano = System.nanoTime();
     }
 
     ResetableClock() {
         this.created = System.currentTimeMillis();
+        this.createdNano = System.nanoTime();
     }
 
     @Override
     public long elapsed() {
-        return System.currentTimeMillis() - created;
+        return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - createdNano);
     }
 
     @Override
@@ -45,6 +50,7 @@ public final class ResetableClock implements Clock {
      */
     public void reset() {
         this.created = System.currentTimeMillis();
+        this.createdNano = System.nanoTime();
     }
 
     /**
@@ -53,5 +59,6 @@ public final class ResetableClock implements Clock {
      */
     void unset() {
         this.created = 0;
+        this.createdNano = 0;
     }
 }