From 55062e46f3fd71a941bf78b2fe40fb2ee4dadff5 Mon Sep 17 00:00:00 2001 From: Tim Ward Date: Tue, 18 Mar 2025 00:11:55 -0700 Subject: [PATCH 1/3] Move DFSelectionSetBenchmark to performance suite --- .../DFSelectionSetPerformance.java} | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) rename src/test/java/{benchmark/DFSelectionSetBenchmark.java => performance/DFSelectionSetPerformance.java} (73%) diff --git a/src/test/java/benchmark/DFSelectionSetBenchmark.java b/src/test/java/performance/DFSelectionSetPerformance.java similarity index 73% rename from src/test/java/benchmark/DFSelectionSetBenchmark.java rename to src/test/java/performance/DFSelectionSetPerformance.java index 01081cf51c..7029f9ef4a 100644 --- a/src/test/java/benchmark/DFSelectionSetBenchmark.java +++ b/src/test/java/performance/DFSelectionSetPerformance.java @@ -1,27 +1,15 @@ -package benchmark; +package performance; +import benchmark.BenchmarkUtils; import graphql.execution.CoercedVariables; import graphql.language.Document; import graphql.normalized.ExecutableNormalizedField; import graphql.normalized.ExecutableNormalizedOperation; import graphql.normalized.ExecutableNormalizedOperationFactory; import graphql.parser.Parser; -import graphql.schema.DataFetchingFieldSelectionSet; -import graphql.schema.DataFetchingFieldSelectionSetImpl; -import graphql.schema.GraphQLOutputType; -import graphql.schema.GraphQLSchema; -import graphql.schema.SelectedField; +import graphql.schema.*; import graphql.schema.idl.SchemaGenerator; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; import java.util.List; @@ -31,7 +19,7 @@ @Warmup(iterations = 2, time = 5) @Measurement(iterations = 3) @Fork(3) -public class DFSelectionSetBenchmark { +public class DFSelectionSetPerformance { @State(Scope.Benchmark) public static class MyState { @@ -44,10 +32,10 @@ public static class MyState { @Setup public void setup() { try { - String schemaString = BenchmarkUtils.loadResource("large-schema-2.graphqls"); + String schemaString = PerformanceTestingUtils.loadResource("large-schema-2.graphqls"); schema = SchemaGenerator.createdMockedSchema(schemaString); - String query = BenchmarkUtils.loadResource("large-schema-2-query.graphql"); + String query = PerformanceTestingUtils.loadResource("large-schema-2-query.graphql"); document = Parser.parse(query); ExecutableNormalizedOperation executableNormalizedOperation = ExecutableNormalizedOperationFactory.createExecutableNormalizedOperation(schema, document, null, CoercedVariables.emptyVariables()); @@ -89,7 +77,7 @@ public static void mainX(String[] args) throws InterruptedException { myState.setup(); while (true) { - List selectedFields = new DFSelectionSetBenchmark().getSelectedFields(myState); + List selectedFields = new DFSelectionSetPerformance().getSelectedFields(myState); Thread.sleep(500); } } From 90dee30d2d3f8168a9f17ba2ee6bc0fa228af37e Mon Sep 17 00:00:00 2001 From: Tim Ward Date: Tue, 18 Mar 2025 00:12:32 -0700 Subject: [PATCH 2/3] Add performance benchmarks for DataFetchingFieldSelectionSet.getImmediateFields --- .../DFSelectionSetPerformance.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/performance/DFSelectionSetPerformance.java b/src/test/java/performance/DFSelectionSetPerformance.java index 7029f9ef4a..3566ca4647 100644 --- a/src/test/java/performance/DFSelectionSetPerformance.java +++ b/src/test/java/performance/DFSelectionSetPerformance.java @@ -67,11 +67,32 @@ public void benchMarkThroughput(MyState myState, Blackhole blackhole) { blackhole.consume(fields); } + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MILLISECONDS) + public void benchMarkAvgTime_getImmediateFields(MyState myState, Blackhole blackhole) { + List fields = getImmediateFields(myState); + blackhole.consume(fields); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + @OutputTimeUnit(TimeUnit.MILLISECONDS) + public void benchMarkThroughput_getImmediateFields(MyState myState, Blackhole blackhole) { + List fields = getImmediateFields(myState); + blackhole.consume(fields); + } + private List getSelectedFields(MyState myState) { DataFetchingFieldSelectionSet dataFetchingFieldSelectionSet = DataFetchingFieldSelectionSetImpl.newCollector(myState.schema, myState.outputFieldType, () -> myState.normalisedField); return dataFetchingFieldSelectionSet.getFields("wontBeFound"); } + private List getImmediateFields(MyState myState) { + DataFetchingFieldSelectionSet dataFetchingFieldSelectionSet = DataFetchingFieldSelectionSetImpl.newCollector(myState.schema, myState.outputFieldType, () -> myState.normalisedField); + return dataFetchingFieldSelectionSet.getImmediateFields(); + } + public static void mainX(String[] args) throws InterruptedException { MyState myState = new MyState(); myState.setup(); From f267e9d2eebe0cdcc2c59e45f693571861a893d8 Mon Sep 17 00:00:00 2001 From: Tim Ward Date: Tue, 18 Mar 2025 07:22:18 -0700 Subject: [PATCH 3/3] Revert import auto-format. --- .../performance/DFSelectionSetPerformance.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/test/java/performance/DFSelectionSetPerformance.java b/src/test/java/performance/DFSelectionSetPerformance.java index 3566ca4647..12a71fbe8e 100644 --- a/src/test/java/performance/DFSelectionSetPerformance.java +++ b/src/test/java/performance/DFSelectionSetPerformance.java @@ -1,15 +1,27 @@ package performance; -import benchmark.BenchmarkUtils; import graphql.execution.CoercedVariables; import graphql.language.Document; import graphql.normalized.ExecutableNormalizedField; import graphql.normalized.ExecutableNormalizedOperation; import graphql.normalized.ExecutableNormalizedOperationFactory; import graphql.parser.Parser; -import graphql.schema.*; +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.DataFetchingFieldSelectionSetImpl; +import graphql.schema.GraphQLOutputType; +import graphql.schema.GraphQLSchema; +import graphql.schema.SelectedField; import graphql.schema.idl.SchemaGenerator; -import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import java.util.List;