test: Add benchmarks.

The benchmarks can be run using 'mvn verify -Pbenchmark'.

Change-Id: I13058f52bea77aa3cb4f1967126c28e1e98d1838
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 @@
         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 @@
           }
         };
 
-    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 @@
                 + "\\}\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;
+  }
 }