Add an Option to disable the CodeCache
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Sep 2016 22:48:18 +0000 (22:48 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Sep 2016 22:48:18 +0000 (22:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=162579

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2016-09-26
Reviewed by Geoffrey Garen.

* runtime/CodeCache.cpp:
(JSC::CodeCache::getGlobalCodeBlock):
(JSC::CodeCache::getFunctionExecutableFromGlobalCode):
Do not use the cache if the Option is disabled.

* runtime/Options.h:
New option to not use the code cache.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@206400 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/CodeCache.cpp
Source/JavaScriptCore/runtime/Options.h

index 1311465..3f9b08b 100644 (file)
@@ -1,3 +1,18 @@
+2016-09-26  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Add an Option to disable the CodeCache
+        https://bugs.webkit.org/show_bug.cgi?id=162579
+
+        Reviewed by Geoffrey Garen.
+
+        * runtime/CodeCache.cpp:
+        (JSC::CodeCache::getGlobalCodeBlock):
+        (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+        Do not use the cache if the Option is disabled.
+
+        * runtime/Options.h:
+        New option to not use the code cache.
+
 2016-09-26  Daniel Bates  <dabates@apple.com>
 
         Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
index f147ed3..fc19bb8 100644 (file)
@@ -90,7 +90,7 @@ UnlinkedCodeBlockType* CodeCache::getGlobalCodeBlock(VM& vm, ExecutableType* exe
     // FIXME: We should do something smart for TDZ instead of just disabling caching.
     // https://bugs.webkit.org/show_bug.cgi?id=154010
     bool canCache = debuggerMode == DebuggerOff && !vm.typeProfiler() && !vm.controlFlowProfiler() && !variablesUnderTDZ->size();
-    if (cache && canCache) {
+    if (cache && canCache && Options::useCodeCache()) {
         UnlinkedCodeBlockType* unlinkedCodeBlock = jsCast<UnlinkedCodeBlockType*>(cache->cell.get());
         unsigned firstLine = source.firstLine() + unlinkedCodeBlock->firstLine();
         unsigned lineCount = unlinkedCodeBlock->lineCount();
@@ -163,7 +163,7 @@ UnlinkedFunctionExecutable* CodeCache::getFunctionExecutableFromGlobalCode(VM& v
         EvalContextType::None,
         isArrowFunctionContext);
     SourceCodeValue* cache = m_sourceCode.findCacheAndUpdateAge(key);
-    if (cache) {
+    if (cache && Options::useCodeCache()) {
         UnlinkedFunctionExecutable* executable = jsCast<UnlinkedFunctionExecutable*>(cache->cell.get());
         source.provider()->setSourceURLDirective(executable->sourceURLDirective());
         source.provider()->setSourceMappingURLDirective(executable->sourceMappingURLDirective());
index 00f0b44..764f1ce 100644 (file)
@@ -388,6 +388,7 @@ typedef const char* optionString;
     v(optionString, llintStatsFile, nullptr, Configurable, "File to collect LLInt statistics in") \
     \
     v(bool, useSourceProviderCache, true, Normal, "If false, the parser will not use the source provider cache. It's good to verify everything works when this is false. Because the cache is so successful, it can mask bugs.") \
+    v(bool, useCodeCache, true, Normal, "If false, the parser will not use the code cache.") \
 
 enum OptionEquivalence {
     SameOption,