diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/bytecode/DFGExitProfile.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/bytecode/DFGExitProfile.cpp')
-rw-r--r-- | Source/JavaScriptCore/bytecode/DFGExitProfile.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/Source/JavaScriptCore/bytecode/DFGExitProfile.cpp b/Source/JavaScriptCore/bytecode/DFGExitProfile.cpp index 5d05bbb2f..64fe9a387 100644 --- a/Source/JavaScriptCore/bytecode/DFGExitProfile.cpp +++ b/Source/JavaScriptCore/bytecode/DFGExitProfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Apple Inc. All rights reserved. + * Copyright (C) 2011, 2016 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,19 +28,32 @@ #if ENABLE(DFG_JIT) -#include <wtf/PassOwnPtr.h> +#include "CodeBlock.h" +#include "VMInlines.h" namespace JSC { namespace DFG { +void FrequentExitSite::dump(PrintStream& out) const +{ + out.print("bc#", m_bytecodeOffset, ": ", m_kind, "/", m_jitType); +} + ExitProfile::ExitProfile() { } ExitProfile::~ExitProfile() { } -bool ExitProfile::add(const ConcurrentJITLocker&, const FrequentExitSite& site) +bool ExitProfile::add(const ConcurrentJSLocker&, CodeBlock* owner, const FrequentExitSite& site) { + ASSERT(site.jitType() != ExitFromAnything); + + CODEBLOCK_LOG_EVENT(owner, "frequentExit", (site)); + + if (Options::verboseExitProfile()) + dataLog(pointerDump(owner), ": Adding exit site: ", site, "\n"); + // If we've never seen any frequent exits then create the list and put this site // into it. if (!m_frequentExitSites) { - m_frequentExitSites = adoptPtr(new Vector<FrequentExitSite>()); + m_frequentExitSites = std::make_unique<Vector<FrequentExitSite>>(); m_frequentExitSites->append(site); return true; } @@ -72,13 +85,13 @@ Vector<FrequentExitSite> ExitProfile::exitSitesFor(unsigned bytecodeIndex) return result; } -bool ExitProfile::hasExitSite(const ConcurrentJITLocker&, const FrequentExitSite& site) const +bool ExitProfile::hasExitSite(const ConcurrentJSLocker&, const FrequentExitSite& site) const { if (!m_frequentExitSites) return false; for (unsigned i = m_frequentExitSites->size(); i--;) { - if (m_frequentExitSites->at(i) == site) + if (site.subsumes(m_frequentExitSites->at(i))) return true; } return false; @@ -87,7 +100,7 @@ bool ExitProfile::hasExitSite(const ConcurrentJITLocker&, const FrequentExitSite QueryableExitProfile::QueryableExitProfile() { } QueryableExitProfile::~QueryableExitProfile() { } -void QueryableExitProfile::initialize(const ConcurrentJITLocker&, const ExitProfile& profile) +void QueryableExitProfile::initialize(const ConcurrentJSLocker&, const ExitProfile& profile) { if (!profile.m_frequentExitSites) return; |