diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2024-06-23 16:24:11 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2024-06-23 16:24:11 +0200 |
commit | 47df8be6dc1e0927a7b3d690100445865dfa8675 (patch) | |
tree | 06587663e86e296156872d331e7aa1be69624884 /core | |
parent | b69b3017699b960ff5133b8ec34bff786bec0f77 (diff) |
test: Add benchmarks.
The benchmarks can be run using 'mvn verify -Pbenchmark'.
Change-Id: I13058f52bea77aa3cb4f1967126c28e1e98d1838
Diffstat (limited to 'core')
3 files changed, 126 insertions, 14 deletions
diff --git a/core/pom.xml b/core/pom.xml index a75acd5..38f7ea5 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -55,12 +55,38 @@ SPDX-License-Identifier: LGPL-3.0-or-later <version>5.10.2</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-core</artifactId> + <version>1.35</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-generator-annprocess</artifactId> + <version>1.35</version> + <scope>test</scope> + </dependency> </dependencies> <build> <plugins> <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-generator-annprocess</artifactId> + <version>1.35</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + + <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> @@ -73,10 +99,54 @@ SPDX-License-Identifier: LGPL-3.0-or-later <plugin> <artifactId>maven-surefire-plugin</artifactId> - <version>3.2.5</version> </plugin> </plugins> </build> + <profiles> + + <profile> + <id>benchmark</id> + + <build> + <plugins> + + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skipTests>true</skipTests> + </configuration> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <executions> + <execution> + <id>run-benchmarks</id> + <phase>integration-test</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <classpathScope>test</classpathScope> + <executable>java</executable> + <arguments> + <argument>-classpath</argument> + <classpath /> + <argument>org.openjdk.jmh.Main</argument> + <argument>.*</argument> + </arguments> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + </build> + </profile> + + </profiles> + </project> diff --git a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java new file mode 100644 index 0000000..1a1c17c --- /dev/null +++ b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java @@ -0,0 +1,34 @@ +package eu.mulk.quarkus.googlecloud.jsonlogging; + +import java.util.List; +import org.jboss.logmanager.ExtLogRecord; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + +@Warmup(iterations = 5, time = 1) +@Measurement(iterations = 10, time = 1) +@Fork(value = 1) +@State(org.openjdk.jmh.annotations.Scope.Benchmark) +public class FormatterBenchmark { + + private ExtLogRecord simpleLogRecord; + private ExtLogRecord structuredLogRecord; + private Formatter formatter; + + @Setup + public void setup() { + simpleLogRecord = FormatterTest.makeSimpleRecord(); + structuredLogRecord = FormatterTest.makeStructuredRecord(); + formatter = new Formatter(List.of(), List.of()); + } + + @Benchmark + public void simpleLogRecord(Blackhole blackhole) { + blackhole.consume(formatter.format(simpleLogRecord)); + } + + @Benchmark + public void structuredLogRecord(Blackhole blackhole) { + blackhole.consume(formatter.format(structuredLogRecord)); + } +} diff --git a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java index 49cda39..91cc8e4 100644 --- a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java +++ b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java @@ -1,20 +1,19 @@ package eu.mulk.quarkus.googlecloud.jsonlogging; +import static org.junit.jupiter.api.Assertions.assertLinesMatch; + import jakarta.json.Json; +import java.util.Collection; +import java.util.List; import org.jboss.logmanager.ExtLogRecord; import org.jboss.logmanager.Level; import org.junit.jupiter.api.Test; -import java.util.Collection; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertLinesMatch; - class FormatterTest { @Test void simpleRecord() { - var logRecord = new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName()); + var logRecord = makeSimpleRecord(); var formatter = new Formatter(List.of(), List.of()); var formattingResult = formatter.format(logRecord); @@ -34,6 +33,10 @@ class FormatterTest { List.of(formattingResult)); } + static ExtLogRecord makeSimpleRecord() { + return new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName()); + } + @Test void structuredRecord() { var parameterProvider = @@ -55,13 +58,7 @@ class FormatterTest { } }; - var logRecord = new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName()); - logRecord.setParameters( - new Object[] { - (StructuredParameter) - () -> Json.createObjectBuilder().add("one", 1).add("two", 2.0).add("yes", true), - Label.of("a", "b") - }); + var logRecord = makeStructuredRecord(); var formatter = new Formatter(List.of(parameterProvider), List.of(labelProvider)); var formattingResult = formatter.format(logRecord); @@ -85,4 +82,15 @@ class FormatterTest { + "\\}\n"), List.of(formattingResult)); } + + static ExtLogRecord makeStructuredRecord() { + var logRecord = makeSimpleRecord(); + logRecord.setParameters( + new Object[] { + (StructuredParameter) + () -> Json.createObjectBuilder().add("one", 1).add("two", 2.0).add("yes", true), + Label.of("a", "b") + }); + return logRecord; + } } |