1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
5 // EEToProfInterfaceImpl.inl
9 // Inline implementation of portions of the code that wraps calling into
10 // the profiler's implementation of ICorProfilerCallback*
13 // ======================================================================================
15 #ifndef __EETOPROFINTERFACEIMPL_INL__
16 #define __EETOPROFINTERFACEIMPL_INL__
18 #include "profilepriv.h"
19 #include "profilepriv.inl"
20 #include "simplerwlock.hpp"
22 // ----------------------------------------------------------------------------
23 // EEToProfInterfaceImpl::IsCallback3Supported
26 // Returns BOOL indicating whether the profiler implements
27 // ICorProfilerCallback3.
30 inline BOOL EEToProfInterfaceImpl::IsCallback3Supported()
32 LIMITED_METHOD_CONTRACT;
33 return (m_pCallback3 != NULL);
36 // ----------------------------------------------------------------------------
37 // EEToProfInterfaceImpl::IsCallback4Supported
40 // Returns BOOL indicating whether the profiler implements
41 // ICorProfilerCallback4.
44 inline BOOL EEToProfInterfaceImpl::IsCallback4Supported()
46 LIMITED_METHOD_CONTRACT;
47 return (m_pCallback4 != NULL);
50 inline BOOL EEToProfInterfaceImpl::IsCallback5Supported()
52 LIMITED_METHOD_CONTRACT;
53 return (m_pCallback5 != NULL);
56 inline BOOL EEToProfInterfaceImpl::IsCallback6Supported()
58 LIMITED_METHOD_CONTRACT;
59 return (m_pCallback6 != NULL);
62 inline BOOL EEToProfInterfaceImpl::IsCallback7Supported()
64 LIMITED_METHOD_CONTRACT;
65 return (m_pCallback7 != NULL);
68 inline BOOL EEToProfInterfaceImpl::IsCallback8Supported()
70 LIMITED_METHOD_CONTRACT;
71 return (m_pCallback8 != NULL);
74 inline FunctionIDMapper * EEToProfInterfaceImpl::GetFunctionIDMapper()
76 LIMITED_METHOD_CONTRACT;
77 return m_pProfilersFuncIDMapper;
80 inline FunctionIDMapper2 * EEToProfInterfaceImpl::GetFunctionIDMapper2()
82 LIMITED_METHOD_CONTRACT;
83 return m_pProfilersFuncIDMapper2;
86 inline void EEToProfInterfaceImpl::SetFunctionIDMapper(FunctionIDMapper * pFunc)
88 LIMITED_METHOD_CONTRACT;
89 m_pProfilersFuncIDMapper = pFunc;
92 inline void EEToProfInterfaceImpl::SetFunctionIDMapper2(FunctionIDMapper2 * pFunc, void * clientData)
94 LIMITED_METHOD_CONTRACT;
95 m_pProfilersFuncIDMapper2 = pFunc;
96 m_pProfilersFuncIDMapper2ClientData = clientData;
99 inline BOOL EEToProfInterfaceImpl::IsLoadedViaAttach()
101 LIMITED_METHOD_CONTRACT;
102 return m_fLoadedViaAttach;
105 inline void EEToProfInterfaceImpl::SetUnrevertiblyModifiedILFlag()
107 LIMITED_METHOD_CONTRACT;
108 m_fUnrevertiblyModifiedIL = TRUE;
111 inline void EEToProfInterfaceImpl::SetModifiedRejitState()
113 LIMITED_METHOD_CONTRACT;
114 m_fModifiedRejitState = TRUE;
117 inline FunctionEnter * EEToProfInterfaceImpl::GetEnterHook()
119 LIMITED_METHOD_CONTRACT;
123 inline FunctionLeave * EEToProfInterfaceImpl::GetLeaveHook()
125 LIMITED_METHOD_CONTRACT;
129 inline FunctionTailcall * EEToProfInterfaceImpl::GetTailcallHook()
131 LIMITED_METHOD_CONTRACT;
135 inline FunctionEnter2 * EEToProfInterfaceImpl::GetEnter2Hook()
137 LIMITED_METHOD_CONTRACT;
141 inline FunctionLeave2 * EEToProfInterfaceImpl::GetLeave2Hook()
143 LIMITED_METHOD_CONTRACT;
147 inline FunctionTailcall2 * EEToProfInterfaceImpl::GetTailcall2Hook()
149 LIMITED_METHOD_CONTRACT;
153 inline FunctionEnter3 * EEToProfInterfaceImpl::GetEnter3Hook()
155 LIMITED_METHOD_CONTRACT;
159 inline FunctionLeave3 * EEToProfInterfaceImpl::GetLeave3Hook()
161 LIMITED_METHOD_CONTRACT;
165 inline FunctionTailcall3 * EEToProfInterfaceImpl::GetTailcall3Hook()
167 LIMITED_METHOD_CONTRACT;
171 inline FunctionEnter3WithInfo * EEToProfInterfaceImpl::GetEnter3WithInfoHook()
173 LIMITED_METHOD_CONTRACT;
174 return m_pEnter3WithInfo;
177 inline FunctionLeave3WithInfo * EEToProfInterfaceImpl::GetLeave3WithInfoHook()
179 LIMITED_METHOD_CONTRACT;
180 return m_pLeave3WithInfo;
183 inline FunctionTailcall3WithInfo * EEToProfInterfaceImpl::GetTailcall3WithInfoHook()
185 LIMITED_METHOD_CONTRACT;
186 return m_pTailcall3WithInfo;
189 inline BOOL EEToProfInterfaceImpl::IsClientIDToFunctionIDMappingEnabled()
191 LIMITED_METHOD_CONTRACT;
192 return m_fIsClientIDToFunctionIDMappingEnabled;
195 //---------------------------------------------------------------------------------------
197 // Lookup the clientID for a given functionID
203 // If found a match, return clientID; Otherwise return NULL.
205 inline UINT_PTR EEToProfInterfaceImpl::LookupClientIDFromCache(FunctionID functionID)
214 _ASSERTE(functionID != NULL);
216 SimpleReadLockHolder readLockHolder(m_pFunctionIDHashTableRWLock);
217 const FunctionIDAndClientID * entry = m_pFunctionIDHashTable->LookupPtr(functionID);
219 // entry can be NULL when OOM happens.
222 return entry->clientID;
230 //---------------------------------------------------------------------------------------
232 // Returns whether the profiler chose options that require the JIT to compile with the
233 // CORINFO_GENERICS_CTXT_KEEP_ALIVE flag.
236 // Nonzero iff the JIT should compile with CORINFO_GENERICS_CTXT_KEEP_ALIVE.
239 inline BOOL EEToProfInterfaceImpl::RequiresGenericsContextForEnterLeave()
250 CORProfilerPresent() &&
251 ((g_profControlBlock.dwEventMask & COR_PRF_ENABLE_FRAME_INFO) != 0) &&
253 (m_pEnter2 != NULL) ||
254 (m_pLeave2 != NULL) ||
255 (m_pTailcall2 != NULL) ||
256 (m_pEnter3WithInfo != NULL) ||
257 (m_pLeave3WithInfo != NULL) ||
258 (m_pTailcall3WithInfo != NULL)
262 inline BOOL EEToProfInterfaceImpl::HasTimedOutWaitingForConcurrentGC()
264 LIMITED_METHOD_CONTRACT;
265 return m_bHasTimedOutWaitingForConcurrentGC;
268 #endif // __EETOPROFINTERFACEIMPL_INL__