зеркало из https://github.com/mozilla/gecko-dev.git
Bug 857845 part 3 - Remove JM JSAPI flags, memory reporters and browser prefs. r=djvj
--HG-- extra : rebase_source : 8b2ed85801fcd8c8fd0fc16a89b1a275add1a310
This commit is contained in:
Родитель
ca8b7e143c
Коммит
162bdc21e4
|
@ -959,9 +959,6 @@ static const char js_werror_option_str[] = JS_OPTIONS_DOT_STR "werror";
|
||||||
static const char js_zeal_option_str[] = JS_OPTIONS_DOT_STR "gczeal";
|
static const char js_zeal_option_str[] = JS_OPTIONS_DOT_STR "gczeal";
|
||||||
static const char js_zeal_frequency_str[] = JS_OPTIONS_DOT_STR "gczeal.frequency";
|
static const char js_zeal_frequency_str[] = JS_OPTIONS_DOT_STR "gczeal.frequency";
|
||||||
#endif
|
#endif
|
||||||
static const char js_methodjit_content_str[] = JS_OPTIONS_DOT_STR "methodjit.content";
|
|
||||||
static const char js_methodjit_chrome_str[] = JS_OPTIONS_DOT_STR "methodjit.chrome";
|
|
||||||
static const char js_methodjit_always_str[] = JS_OPTIONS_DOT_STR "methodjit_always";
|
|
||||||
static const char js_typeinfer_str[] = JS_OPTIONS_DOT_STR "typeinference";
|
static const char js_typeinfer_str[] = JS_OPTIONS_DOT_STR "typeinference";
|
||||||
static const char js_pccounts_content_str[] = JS_OPTIONS_DOT_STR "pccounts.content";
|
static const char js_pccounts_content_str[] = JS_OPTIONS_DOT_STR "pccounts.content";
|
||||||
static const char js_pccounts_chrome_str[] = JS_OPTIONS_DOT_STR "pccounts.chrome";
|
static const char js_pccounts_chrome_str[] = JS_OPTIONS_DOT_STR "pccounts.chrome";
|
||||||
|
@ -1004,13 +1001,9 @@ nsJSContext::JSOptionChangedCallback(const char *pref, void *data)
|
||||||
nsCOMPtr<nsIDOMWindow> contentWindow(do_QueryInterface(global));
|
nsCOMPtr<nsIDOMWindow> contentWindow(do_QueryInterface(global));
|
||||||
nsCOMPtr<nsIDOMChromeWindow> chromeWindow(do_QueryInterface(global));
|
nsCOMPtr<nsIDOMChromeWindow> chromeWindow(do_QueryInterface(global));
|
||||||
|
|
||||||
bool useMethodJIT = Preferences::GetBool(chromeWindow || !contentWindow ?
|
|
||||||
js_methodjit_chrome_str :
|
|
||||||
js_methodjit_content_str);
|
|
||||||
bool usePCCounts = Preferences::GetBool(chromeWindow || !contentWindow ?
|
bool usePCCounts = Preferences::GetBool(chromeWindow || !contentWindow ?
|
||||||
js_pccounts_chrome_str :
|
js_pccounts_chrome_str :
|
||||||
js_pccounts_content_str);
|
js_pccounts_content_str);
|
||||||
bool useMethodJITAlways = Preferences::GetBool(js_methodjit_always_str);
|
|
||||||
bool useTypeInference = !chromeWindow && contentWindow && Preferences::GetBool(js_typeinfer_str);
|
bool useTypeInference = !chromeWindow && contentWindow && Preferences::GetBool(js_typeinfer_str);
|
||||||
bool useHardening = Preferences::GetBool(js_jit_hardening_str);
|
bool useHardening = Preferences::GetBool(js_jit_hardening_str);
|
||||||
bool useBaselineJIT = Preferences::GetBool(chromeWindow || !contentWindow ?
|
bool useBaselineJIT = Preferences::GetBool(chromeWindow || !contentWindow ?
|
||||||
|
@ -1024,10 +1017,8 @@ nsJSContext::JSOptionChangedCallback(const char *pref, void *data)
|
||||||
bool safeMode = false;
|
bool safeMode = false;
|
||||||
xr->GetInSafeMode(&safeMode);
|
xr->GetInSafeMode(&safeMode);
|
||||||
if (safeMode) {
|
if (safeMode) {
|
||||||
useMethodJIT = false;
|
|
||||||
usePCCounts = false;
|
usePCCounts = false;
|
||||||
useTypeInference = false;
|
useTypeInference = false;
|
||||||
useMethodJITAlways = true;
|
|
||||||
useHardening = false;
|
useHardening = false;
|
||||||
useBaselineJIT = false;
|
useBaselineJIT = false;
|
||||||
useIon = false;
|
useIon = false;
|
||||||
|
@ -1035,21 +1026,11 @@ nsJSContext::JSOptionChangedCallback(const char *pref, void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useMethodJIT)
|
|
||||||
newDefaultJSOptions |= JSOPTION_METHODJIT;
|
|
||||||
else
|
|
||||||
newDefaultJSOptions &= ~JSOPTION_METHODJIT;
|
|
||||||
|
|
||||||
if (usePCCounts)
|
if (usePCCounts)
|
||||||
newDefaultJSOptions |= JSOPTION_PCCOUNT;
|
newDefaultJSOptions |= JSOPTION_PCCOUNT;
|
||||||
else
|
else
|
||||||
newDefaultJSOptions &= ~JSOPTION_PCCOUNT;
|
newDefaultJSOptions &= ~JSOPTION_PCCOUNT;
|
||||||
|
|
||||||
if (useMethodJITAlways)
|
|
||||||
newDefaultJSOptions |= JSOPTION_METHODJIT_ALWAYS;
|
|
||||||
else
|
|
||||||
newDefaultJSOptions &= ~JSOPTION_METHODJIT_ALWAYS;
|
|
||||||
|
|
||||||
if (useTypeInference)
|
if (useTypeInference)
|
||||||
newDefaultJSOptions |= JSOPTION_TYPE_INFERENCE;
|
newDefaultJSOptions |= JSOPTION_TYPE_INFERENCE;
|
||||||
else
|
else
|
||||||
|
|
|
@ -150,8 +150,6 @@ MOZ_STATIC_ASSERT(NS_ARRAY_LENGTH(gStringChars) == ID_COUNT,
|
||||||
enum {
|
enum {
|
||||||
PREF_strict = 0,
|
PREF_strict = 0,
|
||||||
PREF_werror,
|
PREF_werror,
|
||||||
PREF_methodjit,
|
|
||||||
PREF_methodjit_always,
|
|
||||||
PREF_typeinference,
|
PREF_typeinference,
|
||||||
PREF_jit_hardening,
|
PREF_jit_hardening,
|
||||||
PREF_mem_max,
|
PREF_mem_max,
|
||||||
|
@ -172,8 +170,6 @@ enum {
|
||||||
const char* gPrefsToWatch[] = {
|
const char* gPrefsToWatch[] = {
|
||||||
JS_OPTIONS_DOT_STR "strict",
|
JS_OPTIONS_DOT_STR "strict",
|
||||||
JS_OPTIONS_DOT_STR "werror",
|
JS_OPTIONS_DOT_STR "werror",
|
||||||
JS_OPTIONS_DOT_STR "methodjit.content",
|
|
||||||
JS_OPTIONS_DOT_STR "methodjit_always",
|
|
||||||
JS_OPTIONS_DOT_STR "typeinference",
|
JS_OPTIONS_DOT_STR "typeinference",
|
||||||
JS_OPTIONS_DOT_STR "jit_hardening",
|
JS_OPTIONS_DOT_STR "jit_hardening",
|
||||||
JS_OPTIONS_DOT_STR "mem.max",
|
JS_OPTIONS_DOT_STR "mem.max",
|
||||||
|
@ -222,12 +218,6 @@ PrefCallback(const char* aPrefName, void* aClosure)
|
||||||
if (Preferences::GetBool(gPrefsToWatch[PREF_werror])) {
|
if (Preferences::GetBool(gPrefsToWatch[PREF_werror])) {
|
||||||
newOptions |= JSOPTION_WERROR;
|
newOptions |= JSOPTION_WERROR;
|
||||||
}
|
}
|
||||||
if (Preferences::GetBool(gPrefsToWatch[PREF_methodjit])) {
|
|
||||||
newOptions |= JSOPTION_METHODJIT;
|
|
||||||
}
|
|
||||||
if (Preferences::GetBool(gPrefsToWatch[PREF_methodjit_always])) {
|
|
||||||
newOptions |= JSOPTION_METHODJIT_ALWAYS;
|
|
||||||
}
|
|
||||||
if (Preferences::GetBool(gPrefsToWatch[PREF_typeinference])) {
|
if (Preferences::GetBool(gPrefsToWatch[PREF_typeinference])) {
|
||||||
newOptions |= JSOPTION_TYPE_INFERENCE;
|
newOptions |= JSOPTION_TYPE_INFERENCE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,6 @@ struct TypeInferenceSizes
|
||||||
// Data for tracking JIT-code memory usage.
|
// Data for tracking JIT-code memory usage.
|
||||||
struct CodeSizes
|
struct CodeSizes
|
||||||
{
|
{
|
||||||
size_t jaeger;
|
|
||||||
size_t ion;
|
size_t ion;
|
||||||
size_t asmJS;
|
size_t asmJS;
|
||||||
size_t baseline;
|
size_t baseline;
|
||||||
|
@ -241,7 +240,6 @@ struct CompartmentStats
|
||||||
shapesExtraTreeShapeKids(0),
|
shapesExtraTreeShapeKids(0),
|
||||||
shapesCompartmentTables(0),
|
shapesCompartmentTables(0),
|
||||||
scriptData(0),
|
scriptData(0),
|
||||||
jaegerData(0),
|
|
||||||
baselineData(0),
|
baselineData(0),
|
||||||
baselineStubsFallback(0),
|
baselineStubsFallback(0),
|
||||||
baselineStubsOptimized(0),
|
baselineStubsOptimized(0),
|
||||||
|
@ -271,7 +269,6 @@ struct CompartmentStats
|
||||||
shapesExtraTreeShapeKids(other.shapesExtraTreeShapeKids),
|
shapesExtraTreeShapeKids(other.shapesExtraTreeShapeKids),
|
||||||
shapesCompartmentTables(other.shapesCompartmentTables),
|
shapesCompartmentTables(other.shapesCompartmentTables),
|
||||||
scriptData(other.scriptData),
|
scriptData(other.scriptData),
|
||||||
jaegerData(other.jaegerData),
|
|
||||||
baselineData(other.baselineData),
|
baselineData(other.baselineData),
|
||||||
baselineStubsFallback(other.baselineStubsFallback),
|
baselineStubsFallback(other.baselineStubsFallback),
|
||||||
baselineStubsOptimized(other.baselineStubsOptimized),
|
baselineStubsOptimized(other.baselineStubsOptimized),
|
||||||
|
@ -306,7 +303,6 @@ struct CompartmentStats
|
||||||
size_t shapesExtraTreeShapeKids;
|
size_t shapesExtraTreeShapeKids;
|
||||||
size_t shapesCompartmentTables;
|
size_t shapesCompartmentTables;
|
||||||
size_t scriptData;
|
size_t scriptData;
|
||||||
size_t jaegerData;
|
|
||||||
size_t baselineData;
|
size_t baselineData;
|
||||||
size_t baselineStubsFallback;
|
size_t baselineStubsFallback;
|
||||||
size_t baselineStubsOptimized;
|
size_t baselineStubsOptimized;
|
||||||
|
@ -339,7 +335,6 @@ struct CompartmentStats
|
||||||
ADD(shapesExtraTreeShapeKids);
|
ADD(shapesExtraTreeShapeKids);
|
||||||
ADD(shapesCompartmentTables);
|
ADD(shapesCompartmentTables);
|
||||||
ADD(scriptData);
|
ADD(scriptData);
|
||||||
ADD(jaegerData);
|
|
||||||
ADD(baselineData);
|
ADD(baselineData);
|
||||||
ADD(baselineStubsFallback);
|
ADD(baselineStubsFallback);
|
||||||
ADD(baselineStubsOptimized);
|
ADD(baselineStubsOptimized);
|
||||||
|
|
|
@ -51,14 +51,12 @@ ExecutableAllocator::sizeOfCode(JS::CodeSizes *sizes) const
|
||||||
if (m_pools.initialized()) {
|
if (m_pools.initialized()) {
|
||||||
for (ExecPoolHashSet::Range r = m_pools.all(); !r.empty(); r.popFront()) {
|
for (ExecPoolHashSet::Range r = m_pools.all(); !r.empty(); r.popFront()) {
|
||||||
ExecutablePool* pool = r.front();
|
ExecutablePool* pool = r.front();
|
||||||
sizes->jaeger += pool->m_jaegerCodeBytes;
|
|
||||||
sizes->ion += pool->m_ionCodeBytes;
|
sizes->ion += pool->m_ionCodeBytes;
|
||||||
sizes->baseline += pool->m_baselineCodeBytes;
|
sizes->baseline += pool->m_baselineCodeBytes;
|
||||||
sizes->asmJS += pool->m_asmJSCodeBytes;
|
sizes->asmJS += pool->m_asmJSCodeBytes;
|
||||||
sizes->regexp += pool->m_regexpCodeBytes;
|
sizes->regexp += pool->m_regexpCodeBytes;
|
||||||
sizes->other += pool->m_otherCodeBytes;
|
sizes->other += pool->m_otherCodeBytes;
|
||||||
sizes->unused += pool->m_allocation.size - pool->m_jaegerCodeBytes
|
sizes->unused += pool->m_allocation.size - pool->m_ionCodeBytes
|
||||||
- pool->m_ionCodeBytes
|
|
||||||
- pool->m_baselineCodeBytes
|
- pool->m_baselineCodeBytes
|
||||||
- pool->m_asmJSCodeBytes
|
- pool->m_asmJSCodeBytes
|
||||||
- pool->m_regexpCodeBytes
|
- pool->m_regexpCodeBytes
|
||||||
|
|
|
@ -86,7 +86,7 @@ namespace JSC {
|
||||||
|
|
||||||
class ExecutableAllocator;
|
class ExecutableAllocator;
|
||||||
|
|
||||||
enum CodeKind { JAEGER_CODE, ION_CODE, BASELINE_CODE, REGEXP_CODE, ASMJS_CODE, OTHER_CODE };
|
enum CodeKind { ION_CODE, BASELINE_CODE, REGEXP_CODE, ASMJS_CODE, OTHER_CODE };
|
||||||
|
|
||||||
// These are reference-counted. A new one starts with a count of 1.
|
// These are reference-counted. A new one starts with a count of 1.
|
||||||
class ExecutablePool {
|
class ExecutablePool {
|
||||||
|
@ -110,7 +110,6 @@ private:
|
||||||
unsigned m_refCount;
|
unsigned m_refCount;
|
||||||
|
|
||||||
// Number of bytes currently used for Method and Regexp JIT code.
|
// Number of bytes currently used for Method and Regexp JIT code.
|
||||||
size_t m_jaegerCodeBytes;
|
|
||||||
size_t m_ionCodeBytes;
|
size_t m_ionCodeBytes;
|
||||||
size_t m_baselineCodeBytes;
|
size_t m_baselineCodeBytes;
|
||||||
size_t m_asmJSCodeBytes;
|
size_t m_asmJSCodeBytes;
|
||||||
|
@ -136,7 +135,7 @@ public:
|
||||||
|
|
||||||
ExecutablePool(ExecutableAllocator* allocator, Allocation a)
|
ExecutablePool(ExecutableAllocator* allocator, Allocation a)
|
||||||
: m_allocator(allocator), m_freePtr(a.pages), m_end(m_freePtr + a.size), m_allocation(a),
|
: m_allocator(allocator), m_freePtr(a.pages), m_end(m_freePtr + a.size), m_allocation(a),
|
||||||
m_refCount(1), m_jaegerCodeBytes(0), m_ionCodeBytes(0), m_baselineCodeBytes(0),
|
m_refCount(1), m_ionCodeBytes(0), m_baselineCodeBytes(0),
|
||||||
m_asmJSCodeBytes(0), m_regexpCodeBytes(0), m_otherCodeBytes(0),
|
m_asmJSCodeBytes(0), m_regexpCodeBytes(0), m_otherCodeBytes(0),
|
||||||
m_destroy(false), m_gcNumber(0)
|
m_destroy(false), m_gcNumber(0)
|
||||||
{ }
|
{ }
|
||||||
|
@ -160,7 +159,6 @@ private:
|
||||||
m_freePtr += n;
|
m_freePtr += n;
|
||||||
|
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case JAEGER_CODE: m_jaegerCodeBytes += n; break;
|
|
||||||
case ION_CODE: m_ionCodeBytes += n; break;
|
case ION_CODE: m_ionCodeBytes += n; break;
|
||||||
case BASELINE_CODE: m_baselineCodeBytes += n; break;
|
case BASELINE_CODE: m_baselineCodeBytes += n; break;
|
||||||
case ASMJS_CODE: m_asmJSCodeBytes += n; break;
|
case ASMJS_CODE: m_asmJSCodeBytes += n; break;
|
||||||
|
|
|
@ -3,7 +3,6 @@ gczeal(4);
|
||||||
var optionNames = options().split(',');
|
var optionNames = options().split(',');
|
||||||
for (var i = 0; i < optionNames.length; i++)
|
for (var i = 0; i < optionNames.length; i++)
|
||||||
var optionName = optionNames[i];
|
var optionName = optionNames[i];
|
||||||
options(optionName);
|
|
||||||
evaluate("\
|
evaluate("\
|
||||||
function addDebug(g, id) {\
|
function addDebug(g, id) {\
|
||||||
var debuggerGlobal = newGlobal('new-compartment');\
|
var debuggerGlobal = newGlobal('new-compartment');\
|
||||||
|
|
|
@ -242,10 +242,6 @@ BEGIN_TEST(testDebugger_singleStepThrow)
|
||||||
CHECK(JS_SetDebugModeForCompartment(cx, cx->compartment, true));
|
CHECK(JS_SetDebugModeForCompartment(cx, cx->compartment, true));
|
||||||
CHECK(JS_SetInterrupt(rt, onStep, NULL));
|
CHECK(JS_SetInterrupt(rt, onStep, NULL));
|
||||||
|
|
||||||
uint32_t opts = JS_GetOptions(cx);
|
|
||||||
opts |= JSOPTION_METHODJIT | JSOPTION_METHODJIT_ALWAYS;
|
|
||||||
JS_SetOptions(cx, opts);
|
|
||||||
|
|
||||||
CHECK(JS_DefineFunction(cx, global, "setStepMode", setStepMode, 0, 0));
|
CHECK(JS_DefineFunction(cx, global, "setStepMode", setStepMode, 0, 0));
|
||||||
EXEC("var e;\n"
|
EXEC("var e;\n"
|
||||||
"setStepMode();\n"
|
"setStepMode();\n"
|
||||||
|
|
|
@ -136,7 +136,7 @@ JSContext *createContext()
|
||||||
{
|
{
|
||||||
JSContext *cx = JSAPITest::createContext();
|
JSContext *cx = JSAPITest::createContext();
|
||||||
if (cx)
|
if (cx)
|
||||||
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_METHODJIT | JSOPTION_PCCOUNT);
|
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_BASELINE | JSOPTION_ION | JSOPTION_PCCOUNT);
|
||||||
return cx;
|
return cx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,8 +142,7 @@ END_TEST(testProfileStrings_isCalledWithInterpreter)
|
||||||
BEGIN_TEST(testProfileStrings_isCalledWithJIT)
|
BEGIN_TEST(testProfileStrings_isCalledWithJIT)
|
||||||
{
|
{
|
||||||
CHECK(initialize(cx));
|
CHECK(initialize(cx));
|
||||||
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_METHODJIT |
|
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_BASELINE | JSOPTION_ION);
|
||||||
JSOPTION_METHODJIT_ALWAYS);
|
|
||||||
|
|
||||||
EXEC("function g() { var p = new Prof(); p.test_fn(); }");
|
EXEC("function g() { var p = new Prof(); p.test_fn(); }");
|
||||||
EXEC("function f() { g(); }");
|
EXEC("function f() { g(); }");
|
||||||
|
@ -191,7 +190,7 @@ END_TEST(testProfileStrings_isCalledWithJIT)
|
||||||
BEGIN_TEST(testProfileStrings_isCalledWhenError)
|
BEGIN_TEST(testProfileStrings_isCalledWhenError)
|
||||||
{
|
{
|
||||||
CHECK(initialize(cx));
|
CHECK(initialize(cx));
|
||||||
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_METHODJIT | JSOPTION_METHODJIT_ALWAYS);
|
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_BASELINE | JSOPTION_ION);
|
||||||
|
|
||||||
EXEC("function check2() { throw 'a'; }");
|
EXEC("function check2() { throw 'a'; }");
|
||||||
|
|
||||||
|
@ -214,7 +213,7 @@ END_TEST(testProfileStrings_isCalledWhenError)
|
||||||
BEGIN_TEST(testProfileStrings_worksWhenEnabledOnTheFly)
|
BEGIN_TEST(testProfileStrings_worksWhenEnabledOnTheFly)
|
||||||
{
|
{
|
||||||
CHECK(initialize(cx));
|
CHECK(initialize(cx));
|
||||||
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_METHODJIT | JSOPTION_METHODJIT_ALWAYS);
|
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_BASELINE | JSOPTION_ION);
|
||||||
|
|
||||||
EXEC("function b(p) { p.test_fn(); }");
|
EXEC("function b(p) { p.test_fn(); }");
|
||||||
EXEC("function a() { var p = new Prof(); p.enable(); b(p); }");
|
EXEC("function a() { var p = new Prof(); p.enable(); b(p); }");
|
||||||
|
|
|
@ -1945,26 +1945,21 @@ JS_StringToVersion(const char *string);
|
||||||
leaving that up to the
|
leaving that up to the
|
||||||
embedding. */
|
embedding. */
|
||||||
|
|
||||||
#define JSOPTION_METHODJIT JS_BIT(14) /* Whole-method JIT. */
|
#define JSOPTION_BASELINE JS_BIT(14) /* Baseline compiler. */
|
||||||
|
|
||||||
#define JSOPTION_BASELINE JS_BIT(15) /* Baseline compiler. */
|
#define JSOPTION_PCCOUNT JS_BIT(15) /* Collect per-op execution counts */
|
||||||
|
|
||||||
#define JSOPTION_METHODJIT_ALWAYS \
|
#define JSOPTION_TYPE_INFERENCE JS_BIT(16) /* Perform type inference. */
|
||||||
JS_BIT(16) /* Always whole-method JIT,
|
#define JSOPTION_STRICT_MODE JS_BIT(17) /* Provides a way to force
|
||||||
don't tune at run-time. */
|
|
||||||
#define JSOPTION_PCCOUNT JS_BIT(17) /* Collect per-op execution counts */
|
|
||||||
|
|
||||||
#define JSOPTION_TYPE_INFERENCE JS_BIT(18) /* Perform type inference. */
|
|
||||||
#define JSOPTION_STRICT_MODE JS_BIT(19) /* Provides a way to force
|
|
||||||
strict mode for all code
|
strict mode for all code
|
||||||
without requiring
|
without requiring
|
||||||
"use strict" annotations. */
|
"use strict" annotations. */
|
||||||
|
|
||||||
#define JSOPTION_ION JS_BIT(20) /* IonMonkey */
|
#define JSOPTION_ION JS_BIT(18) /* IonMonkey */
|
||||||
|
|
||||||
#define JSOPTION_ASMJS JS_BIT(21) /* optimizingasm.js compiler */
|
#define JSOPTION_ASMJS JS_BIT(19) /* optimizingasm.js compiler */
|
||||||
|
|
||||||
#define JSOPTION_MASK JS_BITMASK(22)
|
#define JSOPTION_MASK JS_BITMASK(20)
|
||||||
|
|
||||||
extern JS_PUBLIC_API(uint32_t)
|
extern JS_PUBLIC_API(uint32_t)
|
||||||
JS_GetOptions(JSContext *cx);
|
JS_GetOptions(JSContext *cx);
|
||||||
|
|
|
@ -2437,12 +2437,10 @@ TypeZone::init(JSContext *cx)
|
||||||
!cx->hasOption(JSOPTION_TYPE_INFERENCE) ||
|
!cx->hasOption(JSOPTION_TYPE_INFERENCE) ||
|
||||||
!cx->runtime->jitSupportsFloatingPoint)
|
!cx->runtime->jitSupportsFloatingPoint)
|
||||||
{
|
{
|
||||||
jaegerCompilationAllowed = true;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
inferenceEnabled = true;
|
inferenceEnabled = true;
|
||||||
jaegerCompilationAllowed = cx->hasOption(JSOPTION_METHODJIT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeObject *
|
TypeObject *
|
||||||
|
|
|
@ -1469,13 +1469,6 @@ struct TypeZone
|
||||||
/* Whether type inference is enabled in this compartment. */
|
/* Whether type inference is enabled in this compartment. */
|
||||||
bool inferenceEnabled;
|
bool inferenceEnabled;
|
||||||
|
|
||||||
/*
|
|
||||||
* JM compilation is allowed only if script analysis has been used to
|
|
||||||
* monitor the behavior of all scripts in this zone since its creation.
|
|
||||||
* OSR in JM requires this property.
|
|
||||||
*/
|
|
||||||
bool jaegerCompilationAllowed;
|
|
||||||
|
|
||||||
TypeZone(JS::Zone *zone);
|
TypeZone(JS::Zone *zone);
|
||||||
~TypeZone();
|
~TypeZone();
|
||||||
void init(JSContext *cx);
|
void init(JSContext *cx);
|
||||||
|
|
|
@ -1072,18 +1072,12 @@ TypeScript::SetThis(JSContext *cx, JSScript *script, Type type)
|
||||||
return;
|
return;
|
||||||
JS_ASSERT(script->types);
|
JS_ASSERT(script->types);
|
||||||
|
|
||||||
/* Analyze the script regardless if -a was used. */
|
if (!ThisTypes(script)->hasType(type)) {
|
||||||
bool analyze = cx->hasOption(JSOPTION_METHODJIT_ALWAYS);
|
|
||||||
|
|
||||||
if (!ThisTypes(script)->hasType(type) || analyze) {
|
|
||||||
AutoEnterAnalysis enter(cx);
|
AutoEnterAnalysis enter(cx);
|
||||||
|
|
||||||
InferSpew(ISpewOps, "externalType: setThis #%u: %s",
|
InferSpew(ISpewOps, "externalType: setThis #%u: %s",
|
||||||
script->id(), TypeString(type));
|
script->id(), TypeString(type));
|
||||||
ThisTypes(script)->addType(cx, type);
|
ThisTypes(script)->addType(cx, type);
|
||||||
|
|
||||||
if (analyze)
|
|
||||||
script->ensureRanInference(cx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,6 @@ static double gTimeoutInterval = -1.0;
|
||||||
static volatile bool gTimedOut = false;
|
static volatile bool gTimedOut = false;
|
||||||
static JS::Value gTimeoutFunc;
|
static JS::Value gTimeoutFunc;
|
||||||
|
|
||||||
static bool enableMethodJit = true;
|
|
||||||
static bool enableTypeInference = true;
|
static bool enableTypeInference = true;
|
||||||
static bool enableDisassemblyDumps = false;
|
static bool enableDisassemblyDumps = false;
|
||||||
static bool enableIon = true;
|
static bool enableIon = true;
|
||||||
|
@ -600,8 +599,6 @@ static const struct JSOption {
|
||||||
const char *name;
|
const char *name;
|
||||||
uint32_t flag;
|
uint32_t flag;
|
||||||
} js_options[] = {
|
} js_options[] = {
|
||||||
{"methodjit", JSOPTION_METHODJIT},
|
|
||||||
{"methodjit_always",JSOPTION_METHODJIT_ALWAYS},
|
|
||||||
{"strict", JSOPTION_STRICT},
|
{"strict", JSOPTION_STRICT},
|
||||||
{"typeinfer", JSOPTION_TYPE_INFERENCE},
|
{"typeinfer", JSOPTION_TYPE_INFERENCE},
|
||||||
{"werror", JSOPTION_WERROR},
|
{"werror", JSOPTION_WERROR},
|
||||||
|
@ -4775,8 +4772,6 @@ NewContext(JSRuntime *rt)
|
||||||
JS_SetErrorReporter(cx, my_ErrorReporter);
|
JS_SetErrorReporter(cx, my_ErrorReporter);
|
||||||
JS_SetVersion(cx, JSVERSION_LATEST);
|
JS_SetVersion(cx, JSVERSION_LATEST);
|
||||||
SetContextOptions(cx);
|
SetContextOptions(cx);
|
||||||
if (enableMethodJit)
|
|
||||||
JS_ToggleOptions(cx, JSOPTION_METHODJIT);
|
|
||||||
if (enableTypeInference)
|
if (enableTypeInference)
|
||||||
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
|
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
|
||||||
if (enableIon)
|
if (enableIon)
|
||||||
|
@ -4926,9 +4921,6 @@ ProcessArgs(JSContext *cx, JSObject *obj_, OptionParser *op)
|
||||||
{
|
{
|
||||||
RootedObject obj(cx, obj_);
|
RootedObject obj(cx, obj_);
|
||||||
|
|
||||||
if (op->getBoolOption('a'))
|
|
||||||
JS_ToggleOptions(cx, JSOPTION_METHODJIT_ALWAYS);
|
|
||||||
|
|
||||||
if (op->getBoolOption('c'))
|
if (op->getBoolOption('c'))
|
||||||
compileOnly = true;
|
compileOnly = true;
|
||||||
|
|
||||||
|
@ -5129,17 +5121,13 @@ Shell(JSContext *cx, OptionParser *op, char **envp)
|
||||||
JSAutoRequest ar(cx);
|
JSAutoRequest ar(cx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First check to see if type inference and JM are enabled. These flags
|
* First check to see if type inference is enabled. These flags
|
||||||
* must be set on the compartment when it is constructed.
|
* must be set on the compartment when it is constructed.
|
||||||
*/
|
*/
|
||||||
if (op->getBoolOption("no-ti")) {
|
if (op->getBoolOption("no-ti")) {
|
||||||
enableTypeInference = false;
|
enableTypeInference = false;
|
||||||
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
|
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
|
||||||
}
|
}
|
||||||
if (op->getBoolOption("no-jm")) {
|
|
||||||
enableMethodJit = false;
|
|
||||||
JS_ToggleOptions(cx, JSOPTION_METHODJIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
RootedObject glob(cx);
|
RootedObject glob(cx);
|
||||||
glob = NewGlobalObject(cx, NULL);
|
glob = NewGlobalObject(cx, NULL);
|
||||||
|
@ -5248,8 +5236,8 @@ main(int argc, char **argv, char **envp)
|
||||||
if (!op.addMultiStringOption('f', "file", "PATH", "File path to run")
|
if (!op.addMultiStringOption('f', "file", "PATH", "File path to run")
|
||||||
|| !op.addMultiStringOption('e', "execute", "CODE", "Inline code to run")
|
|| !op.addMultiStringOption('e', "execute", "CODE", "Inline code to run")
|
||||||
|| !op.addBoolOption('i', "shell", "Enter prompt after running code")
|
|| !op.addBoolOption('i', "shell", "Enter prompt after running code")
|
||||||
|| !op.addBoolOption('m', "jm", "Enable the JaegerMonkey method JIT (default)")
|
|| !op.addBoolOption('m', "jm", "No-op (still used by fuzzers)")
|
||||||
|| !op.addBoolOption('\0', "no-jm", "Disable the JaegerMonkey method JIT")
|
|| !op.addBoolOption('\0', "no-jm", "No-op (still used by fuzzers)")
|
||||||
|| !op.addBoolOption('n', "ti", "Enable type inference (default)")
|
|| !op.addBoolOption('n', "ti", "Enable type inference (default)")
|
||||||
|| !op.addBoolOption('\0', "no-ti", "Disable type inference")
|
|| !op.addBoolOption('\0', "no-ti", "Disable type inference")
|
||||||
|| !op.addBoolOption('c', "compileonly", "Only compile, don't run (syntax checking mode)")
|
|| !op.addBoolOption('c', "compileonly", "Only compile, don't run (syntax checking mode)")
|
||||||
|
@ -5257,8 +5245,7 @@ main(int argc, char **argv, char **envp)
|
||||||
|| !op.addBoolOption('W', "nowarnings", "Don't emit warnings")
|
|| !op.addBoolOption('W', "nowarnings", "Don't emit warnings")
|
||||||
|| !op.addBoolOption('s', "strict", "Check strictness")
|
|| !op.addBoolOption('s', "strict", "Check strictness")
|
||||||
|| !op.addBoolOption('d', "debugjit", "Enable runtime debug mode for method JIT code")
|
|| !op.addBoolOption('d', "debugjit", "Enable runtime debug mode for method JIT code")
|
||||||
|| !op.addBoolOption('a', "always-mjit",
|
|| !op.addBoolOption('a', "always-mjit", "No-op (still used by fuzzers)")
|
||||||
"Do not try to run in the interpreter before method jitting.")
|
|
||||||
|| !op.addBoolOption('D', "dump-bytecode", "Dump bytecode with exec count for all scripts")
|
|| !op.addBoolOption('D', "dump-bytecode", "Dump bytecode with exec count for all scripts")
|
||||||
|| !op.addBoolOption('b', "print-timing", "Print sub-ms runtime for each file that's run")
|
|| !op.addBoolOption('b', "print-timing", "Print sub-ms runtime for each file that's run")
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -237,8 +237,6 @@ function optionsInit() {
|
||||||
options.currvalues = {
|
options.currvalues = {
|
||||||
strict: true,
|
strict: true,
|
||||||
werror: true,
|
werror: true,
|
||||||
methodjit: true,
|
|
||||||
methodjit_always: true,
|
|
||||||
strict_mode: true
|
strict_mode: true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ interface ScheduledGCCallback : nsISupports
|
||||||
/**
|
/**
|
||||||
* interface of Components.utils
|
* interface of Components.utils
|
||||||
*/
|
*/
|
||||||
[scriptable, uuid(623d354d-6eab-4cf6-8c08-2cde5869d439)]
|
[scriptable, uuid(fdd32d38-9341-4067-9000-d781075a60c9)]
|
||||||
interface nsIXPCComponents_Utils : nsISupports
|
interface nsIXPCComponents_Utils : nsISupports
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -382,12 +382,6 @@ interface nsIXPCComponents_Utils : nsISupports
|
||||||
[implicit_jscontext]
|
[implicit_jscontext]
|
||||||
attribute boolean werror;
|
attribute boolean werror;
|
||||||
|
|
||||||
[implicit_jscontext]
|
|
||||||
attribute boolean methodjit;
|
|
||||||
|
|
||||||
[implicit_jscontext]
|
|
||||||
attribute boolean methodjit_always;
|
|
||||||
|
|
||||||
[implicit_jscontext]
|
[implicit_jscontext]
|
||||||
attribute boolean strict_mode;
|
attribute boolean strict_mode;
|
||||||
|
|
||||||
|
|
|
@ -1151,9 +1151,6 @@ ProcessArgsForCompartment(JSContext *cx, char **argv, int argc)
|
||||||
case 's':
|
case 's':
|
||||||
JS_ToggleOptions(cx, JSOPTION_STRICT);
|
JS_ToggleOptions(cx, JSOPTION_STRICT);
|
||||||
break;
|
break;
|
||||||
case 'm':
|
|
||||||
JS_ToggleOptions(cx, JSOPTION_METHODJIT);
|
|
||||||
break;
|
|
||||||
case 'I':
|
case 'I':
|
||||||
JS_ToggleOptions(cx, JSOPTION_COMPILE_N_GO);
|
JS_ToggleOptions(cx, JSOPTION_COMPILE_N_GO);
|
||||||
JS_ToggleOptions(cx, JSOPTION_ION);
|
JS_ToggleOptions(cx, JSOPTION_ION);
|
||||||
|
|
|
@ -4505,8 +4505,6 @@ SetBoolOption(JSContext* cx, uint32_t aOption, bool aValue)
|
||||||
|
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Strict, JSOPTION_STRICT)
|
GENERATE_JSOPTION_GETTER_SETTER(Strict, JSOPTION_STRICT)
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Werror, JSOPTION_WERROR)
|
GENERATE_JSOPTION_GETTER_SETTER(Werror, JSOPTION_WERROR)
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Methodjit, JSOPTION_METHODJIT)
|
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Methodjit_always, JSOPTION_METHODJIT_ALWAYS)
|
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Strict_mode, JSOPTION_STRICT_MODE)
|
GENERATE_JSOPTION_GETTER_SETTER(Strict_mode, JSOPTION_STRICT_MODE)
|
||||||
GENERATE_JSOPTION_GETTER_SETTER(Ion, JSOPTION_ION)
|
GENERATE_JSOPTION_GETTER_SETTER(Ion, JSOPTION_ION)
|
||||||
|
|
||||||
|
|
|
@ -1872,11 +1872,6 @@ ReportCompartmentStats(const JS::CompartmentStats &cStats,
|
||||||
cStats.scriptData,
|
cStats.scriptData,
|
||||||
"Memory allocated for various variable-length tables in JSScript.");
|
"Memory allocated for various variable-length tables in JSScript.");
|
||||||
|
|
||||||
ZCREPORT_BYTES(cJSPathPrefix + NS_LITERAL_CSTRING("jaeger-data"),
|
|
||||||
cStats.jaegerData,
|
|
||||||
"Memory used by the JaegerMonkey JIT for compilation data: "
|
|
||||||
"JITScripts, native maps, and inline cache structs.");
|
|
||||||
|
|
||||||
ZCREPORT_BYTES(cJSPathPrefix + NS_LITERAL_CSTRING("baseline/data"),
|
ZCREPORT_BYTES(cJSPathPrefix + NS_LITERAL_CSTRING("baseline/data"),
|
||||||
cStats.baselineData,
|
cStats.baselineData,
|
||||||
"Memory used by the Baseline JIT for compilation data: "
|
"Memory used by the Baseline JIT for compilation data: "
|
||||||
|
@ -2020,10 +2015,6 @@ ReportJSRuntimeExplicitTreeStats(const JS::RuntimeStats &rtStats,
|
||||||
"Memory held transiently in JSRuntime and used during "
|
"Memory held transiently in JSRuntime and used during "
|
||||||
"compilation. It mostly holds parse nodes.");
|
"compilation. It mostly holds parse nodes.");
|
||||||
|
|
||||||
RREPORT_BYTES(rtPath + NS_LITERAL_CSTRING("runtime/code/jaeger"),
|
|
||||||
nsIMemoryReporter::KIND_NONHEAP, rtStats.runtime.code.jaeger,
|
|
||||||
"Memory used by the JaegerMonkey JIT to hold generated code.");
|
|
||||||
|
|
||||||
RREPORT_BYTES(rtPath + NS_LITERAL_CSTRING("runtime/code/ion"),
|
RREPORT_BYTES(rtPath + NS_LITERAL_CSTRING("runtime/code/ion"),
|
||||||
nsIMemoryReporter::KIND_NONHEAP, rtStats.runtime.code.ion,
|
nsIMemoryReporter::KIND_NONHEAP, rtStats.runtime.code.ion,
|
||||||
"Memory used by the IonMonkey JIT to hold generated code.");
|
"Memory used by the IonMonkey JIT to hold generated code.");
|
||||||
|
|
|
@ -780,8 +780,6 @@ pref("javascript.options.strict", false);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
pref("javascript.options.strict.debug", true);
|
pref("javascript.options.strict.debug", true);
|
||||||
#endif
|
#endif
|
||||||
pref("javascript.options.methodjit.content", false);
|
|
||||||
pref("javascript.options.methodjit.chrome", false);
|
|
||||||
pref("javascript.options.baselinejit.content", true);
|
pref("javascript.options.baselinejit.content", true);
|
||||||
pref("javascript.options.baselinejit.chrome", true);
|
pref("javascript.options.baselinejit.chrome", true);
|
||||||
pref("javascript.options.ion.content", true);
|
pref("javascript.options.ion.content", true);
|
||||||
|
@ -789,7 +787,6 @@ pref("javascript.options.asmjs", true);
|
||||||
pref("javascript.options.ion.parallel_compilation", true);
|
pref("javascript.options.ion.parallel_compilation", true);
|
||||||
pref("javascript.options.pccounts.content", false);
|
pref("javascript.options.pccounts.content", false);
|
||||||
pref("javascript.options.pccounts.chrome", false);
|
pref("javascript.options.pccounts.chrome", false);
|
||||||
pref("javascript.options.methodjit_always", false);
|
|
||||||
pref("javascript.options.jit_hardening", true);
|
pref("javascript.options.jit_hardening", true);
|
||||||
pref("javascript.options.typeinference", true);
|
pref("javascript.options.typeinference", true);
|
||||||
// This preference limits the memory usage of javascript.
|
// This preference limits the memory usage of javascript.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче