Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

benchmarks #3463

Merged
merged 3 commits into from
Nov 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# 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.
---
name: benchmark
on:
push:
branches:
- master
paths-ignore: [ 'README.md', 'paper/**', 'sandbox/**' ]
concurrency:
group: benchmark-${{ github.ref }}
cancel-in-progress: true
jobs:
benchmark:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ubuntu-jdk-21-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: ubuntu-jdk-21-maven-
- run: mvn clean test --errors --batch-mode
- run: |
set -x
sum=$(
printf "\`\`\`text\n"
awk -F ',' '{ arr[$1]+=$2 } END { for (key in arr) printf("%s\t%s\n", key, arr[key])}' eo-runtime/target/eo/xsl-measures.csv | sort -g -k 2 | tac | column -t
printf "\`\`\`\n\n"
echo "The results were calculated in [this GHA job][benchmark-gha]"
echo "on $(date +'%Y-%m-%d') at $(date +'%H:%M'),"
echo "on $(uname) with $(nproc --all) CPUs."
)
export sum
perl -i -0777 -pe 's/(?<=<!-- benchmark_begin -->).*(?=<!-- benchmark_end -->)/\n\n$ENV{sum}\n\n/gs;' README.md
url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}
export url
perl -i -0777 -pe 's/(?<=\[benchmark-gha\]: ).*(?=\n)/$ENV{url}/gs;' README.md
- uses: peter-evans/create-pull-request@v7
with:
branch: benchmark
commit-message: 'new benchmark results'
delete-branch: true
title: 'New benchmarking results'
assignees: yegor256
base: master
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,14 @@
Read about integration with Maven,
[here](https://github.com/objectionary/eo/tree/master/eo-maven-plugin).

## Benchmark

There is some benchmarking here:

<!-- benchmark_begin -->
...
<!-- benchmark_end -->

## How to Contribute

Fork repository, make changes, then send us
Expand All @@ -262,3 +270,4 @@
[![YourKit](https://www.yourkit.com/images/yklogo.png)](https://www.yourkit.com)

[cargo]: https://doc.rust-lang.org/cargo/getting-started/installation.html
[benchmark-gha]: https://github.com/objectionary/hone-maven-plugin/actions/runs/11683609818

Check failure on line 273 in README.md

View workflow job for this annotation

GitHub Actions / markdown-lint

Link and image reference definitions should be needed [Unused link or image reference definition: "benchmark-gha"] [Context: "[benchmark-gha]: https://githu..."]
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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)
);
}
Expand Down
86 changes: 86 additions & 0 deletions eo-parser/src/main/java/org/eolang/parser/StMeasured.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Loading