Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/jvmci/events/JvmciNotifyInstallEventTest.java
41153 views
1
/*
2
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
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
/*
25
* @test
26
* @bug 8136421
27
* @requires vm.jvmci & !vm.graal.enabled & vm.compMode == "Xmixed"
28
* @library / /test/lib
29
* @library ../common/patches
30
* @modules java.base/jdk.internal.misc
31
* @modules java.base/jdk.internal.org.objectweb.asm
32
* java.base/jdk.internal.org.objectweb.asm.tree
33
* jdk.internal.vm.ci/jdk.vm.ci.hotspot
34
* jdk.internal.vm.ci/jdk.vm.ci.code
35
* jdk.internal.vm.ci/jdk.vm.ci.code.site
36
* jdk.internal.vm.ci/jdk.vm.ci.meta
37
* jdk.internal.vm.ci/jdk.vm.ci.runtime
38
* jdk.internal.vm.ci/jdk.vm.ci.services
39
*
40
* @build jdk.internal.vm.ci/jdk.vm.ci.hotspot.CompilerToVMHelper
41
* @build compiler.jvmci.common.JVMCIHelpers
42
* @run driver jdk.test.lib.FileInstaller ./JvmciNotifyInstallEventTest.config
43
* ./META-INF/services/jdk.vm.ci.services.JVMCIServiceLocator
44
* @run driver jdk.test.lib.helpers.ClassFileInstaller
45
* compiler.jvmci.common.JVMCIHelpers$EmptyHotspotCompiler
46
* compiler.jvmci.common.JVMCIHelpers$EmptyCompilerFactory
47
* compiler.jvmci.common.JVMCIHelpers$EmptyCompilationRequestResult
48
* compiler.jvmci.common.JVMCIHelpers$EmptyVMEventListener
49
* @run main/othervm -XX:+UnlockExperimentalVMOptions
50
* -Djvmci.Compiler=EmptyCompiler -Xbootclasspath/a:.
51
* -XX:+UseJVMCICompiler -XX:-BootstrapJVMCI -XX:-UseJVMCINativeLibrary
52
* compiler.jvmci.events.JvmciNotifyInstallEventTest
53
* @run main/othervm -XX:+UnlockExperimentalVMOptions
54
* -Djvmci.Compiler=EmptyCompiler -Xbootclasspath/a:.
55
* -XX:+UseJVMCICompiler -XX:-BootstrapJVMCI -XX:JVMCINMethodSizeLimit=0
56
* -XX:-UseJVMCINativeLibrary
57
* compiler.jvmci.events.JvmciNotifyInstallEventTest
58
*/
59
60
package compiler.jvmci.events;
61
62
import compiler.jvmci.common.CTVMUtilities;
63
import compiler.jvmci.common.testcases.SimpleClass;
64
import jdk.test.lib.Asserts;
65
import jdk.test.lib.Utils;
66
import jdk.vm.ci.services.JVMCIServiceLocator;
67
import jdk.vm.ci.code.CompiledCode;
68
import jdk.vm.ci.code.InstalledCode;
69
import jdk.vm.ci.code.site.DataPatch;
70
import jdk.vm.ci.code.site.Site;
71
import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
72
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
73
import jdk.vm.ci.hotspot.HotSpotCompiledCode.Comment;
74
import jdk.vm.ci.hotspot.HotSpotCompiledNmethod;
75
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
76
import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
77
import jdk.vm.ci.hotspot.HotSpotVMEventListener;
78
import jdk.vm.ci.meta.Assumptions.Assumption;
79
import jdk.vm.ci.meta.ResolvedJavaMethod;
80
81
import java.lang.reflect.Method;
82
83
public class JvmciNotifyInstallEventTest extends JVMCIServiceLocator implements HotSpotVMEventListener {
84
private static final String METHOD_NAME = "testMethod";
85
private static volatile int gotInstallNotification = 0;
86
87
public static void main(String args[]) {
88
new JvmciNotifyInstallEventTest().runTest();
89
}
90
91
@Override
92
public <S> S getProvider(Class<S> service) {
93
if (service == HotSpotVMEventListener.class) {
94
return service.cast(this);
95
}
96
return null;
97
}
98
99
private void runTest() {
100
if (gotInstallNotification != 0) {
101
throw new Error("Got install notification before test actions");
102
}
103
HotSpotCodeCacheProvider codeCache;
104
try {
105
codeCache = (HotSpotCodeCacheProvider) HotSpotJVMCIRuntime.runtime()
106
.getHostJVMCIBackend().getCodeCache();
107
} catch (InternalError ie) {
108
// passed
109
return;
110
}
111
Method testMethod;
112
try {
113
testMethod = SimpleClass.class.getDeclaredMethod(METHOD_NAME);
114
} catch (NoSuchMethodException e) {
115
throw new Error("TEST BUG: Can't find " + METHOD_NAME, e);
116
}
117
HotSpotResolvedJavaMethod method = CTVMUtilities
118
.getResolvedMethod(SimpleClass.class, testMethod);
119
HotSpotCompiledCode compiledCode = new HotSpotCompiledNmethod(METHOD_NAME,
120
new byte[0], 0, new Site[0], new Assumption[0],
121
new ResolvedJavaMethod[]{method}, new Comment[0], new byte[0],
122
16, new DataPatch[0], false, 0, null,
123
method, 0, 1, 0L, false);
124
codeCache.installCode(method, compiledCode, /* installedCode = */ null,
125
/* speculationLog = */ null, /* isDefault = */ false);
126
Asserts.assertEQ(gotInstallNotification, 1,
127
"Got unexpected event count after 1st install attempt");
128
// since "empty" compilation result is ok, a second attempt should be ok
129
codeCache.installCode(method, compiledCode, /* installedCode = */ null,
130
/* speculationLog = */ null, /* isDefault = */ false);
131
Asserts.assertEQ(gotInstallNotification, 2,
132
"Got unexpected event count after 2nd install attempt");
133
// and an incorrect cases
134
Utils.runAndCheckException(() -> {
135
codeCache.installCode(method, null, null, null, true);
136
}, NullPointerException.class);
137
Asserts.assertEQ(gotInstallNotification, 2,
138
"Got unexpected event count after 3rd install attempt");
139
Utils.runAndCheckException(() -> {
140
codeCache.installCode(null, null, null, null, true);
141
}, NullPointerException.class);
142
Asserts.assertEQ(gotInstallNotification, 2,
143
"Got unexpected event count after 4th install attempt");
144
}
145
146
@Override
147
public void notifyInstall(HotSpotCodeCacheProvider hotSpotCodeCacheProvider,
148
InstalledCode installedCode, CompiledCode compiledCode) {
149
gotInstallNotification++;
150
}
151
}
152
153