You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/09/21 17:57:23 UTC

[causeway] branch master updated: CAUSEWAY-3594: TimeTakenModel: support ajax request accurately

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new ed49f173f6 CAUSEWAY-3594: TimeTakenModel: support ajax request accurately
ed49f173f6 is described below

commit ed49f173f6776b7fc854b1ef205d6ffd7a45ac13
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 21 19:57:18 2023 +0200

    CAUSEWAY-3594: TimeTakenModel: support ajax request accurately
---
 .../causeway/commons/internal/base/_Timing.java    | 10 +++++++--
 .../ajaxtable/TimeTakenModel.java                  | 26 ++++++++++++----------
 2 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Timing.java b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Timing.java
index ef44435906..90a56b6d8c 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/base/_Timing.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/base/_Timing.java
@@ -24,6 +24,8 @@ import java.util.function.Supplier;
 
 import org.apache.logging.log4j.Logger;
 
+import lombok.Getter;
+
 /**
  * <h1>- internal use only -</h1>
  * <p>
@@ -66,7 +68,7 @@ public final class _Timing {
 
         private long t0 = 0;
         private long t1 = 0;
-        private boolean stopped;
+        @Getter private boolean stopped;
 
         private StopWatch(final long startedAtSystemNanos) {
             t0 = startedAtSystemNanos;
@@ -76,12 +78,15 @@ public final class _Timing {
             start();
         }
 
+        /** On repeated calls simply restarts the clock. */
         public StopWatch start() {
             t0 = System.nanoTime();
             stopped = false;
             return this;
         }
 
+        /** Snapshots a split time.
+         * Repeated calls will update the measurement value leaving the starting point unchanged. */
         public StopWatch stop() {
             t1 = System.nanoTime();
             stopped  = true;
@@ -118,7 +123,8 @@ public final class _Timing {
 
         @Override
         public String toString() {
-            return String.format(Locale.US, "%d ms", getMillis());
+            //return String.format(Locale.US, "%d ms", getMillis());
+            return String.format(Locale.US, "t0=%d, t1=%d, stopped->%b", t0, t1, stopped);
         }
 
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/TimeTakenModel.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/TimeTakenModel.java
index b0153cef8d..f3a05fccc5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/TimeTakenModel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/TimeTakenModel.java
@@ -22,12 +22,12 @@ import java.util.Locale;
 
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.request.cycle.RequestCycle;
 
-import org.apache.causeway.commons.internal.base._Timing;
-import org.apache.causeway.commons.internal.base._Timing.StopWatch;
-import org.apache.causeway.core.interaction.session.CausewayInteraction;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 
+import lombok.val;
+
 /**
  * Produces render/response timing info when in prototyping mode.
  * <p>
@@ -41,22 +41,24 @@ implements IModel<String> {
 
     static IModel<String> createForPrototypingElseBlank(final MetaModelContext mmc) {
         return mmc.getSystemEnvironment().isPrototyping()
-            ? new TimeTakenModel(mmc)
+            ? new TimeTakenModel()
             : Model.of("");
     }
 
-    private final StopWatch stopWatch;
-
-    protected TimeTakenModel(final MetaModelContext mmc) {
-        this.stopWatch = mmc.getInteractionService().currentInteraction()
-            .map(CausewayInteraction.class::cast)
-            .map(interaction->_Timing.atSystemNanos(interaction.getStartedAtSystemNanos()))
-            .orElseGet(_Timing::now);
+    protected TimeTakenModel() {
     }
 
     @Override
     public String getObject() {
-        return String.format(Locale.US, "... took %.2f seconds", stopWatch.getSeconds());
+
+        val requestCycle = RequestCycle.get();
+        if(requestCycle==null) return ""; // guard against no RequestCycle available on current Thread
+
+        final long t0Millis = requestCycle.getStartTime();
+        final long t1Millis = System.currentTimeMillis();
+        final double secondsSinceRequestStart = 0.001 * (t1Millis - t0Millis);
+
+        return String.format(Locale.US, "... took %.2f seconds", secondsSinceRequestStart);
     }
 
 }