From 94b1329136744d8f15f1873f6611f0f928a8887c Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 13:41:49 +0200 Subject: [PATCH 01/25] Setup JMH benchmarking Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 3 ++ pom.xml | 20 +++++++- .../sdk/FlagEvaluationBenchmark.java | 31 ++++++++++++ .../sdk/state/FlagEvaluationState.java | 45 +++++++++++++++++ .../dev/openfeature/sdk/state/HooksState.java | 48 +++++++++++++++++++ 5 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java create mode 100644 src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java create mode 100644 src/bench/java/dev/openfeature/sdk/state/HooksState.java diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 0c4137ed0..5614f2ed3 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -54,5 +54,8 @@ jobs: fail_ci_if_error: true # optional (default = false) verbose: true # optional (default = false) + - name: Run JMH benchmark + run: 'jmh:benchmark -rf json -rff output.json .*' + - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@624d0bca90f761ffa7ce50c41875a1a226969a02 diff --git a/pom.xml b/pom.xml index c4461155f..6cd01abe2 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,12 @@ 1.37 test - + + org.openjdk.jmh + jmh-generator-annprocess + 1.37 + test + @@ -703,6 +708,19 @@ + + maven-compiler-plugin + 3.8.1 + + + + org.openjdk.jmh + jmh-generator-annprocess + 1.37 + + + + diff --git a/src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java b/src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java new file mode 100644 index 000000000..123849e23 --- /dev/null +++ b/src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import dev.openfeature.sdk.state.FlagEvaluationState; +import java.util.concurrent.TimeUnit; +import dev.openfeature.sdk.state.HooksState; +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.Warmup; + + +@BenchmarkMode(Mode.Throughput) +@Warmup(time = 1, timeUnit = TimeUnit.SECONDS, iterations = 1) +//@Warmup(time = 1, timeUnit = TimeUnit.SECONDS, iterations = 2) +@Measurement(time = 5, timeUnit = TimeUnit.SECONDS, iterations = 1) +//@Measurement(time = 5, timeUnit = TimeUnit.SECONDS, iterations = 4) +@Fork(1) +public class FlagEvaluationBenchmark { + + @Benchmark + public String flagEvaluations(FlagEvaluationState state) { + return state.client.getStringDetails(FlagEvaluationState.FLAG_KEY, "default").getValue(); + } + + @Benchmark + public String hookExecution(HooksState state) { + return state.client.getStringDetails(HooksState.FLAG_KEY, "default").getValue(); + } +} diff --git a/src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java b/src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java new file mode 100644 index 000000000..7682b3026 --- /dev/null +++ b/src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java @@ -0,0 +1,45 @@ +package dev.openfeature.sdk.state; + +import dev.openfeature.sdk.Client; +import dev.openfeature.sdk.ImmutableMetadata; +import dev.openfeature.sdk.OpenFeatureAPI; +import dev.openfeature.sdk.providers.memory.Flag; +import dev.openfeature.sdk.providers.memory.InMemoryProvider; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import java.util.Map; + +@State(Scope.Benchmark) +public class FlagEvaluationState { + public static final String FLAG_KEY = "flag-key"; + public static final String DOMAIN = "jmh-domain"; + + public InMemoryProvider provider; + public Client client; + + @Setup(Level.Trial) + public void setup() { + provider = new InMemoryProvider( + Map.of( + FLAG_KEY, + Flag.builder() + .variant("a", "a-value") + .variant("b", "b-value") + .defaultVariant("b") + .flagMetadata(ImmutableMetadata.builder().addString("meta", "data").build()) + .build() + ) + ); + OpenFeatureAPI.getInstance().setProviderAndWait(DOMAIN, provider); + client = OpenFeatureAPI.getInstance().getClient(DOMAIN); + } + + @TearDown(Level.Trial) + public void teardown() { + OpenFeatureAPI.getInstance().shutdown(); + OpenFeatureAPI.getInstance().clearHooks(); + } +} diff --git a/src/bench/java/dev/openfeature/sdk/state/HooksState.java b/src/bench/java/dev/openfeature/sdk/state/HooksState.java new file mode 100644 index 000000000..976824189 --- /dev/null +++ b/src/bench/java/dev/openfeature/sdk/state/HooksState.java @@ -0,0 +1,48 @@ +package dev.openfeature.sdk.state; + +import dev.openfeature.sdk.Client; +import dev.openfeature.sdk.Hook; +import dev.openfeature.sdk.ImmutableMetadata; +import dev.openfeature.sdk.OpenFeatureAPI; +import dev.openfeature.sdk.StringHook; +import dev.openfeature.sdk.providers.memory.Flag; +import dev.openfeature.sdk.providers.memory.InMemoryProvider; +import java.util.Map; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; + +@State(Scope.Benchmark) +public class HooksState { + public static final String FLAG_KEY = "flag-key"; + public static final String DOMAIN = "jmh-domain"; + + public InMemoryProvider provider; + public Client client; + + @Setup(Level.Trial) + public void setup() { + provider = new InMemoryProvider( + Map.of( + FLAG_KEY, + Flag.builder() + .variant("a", "a-value") + .variant("b", "b-value") + .defaultVariant("b") + .flagMetadata(ImmutableMetadata.builder().addString("meta", "data").build()) + .build() + ) + ); + OpenFeatureAPI.getInstance().setProviderAndWait(DOMAIN, provider); + client = OpenFeatureAPI.getInstance().getClient(DOMAIN); + client.addHooks(new StringHook() {}, new Hook() {}); + } + + @TearDown(Level.Trial) + public void teardown() { + OpenFeatureAPI.getInstance().shutdown(); + OpenFeatureAPI.getInstance().clearHooks(); + } +} From f1cebbe1ec059b15b3198c77f6bd73b0fce8a1c8 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 14:12:23 +0200 Subject: [PATCH 02/25] try to fix lombok Signed-off-by: christian.lutnik --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 6cd01abe2..6ad3db0d3 100644 --- a/pom.xml +++ b/pom.xml @@ -718,6 +718,11 @@ jmh-generator-annprocess 1.37 + + org.projectlombok + lombok + 1.16.20 + From f0e5b68e3d632a6d9f56725631de542bc48d8a38 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 14:20:19 +0200 Subject: [PATCH 03/25] try to fix lombok Signed-off-by: christian.lutnik --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6ad3db0d3..47ac12a71 100644 --- a/pom.xml +++ b/pom.xml @@ -721,7 +721,7 @@ org.projectlombok lombok - 1.16.20 + 1.18.38 From bdeb11ecdd182807250efbde5b7f8e4df9871495 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 14:25:04 +0200 Subject: [PATCH 04/25] try to fix lombok Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 5614f2ed3..dfe9f99d1 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -55,7 +55,9 @@ jobs: verbose: true # optional (default = false) - name: Run JMH benchmark - run: 'jmh:benchmark -rf json -rff output.json .*' + run: | + 'mvn clean compile' + 'mvn jmh:benchmark -rf json -rff output.json .*' - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@624d0bca90f761ffa7ce50c41875a1a226969a02 From 0f49346770a25a4e5351a839077ebc40c0e0e774 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 14:39:37 +0200 Subject: [PATCH 05/25] try to run jmh bench Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index dfe9f99d1..e1863ed3d 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -55,9 +55,10 @@ jobs: verbose: true # optional (default = false) - name: Run JMH benchmark - run: | - 'mvn clean compile' - 'mvn jmh:benchmark -rf json -rff output.json .*' + run: mvn --batch-mode --update-snapshots --activate-profiles e2e,${{ matrix.build.profile }} verify + #run: | + # 'mvn clean compile' + # 'mvn jmh:benchmark -rf json -rff output.json .*' - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@624d0bca90f761ffa7ce50c41875a1a226969a02 From 97d740169b45c3562388d1b0a51a96f56c38811b Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 14:48:14 +0200 Subject: [PATCH 06/25] try to run jmh bench Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index e1863ed3d..4a03abef2 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -55,7 +55,7 @@ jobs: verbose: true # optional (default = false) - name: Run JMH benchmark - run: mvn --batch-mode --update-snapshots --activate-profiles e2e,${{ matrix.build.profile }} verify + run: mvn jmh:benchmark #run: | # 'mvn clean compile' # 'mvn jmh:benchmark -rf json -rff output.json .*' From 9a62234e8c1aeb6e86431d7c8146ba575f06c709 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 16:05:33 +0200 Subject: [PATCH 07/25] try to run jmh bench Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 2 +- pom.xml | 9 ++++----- .../sdk/benchmark}/FlagEvaluationBenchmark.java | 6 +++--- .../sdk/benchmark}/state/FlagEvaluationState.java | 8 ++------ .../dev/openfeature/sdk/benchmark}/state/HooksState.java | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) rename src/{bench/java/dev/openfeature/sdk => test/java/dev/openfeature/sdk/benchmark}/FlagEvaluationBenchmark.java (86%) rename src/{bench/java/dev/openfeature/sdk => test/java/dev/openfeature/sdk/benchmark}/state/FlagEvaluationState.java (84%) rename src/{bench/java/dev/openfeature/sdk => test/java/dev/openfeature/sdk/benchmark}/state/HooksState.java (97%) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 4a03abef2..a1239ebb9 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -55,7 +55,7 @@ jobs: verbose: true # optional (default = false) - name: Run JMH benchmark - run: mvn jmh:benchmark + run: mvn --activate-profiles benchmark jmh:benchmark #run: | # 'mvn clean compile' # 'mvn jmh:benchmark -rf json -rff output.json .*' diff --git a/pom.xml b/pom.xml index 47ac12a71..211d4a038 100644 --- a/pom.xml +++ b/pom.xml @@ -167,12 +167,12 @@ 1.37 test - + @@ -303,7 +303,6 @@ - @@ -708,7 +707,7 @@ - + diff --git a/src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java similarity index 86% rename from src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java rename to src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java index 123849e23..65c7b1e11 100644 --- a/src/bench/java/dev/openfeature/sdk/FlagEvaluationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java @@ -1,8 +1,8 @@ -package dev.openfeature.sdk; +package dev.openfeature.sdk.benchmark; -import dev.openfeature.sdk.state.FlagEvaluationState; +import dev.openfeature.sdk.benchmark.state.FlagEvaluationState; +import dev.openfeature.sdk.benchmark.state.HooksState; import java.util.concurrent.TimeUnit; -import dev.openfeature.sdk.state.HooksState; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; diff --git a/src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java b/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java similarity index 84% rename from src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java rename to src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java index 7682b3026..30acf864d 100644 --- a/src/bench/java/dev/openfeature/sdk/state/FlagEvaluationState.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java @@ -1,15 +1,11 @@ -package dev.openfeature.sdk.state; +package dev.openfeature.sdk.benchmark.state; import dev.openfeature.sdk.Client; import dev.openfeature.sdk.ImmutableMetadata; import dev.openfeature.sdk.OpenFeatureAPI; import dev.openfeature.sdk.providers.memory.Flag; import dev.openfeature.sdk.providers.memory.InMemoryProvider; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.*; import java.util.Map; @State(Scope.Benchmark) diff --git a/src/bench/java/dev/openfeature/sdk/state/HooksState.java b/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java similarity index 97% rename from src/bench/java/dev/openfeature/sdk/state/HooksState.java rename to src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java index 976824189..736c3cac3 100644 --- a/src/bench/java/dev/openfeature/sdk/state/HooksState.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java @@ -1,4 +1,4 @@ -package dev.openfeature.sdk.state; +package dev.openfeature.sdk.benchmark.state; import dev.openfeature.sdk.Client; import dev.openfeature.sdk.Hook; From c8a41727460191f26c069c2d367d13134497fb1e Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 8 Jul 2025 16:22:41 +0200 Subject: [PATCH 08/25] try to run jmh bench Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 5 ++-- .../benchmark/FlagEvaluationBenchmark.java | 9 ++++---- .../benchmark/state/FlagEvaluationState.java | 23 +++++++++---------- .../sdk/benchmark/state/HooksState.java | 21 ++++++++--------- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index a1239ebb9..83ddcf4da 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -54,8 +54,9 @@ jobs: fail_ci_if_error: true # optional (default = false) verbose: true # optional (default = false) - - name: Run JMH benchmark - run: mvn --activate-profiles benchmark jmh:benchmark + - if: matrix.build.java == '17' + name: Run JMH benchmark + run: mvn --activate-profiles benchmark jmh:benchmark -rf json -rff output.json .* #run: | # 'mvn clean compile' # 'mvn jmh:benchmark -rf json -rff output.json .*' diff --git a/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java index 65c7b1e11..c7a454124 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/FlagEvaluationBenchmark.java @@ -10,18 +10,19 @@ import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.Warmup; - @BenchmarkMode(Mode.Throughput) @Warmup(time = 1, timeUnit = TimeUnit.SECONDS, iterations = 1) -//@Warmup(time = 1, timeUnit = TimeUnit.SECONDS, iterations = 2) +// @Warmup(time = 1, timeUnit = TimeUnit.SECONDS, iterations = 2) @Measurement(time = 5, timeUnit = TimeUnit.SECONDS, iterations = 1) -//@Measurement(time = 5, timeUnit = TimeUnit.SECONDS, iterations = 4) +// @Measurement(time = 5, timeUnit = TimeUnit.SECONDS, iterations = 4) @Fork(1) public class FlagEvaluationBenchmark { @Benchmark public String flagEvaluations(FlagEvaluationState state) { - return state.client.getStringDetails(FlagEvaluationState.FLAG_KEY, "default").getValue(); + return state.client + .getStringDetails(FlagEvaluationState.FLAG_KEY, "default") + .getValue(); } @Benchmark diff --git a/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java b/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java index 30acf864d..53eb73765 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/state/FlagEvaluationState.java @@ -5,8 +5,8 @@ import dev.openfeature.sdk.OpenFeatureAPI; import dev.openfeature.sdk.providers.memory.Flag; import dev.openfeature.sdk.providers.memory.InMemoryProvider; -import org.openjdk.jmh.annotations.*; import java.util.Map; +import org.openjdk.jmh.annotations.*; @State(Scope.Benchmark) public class FlagEvaluationState { @@ -18,17 +18,16 @@ public class FlagEvaluationState { @Setup(Level.Trial) public void setup() { - provider = new InMemoryProvider( - Map.of( - FLAG_KEY, - Flag.builder() - .variant("a", "a-value") - .variant("b", "b-value") - .defaultVariant("b") - .flagMetadata(ImmutableMetadata.builder().addString("meta", "data").build()) - .build() - ) - ); + provider = new InMemoryProvider(Map.of( + FLAG_KEY, + Flag.builder() + .variant("a", "a-value") + .variant("b", "b-value") + .defaultVariant("b") + .flagMetadata(ImmutableMetadata.builder() + .addString("meta", "data") + .build()) + .build())); OpenFeatureAPI.getInstance().setProviderAndWait(DOMAIN, provider); client = OpenFeatureAPI.getInstance().getClient(DOMAIN); } diff --git a/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java b/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java index 736c3cac3..cd1993afb 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/state/HooksState.java @@ -24,17 +24,16 @@ public class HooksState { @Setup(Level.Trial) public void setup() { - provider = new InMemoryProvider( - Map.of( - FLAG_KEY, - Flag.builder() - .variant("a", "a-value") - .variant("b", "b-value") - .defaultVariant("b") - .flagMetadata(ImmutableMetadata.builder().addString("meta", "data").build()) - .build() - ) - ); + provider = new InMemoryProvider(Map.of( + FLAG_KEY, + Flag.builder() + .variant("a", "a-value") + .variant("b", "b-value") + .defaultVariant("b") + .flagMetadata(ImmutableMetadata.builder() + .addString("meta", "data") + .build()) + .build())); OpenFeatureAPI.getInstance().setProviderAndWait(DOMAIN, provider); client = OpenFeatureAPI.getInstance().getClient(DOMAIN); client.addHooks(new StringHook() {}, new Hook() {}); From 19acbe81d9cd107464d1e5c8af70ecb8de26529c Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Wed, 9 Jul 2025 12:46:54 +0200 Subject: [PATCH 09/25] run jmh bench and output as json Signed-off-by: christian.lutnik --- .github/workflows/pullrequest.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 83ddcf4da..be3b52fe5 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -16,7 +16,7 @@ jobs: - java: 11 profile: java11 name: with Java ${{ matrix.build.java }} - runs-on: ${{ matrix.os}} + runs-on: ${{ matrix.os }} steps: - name: Check out the code uses: actions/checkout@09d2acae674a48949e3602304ab46fd20ae0c42f @@ -56,10 +56,7 @@ jobs: - if: matrix.build.java == '17' name: Run JMH benchmark - run: mvn --activate-profiles benchmark jmh:benchmark -rf json -rff output.json .* - #run: | - # 'mvn clean compile' - # 'mvn jmh:benchmark -rf json -rff output.json .*' + run: mvn --activate-profiles benchmark jmh:benchmark "-Djmh.rf=json" "-Djmh.rff=benchmark/results/results.json" - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@624d0bca90f761ffa7ce50c41875a1a226969a02 From 2341fd3d9c1a88cb147bc908a6c7fcc224cf3dc4 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 10 Jul 2025 13:07:07 +0200 Subject: [PATCH 10/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 211d4a038..23aee267b 100644 --- a/pom.xml +++ b/pom.xml @@ -599,6 +599,11 @@ jmh-maven-plugin 0.2.2 + + at.lutnik + jmh-comparator-maven-plugin + 0.1.0 + From de414a2847898cc7619c3b69cbeb7b171e25563c Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 10 Jul 2025 13:07:57 +0200 Subject: [PATCH 11/25] add jmh comp plugin Signed-off-by: christian.lutnik --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index a7575d545..7a7a66fe8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ target # used for spec compliance tooling java-report.json +/standalone/.gitignore +/sdk/pom.xml +/results.json +/sdk.iml From 5f656f4d06730ffcc1e94d1bf2b2104ab73b4029 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 10 Jul 2025 13:27:26 +0200 Subject: [PATCH 12/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index 23aee267b..116f7fe7f 100644 --- a/pom.xml +++ b/pom.xml @@ -603,6 +603,9 @@ at.lutnik jmh-comparator-maven-plugin 0.1.0 + + main + From 76b4efa280b880c8f682b0e176852252be78ec1c Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 10 Jul 2025 14:00:16 +0200 Subject: [PATCH 13/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pom.xml b/pom.xml index 116f7fe7f..356715a8b 100644 --- a/pom.xml +++ b/pom.xml @@ -606,6 +606,15 @@ main + + + default-descriptor + + JmhComparatorMojo + + process-classes + + From 3dfbac3e693932d255fb3765776693dd954011e3 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 10 Jul 2025 14:00:51 +0200 Subject: [PATCH 14/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pom.xml b/pom.xml index 356715a8b..116f7fe7f 100644 --- a/pom.xml +++ b/pom.xml @@ -606,15 +606,6 @@ main - - - default-descriptor - - JmhComparatorMojo - - process-classes - - From c57004ad6f73a1adb77e8243bd84a8119063f624 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 08:29:17 +0200 Subject: [PATCH 15/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 116f7fe7f..f03e1c503 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ org.junit.jupiter junit-jupiter-api - test + provided From 5b949b0fa0c4cd4c3b88ba1b6552fae858b4548f Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 08:29:45 +0200 Subject: [PATCH 16/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f03e1c503..973fd6542 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ org.junit.jupiter junit-jupiter-api - provided + compile From 28ee09125419add50dce148b979059dd899baf3a Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 08:31:28 +0200 Subject: [PATCH 17/25] add jmh comp plugin Signed-off-by: christian.lutnik --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 973fd6542..116f7fe7f 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ org.junit.jupiter junit-jupiter-api - compile + test From 21e9f061f42b994645c2aa17ec06f540587179f3 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 11:16:04 +0200 Subject: [PATCH 18/25] add bench results to gitignore Signed-off-by: christian.lutnik --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7a7a66fe8..31c7b3014 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ java-report.json /sdk/pom.xml /results.json /sdk.iml +/jmh-comp-bench/ From 166680e4499c5e54b643be91b33e2fe8dc14639d Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 11:38:44 +0200 Subject: [PATCH 19/25] make results really bad Signed-off-by: christian.lutnik --- src/main/java/dev/openfeature/sdk/OpenFeatureClient.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java index b5522b66a..96a8fea0c 100644 --- a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java +++ b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java @@ -167,6 +167,12 @@ private FlagEvaluationDetails evaluateFlag( List mergedHooks = null; HookContext afterHookContext = null; + try { + Thread.sleep(25); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + try { var stateManager = openfeatureApi.getFeatureProviderStateManager(this.domain); // provider must be accessed once to maintain a consistent reference From 5841f2ce7ac7705136ca700f3f106e4798ffa47e Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Fri, 11 Jul 2025 11:55:51 +0200 Subject: [PATCH 20/25] make results really bad Signed-off-by: christian.lutnik --- src/main/java/dev/openfeature/sdk/OpenFeatureClient.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java index 96a8fea0c..430e79848 100644 --- a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java +++ b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java @@ -167,11 +167,10 @@ private FlagEvaluationDetails evaluateFlag( List mergedHooks = null; HookContext afterHookContext = null; - try { - Thread.sleep(25); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } + System.out.println("jajaskd"); + System.out.println("afd"); + System.out.println("ghdjksl"); + System.out.println("jgoijj"); try { var stateManager = openfeatureApi.getFeatureProviderStateManager(this.domain); From 4d3e81bd476a58b4d865d530fe228e06817a73cc Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 17 Jul 2025 13:49:55 +0200 Subject: [PATCH 21/25] make results really bad Signed-off-by: christian.lutnik --- .../java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java index 5bc89d03d..b2b4b0174 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java @@ -30,7 +30,7 @@ public class AllocationBenchmark { // 10K iterations works well with Xmx1024m (we don't want to run out of memory) - private static final int ITERATIONS = 10000; + private static final int ITERATIONS = 10; @Benchmark @BenchmarkMode(Mode.SingleShotTime) From c8e27467e7a91f3dff4277d2ccf0c0300199f177 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 17 Jul 2025 13:50:57 +0200 Subject: [PATCH 22/25] make results really bad Signed-off-by: christian.lutnik --- src/main/java/dev/openfeature/sdk/OpenFeatureClient.java | 2 -- .../java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java index 430e79848..f028dc88e 100644 --- a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java +++ b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java @@ -169,8 +169,6 @@ private FlagEvaluationDetails evaluateFlag( System.out.println("jajaskd"); System.out.println("afd"); - System.out.println("ghdjksl"); - System.out.println("jgoijj"); try { var stateManager = openfeatureApi.getFeatureProviderStateManager(this.domain); diff --git a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java index b2b4b0174..5bc89d03d 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java @@ -30,7 +30,7 @@ public class AllocationBenchmark { // 10K iterations works well with Xmx1024m (we don't want to run out of memory) - private static final int ITERATIONS = 10; + private static final int ITERATIONS = 10000; @Benchmark @BenchmarkMode(Mode.SingleShotTime) From 3ddf0e112dc7f285c1093de87cef4de0606183a3 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Thu, 17 Jul 2025 13:59:07 +0200 Subject: [PATCH 23/25] remove regression Signed-off-by: christian.lutnik --- src/main/java/dev/openfeature/sdk/OpenFeatureClient.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java index f028dc88e..b5522b66a 100644 --- a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java +++ b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java @@ -167,9 +167,6 @@ private FlagEvaluationDetails evaluateFlag( List mergedHooks = null; HookContext afterHookContext = null; - System.out.println("jajaskd"); - System.out.println("afd"); - try { var stateManager = openfeatureApi.getFeatureProviderStateManager(this.domain); // provider must be accessed once to maintain a consistent reference From 73494de78274ee45abea77ec70c82ffad792aa6d Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Wed, 30 Jul 2025 17:21:12 +0200 Subject: [PATCH 24/25] add regression Signed-off-by: christian.lutnik --- .../java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java index 5bc89d03d..bb076b245 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java @@ -60,6 +60,7 @@ public Optional before(HookContext ctx, Map Date: Wed, 30 Jul 2025 17:37:35 +0200 Subject: [PATCH 25/25] add regression Signed-off-by: christian.lutnik --- .../java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java index bb076b245..c7acfd8e8 100644 --- a/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java +++ b/src/test/java/dev/openfeature/sdk/benchmark/AllocationBenchmark.java @@ -60,7 +60,7 @@ public Optional before(HookContext ctx, Map