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