void EventHook::onFunctionEnter(const ActRec* ar, int funcType, ssize_t flags) { // User profiler if (flags & EventHookFlag) { if (shouldRunUserProfiler(ar->func())) { runUserProfilerOnFunctionEnter(ar); } auto profiler = ThreadInfo::s_threadInfo->m_profiler; if (profiler != nullptr && !(profiler->shouldSkipBuiltins() && ar->func()->isBuiltin())) { begin_profiler_frame(profiler, GetFunctionNameForProfiler(ar->func(), funcType)); } } // Debugger hook if (flags & DebuggerHookFlag) { DEBUGGER_ATTACHED_ONLY(phpDebuggerFuncEntryHook(ar)); } }
void EventHook::onFunctionEnter(const ActRec* ar, int funcType, ssize_t flags) { // Xenon if (flags & RequestInjectionData::XenonSignalFlag) { Xenon::getInstance().log(Xenon::EnterSample); } // User profiler if (flags & RequestInjectionData::EventHookFlag) { if (shouldRunUserProfiler(ar->func())) { runUserProfilerOnFunctionEnter(ar); } Profiler* profiler = ThreadInfo::s_threadInfo->m_profiler; if (profiler != nullptr) { begin_profiler_frame(profiler, GetFunctionNameForProfiler(ar->func(), funcType)); } } // Debugger hook if (flags & RequestInjectionData::DebuggerHookFlag) { DEBUGGER_ATTACHED_ONLY(phpDebuggerFuncEntryHook(ar)); } }