brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · dfe208f Raw
111 lines · c
1//===-- IntelJITEventsWrapper.h - Intel JIT Events API Wrapper --*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines a wrapper for the Intel JIT Events API. It allows for the10// implementation of the jitprofiling library to be swapped with an alternative11// implementation (for testing). To include this file, you must have the12// jitprofiling.h header available; it is available in Intel(R) VTune(TM)13// Amplifier XE 2011.14//15//===----------------------------------------------------------------------===//16 17#ifndef INTEL_JIT_EVENTS_WRAPPER_H18#define INTEL_JIT_EVENTS_WRAPPER_H19 20#include "jitprofiling.h"21 22namespace llvm {23 24typedef enum {25  LoadBinaryModule,26  LoadBinarySection,27  UnloadBinaryModule,28  UnloadBinarySection29} IttEventType;30 31class IntelJITEventsWrapper {32  // Function pointer types for testing implementation of Intel jitprofiling33  // library34  typedef int (*NotifyEventPtr)(iJIT_JVM_EVENT, void*);35  typedef int (*IttnotifyInfoPtr)(IttEventType, const char *, unsigned int);36  typedef void (*RegisterCallbackExPtr)(void *, iJIT_ModeChangedEx );37  typedef iJIT_IsProfilingActiveFlags (*IsProfilingActivePtr)(void);38  typedef void (*FinalizeThreadPtr)(void);39  typedef void (*FinalizeProcessPtr)(void);40  typedef unsigned int (*GetNewMethodIDPtr)(void);41 42  NotifyEventPtr NotifyEventFunc;43  IttnotifyInfoPtr IttnotifyInfoFunc;44  RegisterCallbackExPtr RegisterCallbackExFunc;45  IsProfilingActivePtr IsProfilingActiveFunc;46  GetNewMethodIDPtr GetNewMethodIDFunc;47 48public:49  bool isAmplifierRunning() {50    return iJIT_IsProfilingActive() == iJIT_SAMPLING_ON;51  }52 53  IntelJITEventsWrapper()54      : NotifyEventFunc(::iJIT_NotifyEvent), IttnotifyInfoFunc(0),55        RegisterCallbackExFunc(::iJIT_RegisterCallbackEx),56        IsProfilingActiveFunc(::iJIT_IsProfilingActive),57        GetNewMethodIDFunc(::iJIT_GetNewMethodID) {}58 59  IntelJITEventsWrapper(NotifyEventPtr NotifyEventImpl,60                        IttnotifyInfoPtr IttnotifyInfoImpl,61                        RegisterCallbackExPtr RegisterCallbackExImpl,62                        IsProfilingActivePtr IsProfilingActiveImpl,63                        FinalizeThreadPtr FinalizeThreadImpl,64                        FinalizeProcessPtr FinalizeProcessImpl,65                        GetNewMethodIDPtr GetNewMethodIDImpl)66      : NotifyEventFunc(NotifyEventImpl), IttnotifyInfoFunc(IttnotifyInfoImpl),67        RegisterCallbackExFunc(RegisterCallbackExImpl),68        IsProfilingActiveFunc(IsProfilingActiveImpl),69        GetNewMethodIDFunc(GetNewMethodIDImpl) {}70 71  // Sends an event announcing that a function has been emitted72  //   return values are event-specific.  See Intel documentation for details.73  int  iJIT_NotifyEvent(iJIT_JVM_EVENT EventType, void *EventSpecificData) {74    if (!NotifyEventFunc)75      return -1;76    return NotifyEventFunc(EventType, EventSpecificData);77  }78 79  int iJitIttNotifyInfo(IttEventType EventType, const char *Name,80                        unsigned int Size) {81    if (!IttnotifyInfoFunc)82      return -1;83    return IttnotifyInfoFunc(EventType, Name, Size);84  }85 86  // Registers a callback function to receive notice of profiling state changes87  void iJIT_RegisterCallbackEx(void *UserData,88                               iJIT_ModeChangedEx NewModeCallBackFuncEx) {89    if (RegisterCallbackExFunc)90      RegisterCallbackExFunc(UserData, NewModeCallBackFuncEx);91  }92 93  // Returns the current profiler mode94  iJIT_IsProfilingActiveFlags iJIT_IsProfilingActive(void) {95    if (!IsProfilingActiveFunc)96      return iJIT_NOTHING_RUNNING;97    return IsProfilingActiveFunc();98  }99 100  // Generates a locally unique method ID for use in code registration101  unsigned int iJIT_GetNewMethodID(void) {102    if (!GetNewMethodIDFunc)103      return -1;104    return GetNewMethodIDFunc();105  }106};107 108} // namespace llvm109 110#endif //INTEL_JIT_EVENTS_WRAPPER_H111