author | tschatzl |
Tue, 08 May 2018 10:01:29 +0200 | |
changeset 50049 | 9d17c375dc30 |
parent 49808 | f1dcdc3cd6b7 |
child 50395 | 41258f041b24 |
permissions | -rw-r--r-- |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
1 |
/* |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
2 |
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
4 |
* |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
8 |
* |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
13 |
* accompanied this code). |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
14 |
* |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
18 |
* |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
21 |
* questions. |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
22 |
*/ |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
23 |
|
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
24 |
/* |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
25 |
* @test TestPrintReferences |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
26 |
* @bug 8136991 8186402 8186465 8188245 |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
27 |
* @summary Validate the reference processing logging |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
28 |
* @key gc |
40631
ed82623d7831
8157957: ClassNotFoundException: jdk.test.lib.JDKToolFinder
ctornqvi
parents:
36851
diff
changeset
|
29 |
* @library /test/lib |
36851 | 30 |
* @modules java.base/jdk.internal.misc |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
31 |
* java.management |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
32 |
*/ |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
33 |
|
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
34 |
import java.lang.ref.SoftReference; |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
35 |
import java.math.BigDecimal; |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
36 |
import java.util.ArrayList; |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
37 |
|
40631
ed82623d7831
8157957: ClassNotFoundException: jdk.test.lib.JDKToolFinder
ctornqvi
parents:
36851
diff
changeset
|
38 |
import jdk.test.lib.process.OutputAnalyzer; |
ed82623d7831
8157957: ClassNotFoundException: jdk.test.lib.JDKToolFinder
ctornqvi
parents:
36851
diff
changeset
|
39 |
import jdk.test.lib.process.ProcessTools; |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
40 |
import java.util.regex.Pattern; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
41 |
import java.util.regex.Matcher; |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
42 |
|
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
43 |
public class TestPrintReferences { |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
44 |
static String output; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
45 |
static final String doubleRegex = "[0-9]+[.,][0-9]+"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
46 |
static final String referenceProcessing = "Reference Processing"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
47 |
static final String softReference = "SoftReference"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
48 |
static final String weakReference = "WeakReference"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
49 |
static final String finalReference = "FinalReference"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
50 |
static final String phantomReference = "PhantomReference"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
51 |
static final String phase1 = "Phase1"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
52 |
static final String phase2 = "Phase2"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
53 |
static final String phase3 = "Phase3"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
54 |
static final String gcLogTimeRegex = ".* GC\\([0-9]+\\) "; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
55 |
|
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
56 |
public static void main(String[] args) throws Exception { |
49808
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
57 |
test(true); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
58 |
test(false); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
59 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
60 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
61 |
static String indent(int count) { |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
62 |
return " {" + count + "}"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
63 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
64 |
|
49808
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
65 |
public static void test(boolean parallelRefProcEnabled) throws Exception { |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
66 |
ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder("-Xlog:gc+phases+ref=debug", |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
67 |
"-XX:+UseG1GC", |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
68 |
"-Xmx32M", |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
69 |
// Explicit thread setting is required to avoid using only 1 thread |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
70 |
"-XX:" + (parallelRefProcEnabled ? "+" : "-") + "ParallelRefProcEnabled", |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
71 |
"-XX:ParallelGCThreads=2", |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
72 |
GCTest.class.getName()); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
73 |
OutputAnalyzer output = new OutputAnalyzer(pb_enabled.start()); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
74 |
|
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
75 |
checkLogFormat(output, parallelRefProcEnabled); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
76 |
checkLogValue(output); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
77 |
|
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
78 |
output.shouldHaveExitValue(0); |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
79 |
} |
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
80 |
|
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
81 |
// Find the first Reference Processing log and check its format. |
49808
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
82 |
public static void checkLogFormat(OutputAnalyzer output, boolean parallelRefProcEnabled) { |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
83 |
String countRegex = "[0-9]+"; |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
84 |
String timeRegex = doubleRegex + "ms"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
85 |
String totalRegex = gcLogTimeRegex + indent(4) + referenceProcessing + ": " + timeRegex + "\n"; |
49808
f1dcdc3cd6b7
8201487: Do not rebalance reference processing queues if not doing parallel reference processing
tschatzl
parents:
47784
diff
changeset
|
86 |
String balanceRegex = parallelRefProcEnabled ? gcLogTimeRegex + indent(8) + "Balance queues: " + timeRegex + "\n" : ""; |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
87 |
String softRefRegex = gcLogTimeRegex + indent(6) + softReference + ": " + timeRegex + "\n"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
88 |
String weakRefRegex = gcLogTimeRegex + indent(6) + weakReference + ": " + timeRegex + "\n"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
89 |
String finalRefRegex = gcLogTimeRegex + indent(6) + finalReference + ": " + timeRegex + "\n"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
90 |
String phantomRefRegex = gcLogTimeRegex + indent(6) + phantomReference + ": " + timeRegex + "\n"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
91 |
String refDetailRegex = gcLogTimeRegex + indent(8) + phase2 + ": " + timeRegex + "\n" + |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
92 |
gcLogTimeRegex + indent(8) + phase3 + ": " + timeRegex + "\n" + |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
93 |
gcLogTimeRegex + indent(8) + "Discovered: " + countRegex + "\n" + |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
94 |
gcLogTimeRegex + indent(8) + "Cleared: " + countRegex + "\n"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
95 |
String softRefDetailRegex = gcLogTimeRegex + indent(8) + phase1 + ": " + timeRegex + "\n" + refDetailRegex; |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
96 |
|
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
97 |
output.shouldMatch(/* Total Reference processing time */ |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
98 |
totalRegex + |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
99 |
/* SoftReference processing */ |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
100 |
softRefRegex + balanceRegex + softRefDetailRegex + |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
101 |
/* WeakReference processing */ |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
102 |
weakRefRegex + balanceRegex + refDetailRegex + |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
103 |
/* FinalReference processing */ |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
104 |
finalRefRegex + balanceRegex + refDetailRegex + |
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
105 |
/* PhantomReference processing */ |
50049
9d17c375dc30
8202017: Merge Reference Enqueuing phase with phase 3 of Reference processing
tschatzl
parents:
49808
diff
changeset
|
106 |
phantomRefRegex + balanceRegex + refDetailRegex |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
107 |
); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
108 |
} |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
109 |
|
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
110 |
// After getting time value, update 'output' for next use. |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
111 |
public static BigDecimal getTimeValue(String name, int indentCount) { |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
112 |
// Pattern of 'name', 'value' and some extra strings. |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
113 |
String patternString = gcLogTimeRegex + indent(indentCount) + name + ": " + "(" + doubleRegex + ")"; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
114 |
Matcher m = Pattern.compile(patternString).matcher(output); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
115 |
if (!m.find()) { |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
116 |
throw new RuntimeException("Could not find time log for " + patternString); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
117 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
118 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
119 |
String match = m.group(); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
120 |
String value = m.group(1); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
121 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
122 |
double result = Double.parseDouble(value); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
123 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
124 |
int index = output.indexOf(match); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
125 |
if (index != -1) { |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
126 |
output = output.substring(index, output.length()); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
127 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
128 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
129 |
// Convert to BigDecimal to control the precision of floating point arithmetic. |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
130 |
return BigDecimal.valueOf(result); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
131 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
132 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
133 |
// Reference log is printing 1 decimal place of elapsed time. |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
134 |
// So sum of each sub-phases could be slightly larger than the enclosing phase in some cases. |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
135 |
// e.g. If there are 3 sub-phases: |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
136 |
// Actual value: SoftReference(5.55) = phase1(1.85) + phase2(1.85) + phase3(1.85) |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
137 |
// Log value: SoftReference(5.6) = phase1(1.9) + phase2(1.9) + phase3(1.9) |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
138 |
// When checked: 5.6 < 5.7 (sum of phase1~3) |
47784
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
139 |
// Because of this we need method to verify that our measurements and calculations are valid. |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
140 |
public static boolean greaterThanOrApproximatelyEqual(BigDecimal phaseTime, BigDecimal sumOfSubPhasesTime, BigDecimal tolerance) { |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
141 |
if (phaseTime.compareTo(sumOfSubPhasesTime) >= 0) { |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
142 |
// phaseTime is greater than or equal. |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
143 |
return true; |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
144 |
} |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
145 |
|
47784
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
146 |
BigDecimal diff = sumOfSubPhasesTime.subtract(phaseTime); |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
147 |
if (diff.compareTo(tolerance) <= 0) { |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
148 |
// Difference is within tolerance, so approximately equal. |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
149 |
return true; |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
150 |
} |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
151 |
|
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
152 |
// sumOfSubPhasesTime is greater than phaseTime and not within tolerance. |
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
153 |
return false; |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
154 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
155 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
156 |
public static BigDecimal checkPhaseTime(String refType) { |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
157 |
BigDecimal phaseTime = getTimeValue(refType, 2); |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
158 |
BigDecimal sumOfSubPhasesTime = BigDecimal.valueOf(0.0); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
159 |
|
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
160 |
if (softReference.equals(refType)) { |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
161 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(getTimeValue(phase1, 4)); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
162 |
} |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
163 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(getTimeValue(phase2, 4)); |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
164 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(getTimeValue(phase3, 4)); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
165 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
166 |
// If there are 3 sub-phases, we should allow 0.1 tolerance. |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
167 |
final BigDecimal toleranceFor3SubPhases = BigDecimal.valueOf(0.1); |
47784
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
168 |
if (!greaterThanOrApproximatelyEqual(phaseTime, sumOfSubPhasesTime, toleranceFor3SubPhases)) { |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
169 |
throw new RuntimeException(refType +" time(" + phaseTime + |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
170 |
"ms) is less than the sum(" + sumOfSubPhasesTime + "ms) of each phases"); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
171 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
172 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
173 |
return phaseTime; |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
174 |
} |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
175 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
176 |
// Find the first concurrent Reference Processing log and compare phase time vs. sum of sub-phases. |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
177 |
public static void checkLogValue(OutputAnalyzer out) { |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
178 |
output = out.getStdout(); |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
179 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
180 |
BigDecimal refProcTime = getTimeValue(referenceProcessing, 0); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
181 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
182 |
BigDecimal sumOfSubPhasesTime = checkPhaseTime(softReference); |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
183 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(checkPhaseTime(weakReference)); |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
184 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(checkPhaseTime(finalReference)); |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
185 |
sumOfSubPhasesTime = sumOfSubPhasesTime.add(checkPhaseTime(phantomReference)); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
186 |
|
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
187 |
// If there are 4 sub-phases, we should allow 0.2 tolerance. |
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
188 |
final BigDecimal toleranceFor4SubPhases = BigDecimal.valueOf(0.2); |
47784
1360c7949d2f
8190353: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can still fail
sjohanss
parents:
47661
diff
changeset
|
189 |
if (!greaterThanOrApproximatelyEqual(refProcTime, sumOfSubPhasesTime, toleranceFor4SubPhases)) { |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
190 |
throw new RuntimeException("Reference Processing time(" + refProcTime + "ms) is less than the sum(" |
47661
92bcf2ab0cb3
8188245: [Testbug] test/hotspot/jtreg/gc/logging/TestPrintReferences.java can fail
sangheki
parents:
47556
diff
changeset
|
191 |
+ sumOfSubPhasesTime + "ms) of each phases"); |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
192 |
} |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
193 |
} |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
194 |
|
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
195 |
static class GCTest { |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
196 |
static final int SIZE = 512 * 1024; |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
197 |
static Object[] dummy = new Object[SIZE]; |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
198 |
|
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
199 |
public static void main(String [] args) { |
47556
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
200 |
for (int i = 0; i < SIZE; i++) { |
1520941b7b5d
8186465: Each j.l.Reference elapsed time log is incorrect
sangheki
parents:
47216
diff
changeset
|
201 |
dummy[i] = new SoftReference<>(new Object()); |
46795
623a5e42deb6
8173335: Improve logging for j.l.ref.reference processing
sangheki
parents:
41723
diff
changeset
|
202 |
} |
33103
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
203 |
} |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
204 |
} |
116b558af514
8136991: [REDO] Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125
brutisso
parents:
diff
changeset
|
205 |
} |