void Profiler::stopProfiling(JSGlobalObject* origin) { for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); if (profileGenerator->origin() == origin) { profileGenerator->stopProfiling(); m_currentProfiles.remove(i); if (!m_currentProfiles.size()) origin->globalData().m_enabledProfiler = 0; } } }
void LegacyProfiler::stopProfiling(JSGlobalObject* origin) { for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); if (profileGenerator->origin() == origin) { profileGenerator->stopProfiling(); m_currentProfiles.remove(i); if (!m_currentProfiles.size()) origin->vm().setEnabledProfiler(nullptr); } } }
void Profiler::stopProfiling(JSGlobalObject* origin) { for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); if (profileGenerator->origin() == origin) { profileGenerator->stopProfiling(); m_currentProfiles.remove(i); if (!m_currentProfiles.size()) s_sharedEnabledProfilerReference = 0; } } }
void Profiler::startProfiling(ExecState* exec, const String& title) { ASSERT_ARG(title, !title.isNull()); // Check if we currently have a Profile for this global ExecState and title. // If so return early and don't create a new Profile. JSGlobalObject* origin = exec ? exec->lexicalGlobalObject() : 0; for (size_t i = 0; i < m_currentProfiles.size(); ++i) { ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); if (profileGenerator->origin() == origin && profileGenerator->title() == title) return; } exec->globalData().m_enabledProfiler = this; RefPtr<ProfileGenerator> profileGenerator = ProfileGenerator::create(exec, title, ++ProfilesUID); m_currentProfiles.append(profileGenerator); }
PassRefPtr<Profile> Profiler::stopProfiling(ExecState* exec, const String& title) { JSGlobalObject* origin = exec ? exec->lexicalGlobalObject() : 0; for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); if (profileGenerator->origin() == origin && (title.isNull() || profileGenerator->title() == title)) { profileGenerator->stopProfiling(); RefPtr<Profile> returnProfile = profileGenerator->profile(); m_currentProfiles.remove(i); if (!m_currentProfiles.size()) exec->globalData().m_enabledProfiler = 0; return returnProfile; } } return 0; }