static String HHVM_FUNCTION(server_warmup_status) { // Fail if we jitted more than 25kb of code. size_t begin, end; jit::mcg->codeEmittedThisRequest(begin, end); auto const diff = end - begin; auto constexpr kMaxTCBytes = 25 << 10; if (diff > kMaxTCBytes) { return folly::format("Translation cache grew by {} bytes to {} bytes.", diff, begin).str(); } // Fail if we spent more than 0.5ms in the JIT. auto const jittime = jit::Timer::CounterValue(jit::Timer::translate); auto constexpr kMaxJitTimeNS = 500000; if (jittime.total > kMaxJitTimeNS) { return folly::format("Spent {}us in the JIT.", jittime.total / 1000).str(); } if (!isStandardRequest()) { return "Warmup is still in progress."; } if (requestCount() <= RuntimeOption::EvalJitProfileRequests) { return "PGO profiling translations are still enabled."; } auto tpc_diff = jit::s_perfCounters[jit::tpc_interp_bb] - jit::s_perfCounters[jit::tpc_interp_bb_force]; if (tpc_diff) { return folly::sformat("Interpreted {} non-forced basic blocks.", tpc_diff); } return empty_string(); }
void RequestInjectionData::updateJit() { m_jit = RuntimeOption::EvalJit && !(RuntimeOption::EvalJitDisabledByHphpd && m_debuggerAttached) && !m_coverage && isStandardRequest() && !getDebuggerForceIntr(); }