Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/jfr/jni/jfrJavaSupport.hpp
41152 views
1
/*
2
* Copyright (c) 2016, 2021, 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
#ifndef SHARE_JFR_JNI_JFRJAVASUPPORT_HPP
26
#define SHARE_JFR_JNI_JFRJAVASUPPORT_HPP
27
28
#include "jfr/jni/jfrJavaCall.hpp"
29
#include "utilities/exceptions.hpp"
30
31
class Klass;
32
class outputStream;
33
34
class JfrJavaSupport : public AllStatic {
35
public:
36
static jobject local_jni_handle(const oop obj, JavaThread* t);
37
static jobject local_jni_handle(const jobject handle, JavaThread* t);
38
static void destroy_local_jni_handle(jobject handle);
39
40
static jobject global_jni_handle(const oop obj, JavaThread* t);
41
static jobject global_jni_handle(const jobject handle, JavaThread* t);
42
static void destroy_global_jni_handle(jobject handle);
43
44
static jweak global_weak_jni_handle(const oop obj, JavaThread* t);
45
static jweak global_weak_jni_handle(const jobject handle, JavaThread* t);
46
static void destroy_global_weak_jni_handle(jweak handle);
47
48
static oop resolve_non_null(jobject obj);
49
static void notify_all(jobject obj, TRAPS);
50
static void set_array_element(jobjectArray arr, jobject element, int index, JavaThread* t);
51
52
// naked oop result
53
static void call_static(JfrJavaArguments* args, TRAPS);
54
static void call_special(JfrJavaArguments* args, TRAPS);
55
static void call_virtual(JfrJavaArguments* args, TRAPS);
56
57
static void set_field(JfrJavaArguments* args, TRAPS);
58
static void get_field(JfrJavaArguments* args, TRAPS);
59
static void new_object(JfrJavaArguments* args, TRAPS);
60
61
// global jni handle result
62
static void new_object_global_ref(JfrJavaArguments* args, TRAPS);
63
static void get_field_global_ref(JfrJavaArguments* args, TRAPS);
64
65
// local jni handle result
66
static void new_object_local_ref(JfrJavaArguments* args, TRAPS);
67
static void get_field_local_ref(JfrJavaArguments* args, TRAPS);
68
69
static jstring new_string(const char* c_str, TRAPS);
70
static jobjectArray new_string_array(int length, TRAPS);
71
72
static jobject new_java_lang_Boolean(bool value, TRAPS);
73
static jobject new_java_lang_Integer(jint value, TRAPS);
74
static jobject new_java_lang_Long(jlong value, TRAPS);
75
76
// misc
77
static Klass* klass(const jobject handle);
78
// caller needs ResourceMark
79
static const char* c_str(jstring string, JavaThread* jt);
80
static const char* c_str(oop string, JavaThread* t);
81
82
// exceptions
83
static void throw_illegal_state_exception(const char* message, TRAPS);
84
static void throw_illegal_argument_exception(const char* message, TRAPS);
85
static void throw_internal_error(const char* message, TRAPS);
86
static void throw_out_of_memory_error(const char* message, TRAPS);
87
static void throw_class_format_error(const char* message, TRAPS);
88
static void throw_runtime_exception(const char* message, TRAPS);
89
90
static bool is_jdk_jfr_module_available();
91
static bool is_jdk_jfr_module_available(outputStream* stream, TRAPS);
92
93
static jlong jfr_thread_id(jobject thread);
94
static void exclude(jobject thread);
95
static void include(jobject thread);
96
static bool is_excluded(jobject thread);
97
static void on_thread_start(Thread* t);
98
99
static jobject get_handler(jobject clazz, TRAPS);
100
static bool set_handler(jobject clazz, jobject handler, TRAPS);
101
102
// critical
103
static void abort(jstring errorMsg, TRAPS);
104
static void uncaught_exception(jthrowable throwable, JavaThread* t);
105
106
// asserts
107
DEBUG_ONLY(static void check_java_thread_in_vm(JavaThread* t);)
108
DEBUG_ONLY(static void check_java_thread_in_native(JavaThread* t);)
109
110
enum CAUSE {
111
VM_ERROR,
112
OUT_OF_MEMORY,
113
STACK_OVERFLOW,
114
RUNTIME_EXCEPTION,
115
UNKNOWN,
116
NOF_CAUSES
117
};
118
119
static CAUSE cause();
120
121
private:
122
static CAUSE _cause;
123
static void set_cause(jthrowable throwable, JavaThread* t);
124
};
125
126
#endif // SHARE_JFR_JNI_JFRJAVASUPPORT_HPP
127
128