Skip to content

Commit

Permalink
[GR-44777] Include disk usage stats along with timings for each test …
Browse files Browse the repository at this point in the history
…class in unittest.

PullRequest: mx/1575
  • Loading branch information
dougxc committed Mar 12, 2023
2 parents 2b36bae + a8c8f10 commit f40bd6a
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 22 deletions.
24 changes: 12 additions & 12 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
"oraclejdk11": {"name": "jpg-jdk", "version": "11.0.11", "build_id": "9", "release": true, "platformspecific": true, "extrabundles": ["static-libs"] },

"oraclejdk17": {"name": "jpg-jdk", "version": "17.0.1", "build_id": "12", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.7+2-jvmci-23.0-b08", "platformspecific": true },
"labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.7+2-jvmci-23.0-b08-debug", "platformspecific": true },
"labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.7+2-jvmci-23.0-b08-sulong", "platformspecific": true },
"labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.7+5-jvmci-23.0-b08", "platformspecific": true },
"labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.7+5-jvmci-23.0-b08-debug", "platformspecific": true },
"labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.7+5-jvmci-23.0-b08-sulong", "platformspecific": true },
"labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.7+4-jvmci-23.0-b09", "platformspecific": true },
"labsjdk-ce-17Debug": {"name": "labsjdk", "version": "ce-17.0.7+4-jvmci-23.0-b09-debug", "platformspecific": true },
"labsjdk-ce-17-llvm": {"name": "labsjdk", "version": "ce-17.0.7+4-jvmci-23.0-b09-sulong", "platformspecific": true },
"labsjdk-ee-17": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b09", "platformspecific": true },
"labsjdk-ee-17Debug": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b09-debug", "platformspecific": true },
"labsjdk-ee-17-llvm": {"name": "labsjdk", "version": "ee-17.0.7+8-jvmci-23.0-b09-sulong", "platformspecific": true },

"oraclejdk19": {"name": "jpg-jdk", "version": "19", "build_id": "26", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-19": {"name": "labsjdk", "version": "ce-19.0.1+10-jvmci-23.0-b04", "platformspecific": true },
Expand All @@ -27,12 +27,12 @@
"labsjdk-ee-19-llvm": {"name": "labsjdk", "version": "ee-19.0.2+7-jvmci-23.0-b05-sulong", "platformspecific": true },

"oraclejdk20": {"name": "jpg-jdk", "version": "20", "build_id": "24", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-20": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b08", "platformspecific": true },
"labsjdk-ce-20Debug": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b08-debug", "platformspecific": true },
"labsjdk-ce-20-llvm": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b08-sulong", "platformspecific": true },
"labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.1+6-jvmci-23.0-b08", "platformspecific": true },
"labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.1+6-jvmci-23.0-b08-debug", "platformspecific": true },
"labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.1+6-jvmci-23.0-b08-sulong", "platformspecific": true }
"labsjdk-ce-20": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b09", "platformspecific": true },
"labsjdk-ce-20Debug": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b09-debug", "platformspecific": true },
"labsjdk-ce-20-llvm": {"name": "labsjdk", "version": "ce-20+34-jvmci-23.0-b09-sulong", "platformspecific": true },
"labsjdk-ee-20": {"name": "labsjdk", "version": "ee-20.0.1+8-jvmci-23.0-b09", "platformspecific": true },
"labsjdk-ee-20Debug": {"name": "labsjdk", "version": "ee-20.0.1+8-jvmci-23.0-b09-debug", "platformspecific": true },
"labsjdk-ee-20-llvm": {"name": "labsjdk", "version": "ee-20.0.1+8-jvmci-23.0-b09-sulong", "platformspecific": true }
},

"eclipse": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ private static void dumpThread(ThreadMXBean threadBean, ThreadInfo ti, PrintStre
ti.getThreadName(),
ti.isDaemon() ? "daemon" : "",
ti.getPriority(),
haveCPUTime ? TimingDecorator.valueToString(threadBean.getThreadCpuTime(id)) : "N/A",
haveElapsedTime ? TimingDecorator.valueToString(threadBean.getThreadCpuTime(id) + (ti.getBlockedTime() + ti.getWaitedTime()) * 1_000_000) : "N/A",
haveCPUTime ? TimingAndDiskUsageDecorator.valueToString(threadBean.getThreadCpuTime(id)) : "N/A",
haveElapsedTime ? TimingAndDiskUsageDecorator.valueToString(threadBean.getThreadCpuTime(id) + (ti.getBlockedTime() + ti.getWaitedTime()) * 1_000_000) : "N/A",
id,
state.name().toLowerCase(),
state.name());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ public static Result runRequest(JUnitCore junitCore, JUnitSystem system, MxJUnit
} else {
textListener = new TextRunListener(system);
}
TimingDecorator timings = config.enableTiming ? new TimingDecorator(textListener) : null;
TimingAndDiskUsageDecorator timings = config.enableTiming ? new TimingAndDiskUsageDecorator(textListener) : null;
MxRunListener mxListener = config.enableTiming ? timings : textListener;
ResultCollectorDecorator resultLoggerDecorator = null;

Expand Down Expand Up @@ -409,7 +409,7 @@ public int compareTo(Timing<T> o) {
// of a command line option for customization is fine.
private static final int TIMINGS_TO_PRINT = Integer.getInteger("mx.junit.timings_to_print", 10);

private static void printTimings(TimingDecorator timings, int classesCount) {
private static void printTimings(TimingAndDiskUsageDecorator timings, int classesCount) {
if (TIMINGS_TO_PRINT != 0) {
List<Timing<Class<?>>> classTimes = new ArrayList<>(timings.classTimes.size());
List<Timing<Description>> testTimes = new ArrayList<>(timings.testTimes.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,35 @@
*/
package com.oracle.mxtool.junit;

import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.junit.runner.Description;

/**
* Timing support for JUnit test runs.
* Timing and disk usage support for JUnit test runs.
*/
class TimingDecorator extends MxRunListenerDecorator {
class TimingAndDiskUsageDecorator extends MxRunListenerDecorator {

private long startTime;
private long classStartTime;
private Description currentTest;
final Map<Class<?>, Long> classTimes;
final Map<Description, Long> testTimes;
private final FileStore fileStore;
private final String totalDiskSpace;

TimingDecorator(MxRunListener l) {
TimingAndDiskUsageDecorator(MxRunListener l) {
super(l);
this.classTimes = new ConcurrentHashMap<>();
this.testTimes = new ConcurrentHashMap<>();
FileStore fs = initFileStore();
this.fileStore = fs;
this.totalDiskSpace = fs == null ? null : initTotalDiskSpace(fs);
}

@Override
Expand All @@ -57,7 +66,7 @@ public void testClassFinished(Class<?> clazz, int numPassed, int numFailed, int
long totalTime = System.nanoTime() - classStartTime;
super.testClassFinished(clazz, numPassed, numFailed, numIgnored, numAssumptionFailed);
if (beVerbose()) {
getWriter().print(' ' + valueToString(totalTime));
getWriter().print(' ' + valueToString(totalTime) + getDiskStats());
}
classTimes.put(clazz, totalTime / 1_000_000);
}
Expand Down Expand Up @@ -87,7 +96,7 @@ static String valueToString(long valueNS) {
}

/**
* Gets the test currently starting but not yet completed along with the number of milliseconds
* Gets the test currently started but not yet completed along with the number of milliseconds
* it has been executing.
*
* @return {@code null} if there is no test currently executing
Expand All @@ -100,4 +109,52 @@ public Object[] getCurrentTestDuration() {
}
return null;
}

private static final String[] SIZE_UNITS = {"", "K", "M", "G"};

static String humanFormat(long num) {
double n = num;

for (String unit : SIZE_UNITS) {
if (Math.abs(n) < 1024) {
return String.format("%3.1f%sB", n, unit);
}
n /= 1024;
}
return String.format("%.1fTB", n);
}

private String getDiskStats() {
String diskStats = "";
if (fileStore != null) {
try {
diskStats = String.format(", [disk (free/total): %s/%s]",
humanFormat(fileStore.getUnallocatedSpace()),
totalDiskSpace);
} catch (IOException e) {
diskStats = String.format(", [disk (free/total): %s]", e);
}
}
return diskStats;
}

private static FileStore initFileStore() {
FileStore fs = null;
try {
fs = Files.getFileStore(Paths.get("."));
} catch (IOException e) {
System.err.printf("Could not obtain FileStore for %s: %s%n",
Paths.get(".").toAbsolutePath(), e);
}
return fs;
}

private static String initTotalDiskSpace(FileStore fs) {
try {
return humanFormat(fs.getTotalSpace());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
2 changes: 1 addition & 1 deletion mx.py
Original file line number Diff line number Diff line change
Expand Up @@ -18374,7 +18374,7 @@ def alarm_handler(signum, frame):
abort(1, killsig=signal.SIGINT)

# The version must be updated for every PR (checked in CI) and the comment should reflect the PR's issue
version = VersionSpec("6.16.4") # GR-27301 support for --branch and --quiet in sclone
version = VersionSpec("6.16.5") # GR-44777 disk usage stats in unittest

currentUmask = None
_mx_start_datetime = datetime.utcnow()
Expand Down

0 comments on commit f40bd6a

Please sign in to comment.