diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c67c56ee..63119406 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -8,18 +8,19 @@ jobs: name: Java ${{ matrix.java }} strategy: matrix: - java: [8, 11, 12, 13, 14, 15, 16, 17] + java: [8, 11, 17] env: REPO_SLUG: ${{ github.repository }} BRANCH: ${{ github.head_ref }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: temurin - name: Cache Maven dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} @@ -37,13 +38,14 @@ jobs: REPO_SLUG: ${{ github.repository }} BRANCH: ${{ github.head_ref }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: temurin - name: Cache Maven dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} @@ -61,13 +63,14 @@ jobs: REPO_SLUG: ${{ github.repository }} BRANCH: ${{ github.head_ref }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: temurin - name: Cache Maven dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} @@ -85,13 +88,14 @@ jobs: REPO_SLUG: ${{ github.repository }} BRANCH: ${{ github.head_ref }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: temurin - name: Cache Maven dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} diff --git a/junit4/junit4-12-jvm-test/pom.xml b/junit4/junit4-12-jvm-test/pom.xml index 4235287c..21a6f09c 100644 --- a/junit4/junit4-12-jvm-test/pom.xml +++ b/junit4/junit4-12-jvm-test/pom.xml @@ -21,9 +21,9 @@ quick-perf-junit4-12-jvm-test - 1.7 - 1.7 - 1.7 + 1.8 + 1.8 + 1.8 true true true diff --git a/junit5/junit5-jvm-test/pom.xml b/junit5/junit5-jvm-test/pom.xml index dda695b6..787169f2 100644 --- a/junit5/junit5-jvm-test/pom.xml +++ b/junit5/junit5-jvm-test/pom.xml @@ -21,6 +21,9 @@ quick-perf-junit5-jvm-test + 1.8 + 1.8 + 1.8 true true true diff --git a/junit5/junit5-test-util/pom.xml b/junit5/junit5-test-util/pom.xml index 5ff6d16d..2d4c79d2 100644 --- a/junit5/junit5-test-util/pom.xml +++ b/junit5/junit5-test-util/pom.xml @@ -24,6 +24,7 @@ true true true + true diff --git a/jvm/jfr-annotations/pom.xml b/jvm/jfr-annotations/pom.xml index 1116c6d7..807baaa8 100644 --- a/jvm/jfr-annotations/pom.xml +++ b/jvm/jfr-annotations/pom.xml @@ -22,6 +22,9 @@ quick-perf-jfr-annotations + 1.8 + 1.8 + 1.8 org.quickperf.jvm.jfr.annotation @@ -39,7 +42,7 @@ org.openjdk.jmc flightrecorder.rules.jdk - 7.1.1 + 8.3.1 org.jsoup diff --git a/jvm/jfr-annotations/src/main/java/org/quickperf/jvm/jmcrule/JmcRuleCountMeasureExtractor.java b/jvm/jfr-annotations/src/main/java/org/quickperf/jvm/jmcrule/JmcRuleCountMeasureExtractor.java index 161ceb0e..d645c324 100644 --- a/jvm/jfr-annotations/src/main/java/org/quickperf/jvm/jmcrule/JmcRuleCountMeasureExtractor.java +++ b/jvm/jfr-annotations/src/main/java/org/quickperf/jvm/jmcrule/JmcRuleCountMeasureExtractor.java @@ -13,33 +13,45 @@ package org.quickperf.jvm.jmcrule; import org.openjdk.jmc.common.item.IItemCollection; +import org.openjdk.jmc.common.unit.IQuantity; import org.openjdk.jmc.common.util.IPreferenceValueProvider; -import org.openjdk.jmc.flightrecorder.rules.IRule; -import org.openjdk.jmc.flightrecorder.rules.Result; -import org.openjdk.jmc.flightrecorder.rules.RuleRegistry; -import org.openjdk.jmc.flightrecorder.rules.Severity; +import org.openjdk.jmc.flightrecorder.rules.*; +import org.openjdk.jmc.flightrecorder.rules.jdk.cpu.HighJvmCpuRule; +import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GarbageCollectionInfoRule; +import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GcStallRule; +import org.openjdk.jmc.flightrecorder.rules.jdk.memory.HeapInspectionRule; +import org.openjdk.jmc.flightrecorder.rules.jdk.memory.SystemGcRule; import org.quickperf.ExtractablePerformanceMeasure; import org.quickperf.jvm.jfr.JfrRecording; import org.quickperf.unit.Count; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.RunnableFuture; +import java.util.stream.Collectors; public class JmcRuleCountMeasureExtractor implements ExtractablePerformanceMeasure { public static final JmcRuleCountMeasureExtractor INSTANCE = new JmcRuleCountMeasureExtractor(); - - private JmcRuleCountMeasureExtractor() {} + //We need to ignore some rules which appear to throw NullPointerException in org.openjdk.jmc:flightrecorder.rules.jdk:8.x.y + private static final List> IGNORED_RULES = Arrays.asList( + HighJvmCpuRule.class, + GcStallRule.class, + GarbageCollectionInfoRule.class, + HeapInspectionRule.class, + SystemGcRule.class + ); + + private JmcRuleCountMeasureExtractor() { + } @Override public JmcRulesMeasure extractPerfMeasureFrom(JfrRecording jfrRecording) { IItemCollection jfrEvents = jfrRecording.getJfrEvents(); - List ruleEvaluations = evaluateJmcRules(jfrEvents); + List ruleEvaluations = evaluateJmcRules(jfrEvents); List jmcRules = buildJmcRuleCountsFrom(ruleEvaluations); @@ -47,12 +59,16 @@ public JmcRulesMeasure extractPerfMeasureFrom(JfrRecording jfrRecording) { } - private List evaluateJmcRules(IItemCollection jfrEvents) { - List ruleEvaluations = new ArrayList<>(); - for (IRule rule : RuleRegistry.getRules()) { - RunnableFuture future = rule.evaluate(jfrEvents, IPreferenceValueProvider.DEFAULT_VALUES); + private List evaluateJmcRules(IItemCollection jfrEvents) { + List ruleEvaluations = new ArrayList<>(); + Collection rules = RuleRegistry.getRules().stream() + .filter(r -> !IGNORED_RULES.contains(r.getClass())) + .collect(Collectors.toList()); + for (IRule rule : rules) { + RunnableFuture future = rule.createEvaluation(jfrEvents, + IPreferenceValueProvider.DEFAULT_VALUES, new ResultProvider()); future.run(); - Result result; + IResult result; try { result = future.get(); } catch (InterruptedException | ExecutionException e) { @@ -63,11 +79,11 @@ private List evaluateJmcRules(IItemCollection jfrEvents) { return ruleEvaluations; } - private List buildJmcRuleCountsFrom(List ruleEvaluations) { + private List buildJmcRuleCountsFrom(List ruleEvaluations) { List jmcRules = new ArrayList<>(); - for (Result ruleEvaluation : ruleEvaluations) { + for (IResult ruleEvaluation : ruleEvaluations) { Count ruleScore = buildJmcRuleCountFrom(ruleEvaluation); - if(!ruleToExclude(ruleScore)) { + if (!ruleToExclude(ruleScore)) { jmcRules.add(ruleScore); } } @@ -76,21 +92,25 @@ private List buildJmcRuleCountsFrom(List ruleEvaluations) { private boolean ruleToExclude(Count ruleScore) { String ruleDescription = ruleScore.getComment(); - return ruleDescription.contains("Rule: TLAB Allocation Ratio") - || ruleDescription.contains("Rule: Competing Processes") - || ruleDescription.contains("Rule: Command Line Options Check") - || ruleDescription.contains("Rule: Metaspace Live Set Trend"); + return ruleDescription.contains("Rule: TLAB Allocation Ratio") + || ruleDescription.contains("Rule: Competing Processes") + || ruleDescription.contains("Rule: Command Line Options Check") + || ruleDescription.contains("Rule: Metaspace Live Set Trend"); } - private Count buildJmcRuleCountFrom(Result result) { + private Count buildJmcRuleCountFrom(IResult result) { StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); printWriter.println("Rule: " + result.getRule().getName()); - printWriter.println("Severity: " + Severity.get(result.getScore())); - long score = (long) result.getScore(); + printWriter.println("Severity: " + result.getSeverity()); + long score = Optional.ofNullable(result.getResult(TypedResult.SCORE)) + .map(IQuantity::longValue) + .orElse(-1L); printWriter.println("Score: " + score); - String longDescriptionAsHtml = result.getLongDescription(); + final String longDescriptionAsHtml = Optional.ofNullable(result.getSummary()).orElse("") + + Optional.ofNullable(result.getExplanation()).orElse("") + + Optional.ofNullable(result.getSolution()).orElse(""); String textDesc = HtmlToPlainTextTransformer.INSTANCE.convertHtmlToPlainText(longDescriptionAsHtml); printWriter.println("Message: " + textDesc); @@ -98,4 +118,4 @@ private Count buildJmcRuleCountFrom(Result result) { return new Count(score, description); } -} +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index ff8205ee..02358e76 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,7 @@ 1.4 3.2.0 2.22.2 + 3.5.0 1.1.0 1.7.25 @@ -112,8 +113,9 @@ + org.apache.maven.plugins maven-enforcer-plugin - 1.4.1 + ${maven-enforcer-plugin.version} enforce-bytecode-version @@ -138,7 +140,7 @@ org.codehaus.mojo extra-enforcer-rules - 1.2 + 1.9.0 @@ -292,14 +294,6 @@ false - - AdoptOpenJDK - AdoptOpenJDK - https://adoptopenjdk.jfrog.io/adoptopenjdk/jmc-libs - - false - - diff --git a/spring/junit4-spring-base-tests/pom.xml b/spring/junit4-spring-base-tests/pom.xml index ca70071e..d008674d 100644 --- a/spring/junit4-spring-base-tests/pom.xml +++ b/spring/junit4-spring-base-tests/pom.xml @@ -26,6 +26,7 @@ true true true + true diff --git a/sql/sql-hibernate-test-util/pom.xml b/sql/sql-hibernate-test-util/pom.xml index 31e9dc3c..6c7d7570 100644 --- a/sql/sql-hibernate-test-util/pom.xml +++ b/sql/sql-hibernate-test-util/pom.xml @@ -26,6 +26,7 @@ true true true + true diff --git a/sql/sql-memory-test-util/pom.xml b/sql/sql-memory-test-util/pom.xml index 3c2d9b1b..fdbd8b87 100644 --- a/sql/sql-memory-test-util/pom.xml +++ b/sql/sql-memory-test-util/pom.xml @@ -27,6 +27,7 @@ true true true + true diff --git a/testng/testng-jvm-test/pom.xml b/testng/testng-jvm-test/pom.xml index ab6d5e76..77f2def7 100644 --- a/testng/testng-jvm-test/pom.xml +++ b/testng/testng-jvm-test/pom.xml @@ -20,6 +20,9 @@ quick-perf-testng-jvm-test + 1.8 + 1.8 + 1.8 true true true diff --git a/testng/testng-test-util/pom.xml b/testng/testng-test-util/pom.xml index d210abc6..40e18349 100644 --- a/testng/testng-test-util/pom.xml +++ b/testng/testng-test-util/pom.xml @@ -26,6 +26,7 @@ true true true + true