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 FunctionEnter * EEToProfInterfaceImpl::GetEnterHook()
113 LIMITED_METHOD_CONTRACT;
117 inline FunctionLeave * EEToProfInterfaceImpl::GetLeaveHook()
119 LIMITED_METHOD_CONTRACT;
123 inline FunctionTailcall * EEToProfInterfaceImpl::GetTailcallHook()
125 LIMITED_METHOD_CONTRACT;
129 inline FunctionEnter2 * EEToProfInterfaceImpl::GetEnter2Hook()
131 LIMITED_METHOD_CONTRACT;
135 inline FunctionLeave2 * EEToProfInterfaceImpl::GetLeave2Hook()
137 LIMITED_METHOD_CONTRACT;
141 inline FunctionTailcall2 * EEToProfInterfaceImpl::GetTailcall2Hook()
143 LIMITED_METHOD_CONTRACT;
147 inline FunctionEnter3 * EEToProfInterfaceImpl::GetEnter3Hook()
149 LIMITED_METHOD_CONTRACT;
153 inline FunctionLeave3 * EEToProfInterfaceImpl::GetLeave3Hook()
155 LIMITED_METHOD_CONTRACT;
159 inline FunctionTailcall3 * EEToProfInterfaceImpl::GetTailcall3Hook()
161 LIMITED_METHOD_CONTRACT;
165 inline FunctionEnter3WithInfo * EEToProfInterfaceImpl::GetEnter3WithInfoHook()
167 LIMITED_METHOD_CONTRACT;
168 return m_pEnter3WithInfo;
171 inline FunctionLeave3WithInfo * EEToProfInterfaceImpl::GetLeave3WithInfoHook()
173 LIMITED_METHOD_CONTRACT;
174 return m_pLeave3WithInfo;
177 inline FunctionTailcall3WithInfo * EEToProfInterfaceImpl::GetTailcall3WithInfoHook()
179 LIMITED_METHOD_CONTRACT;
180 return m_pTailcall3WithInfo;
183 inline BOOL EEToProfInterfaceImpl::IsClientIDToFunctionIDMappingEnabled()
185 LIMITED_METHOD_CONTRACT;
186 return m_fIsClientIDToFunctionIDMappingEnabled;
189 //---------------------------------------------------------------------------------------
191 // Lookup the clientID for a given functionID
197 // If found a match, return clientID; Otherwise return NULL.
199 inline UINT_PTR EEToProfInterfaceImpl::LookupClientIDFromCache(FunctionID functionID)
209 _ASSERTE(functionID != NULL);
211 SimpleReadLockHolder readLockHolder(m_pFunctionIDHashTableRWLock);
212 const FunctionIDAndClientID * entry = m_pFunctionIDHashTable->LookupPtr(functionID);
214 // entry can be NULL when OOM happens.
217 return entry->clientID;
225 //---------------------------------------------------------------------------------------
227 // Returns whether the profiler chose options that require the JIT to compile with the
228 // CORINFO_GENERICS_CTXT_KEEP_ALIVE flag.
231 // Nonzero iff the JIT should compile with CORINFO_GENERICS_CTXT_KEEP_ALIVE.
234 inline BOOL EEToProfInterfaceImpl::RequiresGenericsContextForEnterLeave()
245 CORProfilerPresent() &&
246 ((g_profControlBlock.dwEventMask & COR_PRF_ENABLE_FRAME_INFO) != 0) &&
248 (m_pEnter2 != NULL) ||
249 (m_pLeave2 != NULL) ||
250 (m_pTailcall2 != NULL) ||
251 (m_pEnter3WithInfo != NULL) ||
252 (m_pLeave3WithInfo != NULL) ||
253 (m_pTailcall3WithInfo != NULL)
257 inline BOOL EEToProfInterfaceImpl::HasTimedOutWaitingForConcurrentGC()
259 LIMITED_METHOD_CONTRACT;
260 return m_bHasTimedOutWaitingForConcurrentGC;
263 #endif // __EETOPROFINTERFACEIMPL_INL__