summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/DFGExitProfile.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/bytecode/DFGExitProfile.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/bytecode/DFGExitProfile.cpp')
-rw-r--r--Source/JavaScriptCore/bytecode/DFGExitProfile.cpp27
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;