|
1 | 1 | /*
|
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. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * This code is free software; you can redistribute it and/or modify it
|
@@ -40,47 +40,33 @@ public class GetTotalSafepointTime {
|
40 | 40 | private static HotspotRuntimeMBean mbean =
|
41 | 41 | (HotspotRuntimeMBean)ManagementFactoryHelper.getHotspotRuntimeMBean();
|
42 | 42 |
|
43 |
| - private static final long NUM_THREAD_DUMPS = 100; |
44 |
| - |
45 | 43 | // Careful with these values.
|
46 | 44 | private static final long MIN_VALUE_FOR_PASS = 1;
|
47 |
| - private static final long MAX_VALUE_FOR_PASS = Long.MAX_VALUE; |
48 | 45 |
|
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 | + } |
50 | 57 |
|
51 | 58 | 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); |
64 | 61 |
|
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) { |
70 | 63 | throw new RuntimeException("Total safepoint time " +
|
71 | 64 | "illegal value: " + value + " ms " +
|
72 |
| - "(MIN = " + MIN_VALUE_FOR_PASS + "; " + |
73 |
| - "MAX = " + MAX_VALUE_FOR_PASS + ")"); |
| 65 | + "(MIN = " + MIN_VALUE_FOR_PASS + ")"); |
74 | 66 | }
|
75 | 67 |
|
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); |
84 | 70 |
|
85 | 71 | if (value2 <= value) {
|
86 | 72 | throw new RuntimeException("Total safepoint time " +
|
|
0 commit comments