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