Est-il possible d'accéder BenchmarkParams
dans le @Setup
d'une classe @State(Scope.Benchmark)
, si cette classe est passé dans un @Benchmark
comme paramètre?JMH: accès BenchmarkParams de méthode @Setup de classe @State
exemple de code minimal (utilisation réelle est plus complexe, mais cela reproduit mon problème):
@State(Scope.Benchmark)
public class Test
{
@Setup
public void setUp(BenchmarkParams params){}
@Benchmark
public void nothing(Test test){}
}
Il y a un JMH sample de base, mais pas là où le @State
est passé dans une méthode @Benchmark
Je souhaite accéder à BenchmarkParams
dans @Setup
pour récupérer/consigner les données de configuration par comparaison que je crée en fonction de JMH @Param
valeurs
Avec l'exemple de code ci-dessus:
- Define
@State(Scope.Benchmark)
classe nomméeTest
< --- ouvrages - Define
@Benchmark
méthode nomméenothing()
< --- fonctionne - passe
@State
par exemple en@Benchmark
méthode < - - ÉCHOUE!
Voici l'erreur:
[ERROR]
/Users/.../jmh-benchmarks/target/generated-sources/annotations/test/generated/Test_nothing_jmhTest.java:[390,16]
method setUp in class test.Test cannot be applied to given
types;
required: org.openjdk.jmh.infra.BenchmarkParams
found:
org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType,org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType
reason: actual and formal argument lists differ in length
Toute bienvenue d'aide!
[EDIT 1]
Pour votre information, dans mon code actuel, il y a aussi une classe @State(Scope.Thread)
, quelque chose comme:
@State(Scope.Benchmark)
public abstract class TestBase
{
@Setup
public void setUp(BenchmarkParams params){}
}
@State(Scope.Benchmark)
public class TestImpl extends TestBase
{
@State(Scope.Thread)
public static class ThreadState
{
@Setup
public void setUp(TestImpl state){}
}
@Benchmark
public void nothing(ThreadState state){}
}
[EDIT 2]
Au JMH 1.3 ce n'est plus un problème