Skip to content

Commit c4e0c26

Browse files
committed
8228658: test GetTotalSafepointTime.java fails on fast Linux machines with Total safepoint time 0 ms
Reviewed-by: dholmes, jcbeyler
1 parent 63511a6 commit c4e0c26

File tree

1 file changed

+18
-32
lines changed

1 file changed

+18
-32
lines changed

test/jdk/sun/management/HotspotRuntimeMBean/GetTotalSafepointTime.java

+18-32
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -40,47 +40,33 @@ public class GetTotalSafepointTime {
4040
private static HotspotRuntimeMBean mbean =
4141
(HotspotRuntimeMBean)ManagementFactoryHelper.getHotspotRuntimeMBean();
4242

43-
private static final long NUM_THREAD_DUMPS = 100;
44-
4543
// Careful with these values.
4644
private static final long MIN_VALUE_FOR_PASS = 1;
47-
private static final long MAX_VALUE_FOR_PASS = Long.MAX_VALUE;
4845

49-
private static boolean trace = false;
46+
// Thread.getAllStackTraces() should cause safepoints.
47+
// If this test is failing because it doesn't,
48+
// MIN_VALUE_FOR_PASS should be reset to 0
49+
public static long executeThreadDumps(long initial_value) {
50+
long value;
51+
do {
52+
Thread.getAllStackTraces();
53+
value = mbean.getTotalSafepointTime();
54+
} while (value == initial_value);
55+
return value;
56+
}
5057

5158
public static void main(String args[]) throws Exception {
52-
if (args.length > 0 && args[0].equals("trace")) {
53-
trace = true;
54-
}
55-
56-
// Thread.getAllStackTraces() should cause safepoints.
57-
// If this test is failing because it doesn't,
58-
// MIN_VALUE_FOR_PASS should be reset to 0
59-
for (int i = 0; i < NUM_THREAD_DUMPS; i++) {
60-
Thread.getAllStackTraces();
61-
}
62-
63-
long value = mbean.getTotalSafepointTime();
59+
long value = executeThreadDumps(0);
60+
System.out.println("Total safepoint time (ms): " + value);
6461

65-
if (trace) {
66-
System.out.println("Total safepoint time (ms): " + value);
67-
}
68-
69-
if (value < MIN_VALUE_FOR_PASS || value > MAX_VALUE_FOR_PASS) {
62+
if (value < MIN_VALUE_FOR_PASS) {
7063
throw new RuntimeException("Total safepoint time " +
7164
"illegal value: " + value + " ms " +
72-
"(MIN = " + MIN_VALUE_FOR_PASS + "; " +
73-
"MAX = " + MAX_VALUE_FOR_PASS + ")");
65+
"(MIN = " + MIN_VALUE_FOR_PASS + ")");
7466
}
7567

76-
for (int i = 0; i < 2 * NUM_THREAD_DUMPS; i++) {
77-
Thread.getAllStackTraces();
78-
}
79-
long value2 = mbean.getTotalSafepointTime();
80-
81-
if (trace) {
82-
System.out.println("Total safepoint time2 (ms): " + value2);
83-
}
68+
long value2 = executeThreadDumps(value);
69+
System.out.println("Total safepoint time (ms): " + value2);
8470

8571
if (value2 <= value) {
8672
throw new RuntimeException("Total safepoint time " +

0 commit comments

Comments
 (0)