1 //===-- IntelJITEventsWrapper.h - Intel JIT Events API Wrapper --*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines a wrapper for the Intel JIT Events API. It allows for the
11 // implementation of the jitprofiling library to be swapped with an alternative
12 // implementation (for testing). To include this file, you must have the
13 // jitprofiling.h header available; it is available in Intel(R) VTune(TM)
16 //===----------------------------------------------------------------------===//
18 #ifndef INTEL_JIT_EVENTS_WRAPPER_H
19 #define INTEL_JIT_EVENTS_WRAPPER_H
21 #include "jitprofiling.h"
25 class IntelJITEventsWrapper
{
26 // Function pointer types for testing implementation of Intel jitprofiling
28 typedef int (*NotifyEventPtr
)(iJIT_JVM_EVENT
, void*);
29 typedef void (*RegisterCallbackExPtr
)(void *, iJIT_ModeChangedEx
);
30 typedef iJIT_IsProfilingActiveFlags (*IsProfilingActivePtr
)(void);
31 typedef void (*FinalizeThreadPtr
)(void);
32 typedef void (*FinalizeProcessPtr
)(void);
33 typedef unsigned int (*GetNewMethodIDPtr
)(void);
35 NotifyEventPtr NotifyEventFunc
;
36 RegisterCallbackExPtr RegisterCallbackExFunc
;
37 IsProfilingActivePtr IsProfilingActiveFunc
;
38 GetNewMethodIDPtr GetNewMethodIDFunc
;
41 bool isAmplifierRunning() {
42 return iJIT_IsProfilingActive() == iJIT_SAMPLING_ON
;
45 IntelJITEventsWrapper()
46 : NotifyEventFunc(::iJIT_NotifyEvent
),
47 RegisterCallbackExFunc(::iJIT_RegisterCallbackEx
),
48 IsProfilingActiveFunc(::iJIT_IsProfilingActive
),
49 GetNewMethodIDFunc(::iJIT_GetNewMethodID
) {
52 IntelJITEventsWrapper(NotifyEventPtr NotifyEventImpl
,
53 RegisterCallbackExPtr RegisterCallbackExImpl
,
54 IsProfilingActivePtr IsProfilingActiveImpl
,
55 FinalizeThreadPtr FinalizeThreadImpl
,
56 FinalizeProcessPtr FinalizeProcessImpl
,
57 GetNewMethodIDPtr GetNewMethodIDImpl
)
58 : NotifyEventFunc(NotifyEventImpl
),
59 RegisterCallbackExFunc(RegisterCallbackExImpl
),
60 IsProfilingActiveFunc(IsProfilingActiveImpl
),
61 GetNewMethodIDFunc(GetNewMethodIDImpl
) {
64 // Sends an event announcing that a function has been emitted
65 // return values are event-specific. See Intel documentation for details.
66 int iJIT_NotifyEvent(iJIT_JVM_EVENT EventType
, void *EventSpecificData
) {
69 return NotifyEventFunc(EventType
, EventSpecificData
);
72 // Registers a callback function to receive notice of profiling state changes
73 void iJIT_RegisterCallbackEx(void *UserData
,
74 iJIT_ModeChangedEx NewModeCallBackFuncEx
) {
75 if (RegisterCallbackExFunc
)
76 RegisterCallbackExFunc(UserData
, NewModeCallBackFuncEx
);
79 // Returns the current profiler mode
80 iJIT_IsProfilingActiveFlags
iJIT_IsProfilingActive(void) {
81 if (!IsProfilingActiveFunc
)
82 return iJIT_NOTHING_RUNNING
;
83 return IsProfilingActiveFunc();
86 // Generates a locally unique method ID for use in code registration
87 unsigned int iJIT_GetNewMethodID(void) {
88 if (!GetNewMethodIDFunc
)
90 return GetNewMethodIDFunc();
96 #endif //INTEL_JIT_EVENTS_WRAPPER_H