提交 c7fd5bed 编写于 作者: D dsamersoff

8151345: compiler/codecache/jmx/PeakUsageTest.java is failing on jdk9/dev for...

8151345: compiler/codecache/jmx/PeakUsageTest.java is failing on jdk9/dev for JPRT  -testset hotspot
Reviewed-by: sla, dsamersoff
上级 0203dbe0
/* /*
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -119,6 +119,28 @@ public final class CodeCacheUtils { ...@@ -119,6 +119,28 @@ public final class CodeCacheUtils {
} }
} }
/**
* Verifies that 'newValue' is equal to 'oldValue' if usage of the
* corresponding code heap is predictable. Checks the weaker condition
* 'newValue <= oldValue' if usage is not predictable because intermediate
* allocations may happen.
*
* @param btype BlobType of the code heap to be checked
* @param newValue New value to be verified
* @param oldValue Old value to be verified
* @param msg Error message if verification fails
*/
public static void assertEQorLTE(BlobType btype, long newValue, long oldValue, String msg) {
if (CodeCacheUtils.isCodeHeapPredictable(btype)) {
// Usage is predictable, check strong == condition
Asserts.assertEQ(newValue, oldValue, msg);
} else {
// Usage is not predictable, check weaker <= condition
Asserts.assertLTE(newValue, oldValue, msg);
}
}
public static void disableCollectionUsageThresholds() { public static void disableCollectionUsageThresholds() {
BlobType.getAvailable().stream() BlobType.getAvailable().stream()
.map(BlobType::getMemoryPool) .map(BlobType::getMemoryPool)
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
* @modules java.base/jdk.internal.misc * @modules java.base/jdk.internal.misc
* java.management * java.management
* *
* @ignore 8151345
* @build ompiler.codecache.jmx.PeakUsageTest * @build ompiler.codecache.jmx.PeakUsageTest
* @run driver ClassFileInstaller sun.hotspot.WhiteBox * @run driver ClassFileInstaller sun.hotspot.WhiteBox
* sun.hotspot.WhiteBox$WhiteBoxPermission * sun.hotspot.WhiteBox$WhiteBoxPermission
...@@ -69,9 +68,17 @@ public class PeakUsageTest { ...@@ -69,9 +68,17 @@ public class PeakUsageTest {
bean.resetPeakUsage(); bean.resetPeakUsage();
long addr = CodeCacheUtils.WB.allocateCodeBlob( long addr = CodeCacheUtils.WB.allocateCodeBlob(
CodeCacheUtils.ALLOCATION_SIZE, btype.id); CodeCacheUtils.ALLOCATION_SIZE, btype.id);
long newPeakUsage = bean.getPeakUsage().getUsed();
try { try {
CodeCacheUtils.assertEQorGTE(btype, newPeakUsage, bean.getUsage().getUsed(), /*
Always save peakUsage after saving currentUsage. Reversing the order
can lead to inconsistent results (currentUsage > peakUsage) because
of intermediate allocations.
*/
long currUsage = bean.getUsage().getUsed();
long peakUsage = bean.getPeakUsage().getUsed();
CodeCacheUtils.assertEQorLTE(btype, currUsage,
peakUsage,
"Peak usage does not match usage after allocation for " "Peak usage does not match usage after allocation for "
+ bean.getName()); + bean.getName());
} finally { } finally {
...@@ -79,19 +86,21 @@ public class PeakUsageTest { ...@@ -79,19 +86,21 @@ public class PeakUsageTest {
CodeCacheUtils.WB.freeCodeBlob(addr); CodeCacheUtils.WB.freeCodeBlob(addr);
} }
} }
CodeCacheUtils.assertEQorGTE(btype, newPeakUsage, bean.getPeakUsage().getUsed(),
"Code cache peak usage has changed after usage decreased for "
+ bean.getName());
bean.resetPeakUsage(); bean.resetPeakUsage();
CodeCacheUtils.assertEQorGTE(btype, bean.getPeakUsage().getUsed(), long currUsage = bean.getUsage().getUsed();
bean.getUsage().getUsed(), long peakUsage = bean.getPeakUsage().getUsed();
CodeCacheUtils.assertEQorLTE(btype, currUsage,
peakUsage,
"Code cache peak usage is not equal to usage after reset for " "Code cache peak usage is not equal to usage after reset for "
+ bean.getName()); + bean.getName());
long addr2 = CodeCacheUtils.WB.allocateCodeBlob( long addr2 = CodeCacheUtils.WB.allocateCodeBlob(
CodeCacheUtils.ALLOCATION_SIZE, btype.id); CodeCacheUtils.ALLOCATION_SIZE, btype.id);
try { try {
CodeCacheUtils.assertEQorGTE(btype, bean.getPeakUsage().getUsed(), currUsage = bean.getUsage().getUsed();
bean.getUsage().getUsed(), peakUsage = bean.getPeakUsage().getUsed();
CodeCacheUtils.assertEQorLTE(btype, currUsage,
peakUsage,
"Code cache peak usage is not equal to usage after fresh " "Code cache peak usage is not equal to usage after fresh "
+ "allocation for " + bean.getName()); + "allocation for " + bean.getName());
} finally { } finally {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册