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);
}
}