18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package MyPackage;
25
26 /**
27 * @test
28 * @summary Verifies the JVMTI Heap Monitor sampling rate average
29 * @build Frame HeapMonitor
30 * @compile HeapMonitorStatRateTest.java
31 * @run main/othervm/native -agentlib:HeapMonitorTest MyPackage.HeapMonitorStatRateTest
32 */
33
34 public class HeapMonitorStatRateTest {
35
36 private native static double getAverageRate();
37
38 public static void main(String[] args) {
39 int[] tab = {1024, 16384, 524288};
40
41 for (int rateIdx = 0; rateIdx < tab.length; rateIdx++) {
42 int rate = tab[rateIdx];
43
44 HeapMonitor.resetEventStorage();
45 HeapMonitor.setSamplingRate(rate);
46
47 HeapMonitor.enableSamplingEvents();
48
49 int allocationTotal = 512 * 1024 * 1024;
50 HeapMonitor.allocateSize(allocationTotal);
51
52 HeapMonitor.disableSamplingEvents();
53
54 double actualCount = HeapMonitor.getEventStorageElementCount();
55 double expectedCount = allocationTotal / rate;
56
57 double error = Math.abs(actualCount - expectedCount);
58 double errorPercentage = error / expectedCount * 100;
59
60 if (errorPercentage > 10) {
61 throw new RuntimeException("Rate average over 10% for rate " + rate + " -> " + actualCount
62 + ", " + expectedCount);
63 }
64 }
65 }
66 }
|
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package MyPackage;
25
26 /**
27 * @test
28 * @summary Verifies the JVMTI Heap Monitor sampling rate average
29 * @build Frame HeapMonitor
30 * @compile HeapMonitorStatRateTest.java
31 * @run main/othervm/native -agentlib:HeapMonitorTest MyPackage.HeapMonitorStatRateTest
32 */
33
34 public class HeapMonitorStatRateTest {
35
36 private native static double getAverageRate();
37
38 private static boolean testRateOnce(int rate, boolean throwIfFailure) {
39 HeapMonitor.resetEventStorage();
40 HeapMonitor.setSamplingRate(rate);
41
42 HeapMonitor.enableSamplingEvents();
43
44 int allocationTotal = 512 * 1024 * 1024;
45 HeapMonitor.allocateSize(allocationTotal);
46
47 HeapMonitor.disableSamplingEvents();
48
49 double actualCount = HeapMonitor.getEventStorageElementCount();
50 double expectedCount = allocationTotal / rate;
51
52 double error = Math.abs(actualCount - expectedCount);
53 double errorPercentage = error / expectedCount * 100;
54
55 boolean failure = (errorPercentage > 10.0);
56
57 if (failure && throwIfFailure) {
58 throw new RuntimeException("Rate average over 10% for rate " + rate + " -> " + actualCount
59 + ", " + expectedCount);
60 }
61
62 return failure;
63 }
64
65
66 private static void testRate(int rate) {
67 // Test the rate twice, it can happen that the test is "unlucky" and the rate just goes above
68 // the 10% mark. So try again to squash flakiness.
69 if (!testRateOnce(rate, false)) {
70 testRateOnce(rate, true);
71 }
72 }
73
74 public static void main(String[] args) {
75 int[] tab = {1024, 16384, 524288};
76
77 for (int rateIdx = 0; rateIdx < tab.length; rateIdx++) {
78 testRate(tab[rateIdx]);
79 }
80 }
81 }
|