From bb9bb5e6ed0a835561f2ea4c934db0f85a1d2466 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Tue, 5 Nov 2024 20:17:51 +0300 Subject: [PATCH] #3257: measure --- .../java/org/eolang/maven/OptimizeMojo.java | 10 ++- .../java/org/eolang/maven/TranspileMojo.java | 10 ++- .../java/org/eolang/parser/StMeasured.java | 86 +++++++++++++++++++ 3 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 eo-parser/src/main/java/org/eolang/parser/StMeasured.java diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/OptimizeMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/OptimizeMojo.java index e3786beab6..ce99267f89 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/OptimizeMojo.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/OptimizeMojo.java @@ -26,6 +26,7 @@ import com.jcabi.log.Logger; import com.jcabi.xml.XML; import com.jcabi.xml.XMLDocument; +import com.yegor256.xsline.TrLambda; import java.nio.file.Path; import java.util.Collection; import org.apache.maven.plugins.annotations.LifecyclePhase; @@ -42,6 +43,7 @@ import org.eolang.maven.tojos.ForeignTojo; import org.eolang.maven.tojos.TojoHash; import org.eolang.parser.ParsingTrain; +import org.eolang.parser.StMeasured; /** * Optimize XML files. @@ -141,7 +143,13 @@ private Optimization optimization() { final Optimization opt; if (this.trackOptimizationSteps) { opt = new OptSpy( - new ParsingTrain(), + new TrLambda( + new ParsingTrain(), + shift -> new StMeasured( + shift, + this.targetDir.toPath().resolve("xsl-measures.csv") + ) + ), this.targetDir.toPath().resolve(OptimizeMojo.STEPS) ); } else { diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/TranspileMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/TranspileMojo.java index 4134ce55e2..622169f005 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/TranspileMojo.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/TranspileMojo.java @@ -31,6 +31,7 @@ import com.yegor256.xsline.TrClasspath; import com.yegor256.xsline.TrDefault; import com.yegor256.xsline.TrJoined; +import com.yegor256.xsline.TrLambda; import com.yegor256.xsline.Train; import java.io.File; import java.io.IOException; @@ -63,6 +64,7 @@ import org.eolang.maven.tojos.AttributeNotFoundException; import org.eolang.maven.tojos.ForeignTojo; import org.eolang.maven.tojos.TojoHash; +import org.eolang.parser.StMeasured; /** * Transpile. @@ -233,7 +235,13 @@ private long transpiled(final ForeignTojo tojo, final Optimization transpilation */ private Optimization transpilation() { return new OptSpy( - TranspileMojo.TRAIN, + new TrLambda( + TranspileMojo.TRAIN, + shift -> new StMeasured( + shift, + this.targetDir.toPath().resolve("xsl-measures.csv") + ) + ), this.targetDir.toPath().resolve(TranspileMojo.PRE) ); } diff --git a/eo-parser/src/main/java/org/eolang/parser/StMeasured.java b/eo-parser/src/main/java/org/eolang/parser/StMeasured.java new file mode 100644 index 0000000000..a7776ad16d --- /dev/null +++ b/eo-parser/src/main/java/org/eolang/parser/StMeasured.java @@ -0,0 +1,86 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.eolang.parser; + +import com.jcabi.xml.XML; +import com.yegor256.xsline.Shift; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; + +/** + * Shift that measures and saves stats into a file. + * + * @since 0.30 + */ +public final class StMeasured implements Shift { + + /** + * Origin shift. + */ + private final Shift origin; + + /** + * Log file. + */ + private final Path path; + + /** + * Ctor. + * @param shift Origin shift + * @param log Log file + */ + public StMeasured(final Shift shift, final Path log) { + this.origin = shift; + this.path = log; + } + + @Override + public String uid() { + return this.origin.uid(); + } + + @Override + @SuppressWarnings("PMD.PrematureDeclaration") + public XML apply(final int position, final XML xml) { + final long start = System.currentTimeMillis(); + final XML out = this.origin.apply(position, xml); + try { + Files.write( + this.path, + String.format( + "%s,%d\n", + this.origin.uid(), + System.currentTimeMillis() - start + ).getBytes(), + StandardOpenOption.APPEND, + StandardOpenOption.CREATE + ); + } catch (final IOException ex) { + throw new IllegalArgumentException(ex); + } + return out; + } +}