forked from eclipse-omr/omr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
omrprofiler.h
134 lines (120 loc) · 4.95 KB
/
omrprofiler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*******************************************************************************
* Copyright (c) 2014, 2016 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
* or the Apache License, Version 2.0 which accompanies this distribution and
* is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* This Source Code may also be made available under the following
* Secondary Licenses when the conditions for such availability set
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
* General Public License, version 2 with the GNU Classpath
* Exception [1] and GNU General Public License, version 2 with the
* OpenJDK Assembly Exception [2].
*
* [1] https://www.gnu.org/software/classpath/license.html
* [2] http://openjdk.java.net/legal/assembly-exception.html
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*******************************************************************************/
#ifndef omrprofiler_h
#define omrprofiler_h
#include "omr.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* This file defines the interface used by omrglue/ code to access OMR profiling-related functions */
#if defined(_MSC_VER)
#pragma warning(disable : 4200)
#endif /* defined(_MSC_VER) */
typedef struct OMR_MethodDictionaryEntry {
const void *key;
const char *propertyValues[];
} OMR_MethodDictionaryEntry;
/* ---------------- OMR_MethodDictionary.cpp ---------------- */
/**
* @brief Allocate and initialize the VM's method dictionary.
*
* Does nothing if the VM's method dictionary is already allocated.
*
* @param[in] vm The OMR VM.
* @param[in] numProperties Number of properties per method.
* @param[in] propertyNames Names of method properties.
* @return An OMR error code.
* @retval OMR_ERROR_NONE Success.
* @retval OMR_ERROR_OUT_OF_NATIVE_MEMORY Unable to allocate native memory for the method dictionary.
* @retval OMR_ERROR_FAILED_TO_ALLOCATE_MONITOR Unable to allocate the method dictionary's lock.
* @retval OMR_ERROR_FAILED_TO_ATTACH_NATIVE_THREAD Unable to attach to the omrthread library.
*/
omr_error_t omr_ras_initMethodDictionary(OMR_VM *vm, size_t numProperties, const char * const *propertyNames);
/**
* @brief Deallocate the VM's method dictionary.
*
* @param[in] vm The OMR VM.
*/
void omr_ras_cleanupMethodDictionary(OMR_VM *vm);
/**
* @brief Insert a method into the method dictionary.
*
* If the method's key is already in the dictionary, then the old entry is overwritten by the new entry.
*
* There is no error if the method dictionary is not enabled.
*
* @param[in] vm The OMR VM.
* @param[in] entry The method entry to insert.
* @return An OMR error code.
* @retval OMR_ERROR NONE Success.
* @retval OMR_ERROR_OUT_OF_NATIVE_MEMORY Unable to allocate native memory for the new entry.
* @retval OMR_ERROR_FAILED_TO_ATTACH_NATIVE_THREAD Unable to attach to the omrthread library,
* which is needed to lock the method dictionary.
* @retval OMR_ERROR_INTERNAL An unexpected internal error occurred.
*/
omr_error_t omr_ras_insertMethodDictionary(OMR_VM *vm, OMR_MethodDictionaryEntry *entry);
/* ---------------- OMR_Profiler.cpp ---------------- */
/**
* @brief Trace the current thread's top-most stack frame.
*
* Wrapper for tracepoint macro.
* This allows omrglue code to be compiled without access to tracegen-generated
* header files.
*
* @pre The current thread must be attached to the OMR VM.
*
* @param[in] omrVMThread The current OMR VM thread. Must not be NULL.
* @param[in] methodKey The stack frame's method's key. It corresponds to the key of
* the method's entry in the method dictionary.
*/
void omr_ras_sampleStackTraceStart(OMR_VMThread *omrVMThread, const void *methodKey);
/**
* @brief Trace a frame of the current thread's stack, other than the top-most frame.
*
* Wrapper for tracepoint macro.
* This allows omrglue code to be compiled without access to tracegen-generated
* header files.
*
* @pre The current thread must be attached to the OMR VM.
*
* @param[in] omrVMThread The current OMR VM thread. Must not be NULL.
* @param[in] methodKey The stack frame's method's key. It corresponds to the key of
* the method's entry in the method dictionary.
*/
void omr_ras_sampleStackTraceContinue(OMR_VMThread *omrVMThread, const void *methodKey);
/**
* @brief Test whether stack sampling is enabled.
*
* Wrapper for tracepoint macro.
* This allows omrglue code to be compiled without access to tracegen-generated
* header files.
*
* Stack stampling is enabled if either of the sampling tracepoints is enabled,
* regardless of whether the method dictionary is enabled.
*
* @return TRUE if stack sampling is enabled. FALSE if stack sampling is disabled.
*/
BOOLEAN omr_ras_sampleStackEnabled(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* omrprofiler_h */