blob: fef95f01eed700b05ced1a22b51cabfff07ba55b [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "gin/gin_features.h"
#include "base/metrics/field_trial_params.h"
namespace features {
// Enable code space compaction when finalizing a full GC with stack.
BASE_FEATURE(kV8CompactCodeSpaceWithStack,
"V8CompactCodeSpaceWithStack",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable compaction when finalizing a full GC with stack.
BASE_FEATURE(kV8CompactWithStack,
"V8CompactWithStack",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables optimization of JavaScript in V8.
BASE_FEATURE(kV8OptimizeJavascript,
"V8OptimizeJavascript",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables flushing of JS bytecode in V8.
BASE_FEATURE(kV8FlushBytecode,
"V8FlushBytecode",
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<int> kV8FlushBytecodeOldAge{
&kV8FlushBytecode, "V8FlushBytecodeOldAge", 5};
// Enables flushing of baseline code in V8.
BASE_FEATURE(kV8FlushBaselineCode,
"V8FlushBaselineCode",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables finalizing streaming JS compilations on a background thread.
BASE_FEATURE(kV8OffThreadFinalization,
"V8OffThreadFinalization",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables lazy feedback allocation in V8.
BASE_FEATURE(kV8LazyFeedbackAllocation,
"V8LazyFeedbackAllocation",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables per-context marking worklists in V8 GC.
BASE_FEATURE(kV8PerContextMarkingWorklist,
"V8PerContextMarkingWorklist",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables flushing of the instruction cache for the embedded blob.
BASE_FEATURE(kV8FlushEmbeddedBlobICache,
"V8FlushEmbeddedBlobICache",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables reduced number of concurrent marking tasks.
BASE_FEATURE(kV8ReduceConcurrentMarkingTasks,
"V8ReduceConcurrentMarkingTasks",
base::FEATURE_DISABLED_BY_DEFAULT);
// Disables reclaiming of unmodified wrappers objects.
BASE_FEATURE(kV8NoReclaimUnmodifiedWrappers,
"V8NoReclaimUnmodifiedWrappers",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables W^X code memory protection in V8.
// This is enabled in V8 by default. To test the performance impact, we are
// going to disable this feature in a finch experiment.
BASE_FEATURE(kV8CodeMemoryWriteProtection,
"V8CodeMemoryWriteProtection",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables fallback to a breadth-first regexp engine on excessive backtracking.
BASE_FEATURE(kV8ExperimentalRegexpEngine,
"V8ExperimentalRegexpEngine",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the Turbofan compiler.
BASE_FEATURE(kV8Turbofan, "V8Turbofan", base::FEATURE_ENABLED_BY_DEFAULT);
// Enables experimental Maglev compiler.
BASE_FEATURE(kV8Maglev, "V8Maglev", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables MinorMC young generation garbage collector.
BASE_FEATURE(kV8MinorMC, "V8MinorMC", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables Sparkplug compiler. Note that this only sets the V8 flag when
// manually overridden; otherwise it defers to whatever the V8 default is.
BASE_FEATURE(kV8Sparkplug, "V8Sparkplug", base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the concurrent Sparkplug compiler.
BASE_FEATURE(kV8ConcurrentSparkplug,
"V8ConcurrentSparkplug",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<int> kV8ConcurrentSparkplugMaxThreads{
&kV8ConcurrentSparkplug, "V8ConcurrentSparkplugMaxThreads", 0};
BASE_FEATURE(kV8ConcurrentSparkplugHighPriorityThreads,
"V8ConcurrentSparkplugHighPriorityThreads",
base::FEATURE_DISABLED_BY_DEFAULT);
// Makes sure the experimental Sparkplug compiler is only enabled if short
// builtin calls are enabled too.
BASE_FEATURE(kV8SparkplugNeedsShortBuiltinCalls,
"V8SparkplugNeedsShortBuiltinCalls",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables short builtin calls feature.
BASE_FEATURE(kV8ShortBuiltinCalls,
"V8ShortBuiltinCalls",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables fast API calls in TurboFan.
BASE_FEATURE(kV8TurboFastApiCalls,
"V8TurboFastApiCalls",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables faster DOM methods for megamorphic ICs
BASE_FEATURE(kV8MegaDomIC, "V8MegaDomIC", base::FEATURE_DISABLED_BY_DEFAULT);
// Schedules a single MemoryReducer GC.
BASE_FEATURE(kV8MemoryReducerSingleGC,
"V8MemoryReducerSingleGC",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables slow histograms that provide detailed information at increased
// runtime overheads.
BASE_FEATURE(kV8SlowHistograms,
"V8SlowHistograms",
base::FEATURE_DISABLED_BY_DEFAULT);
// Multiple finch experiments might use slow-histograms. We introduce
// separate feature flags to circumvent finch limitations.
BASE_FEATURE(kV8SlowHistogramsCodeMemoryWriteProtection,
"V8SlowHistogramsCodeMemoryWriteProtection",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kV8SlowHistogramsSparkplug,
"V8SlowHistogramsSparkplug",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kV8SlowHistogramsSparkplugAndroid,
"V8SlowHistogramsSparkplugAndroid",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kV8SlowHistogramsNoTurbofan,
"V8SlowHistogramsNoTurbofan",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kV8DelayMemoryReducer,
"V8DelayMemoryReducer",
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kV8MemoryReducerStartDelay{
&kV8DelayMemoryReducer, "delay", base::Seconds(30)};
BASE_FEATURE(kV8UseLibmTrigFunctions,
"V8UseLibmTrigFunctions",
base::FEATURE_ENABLED_BY_DEFAULT);
// Elide redundant TDZ hole checks in bytecode. This only sets the V8 flag when
// manually overridden.
BASE_FEATURE(kV8IgnitionElideRedundantTdzChecks,
"V8IgnitionElideRedundantTdzChecks",
base::FEATURE_ENABLED_BY_DEFAULT);
// JavaScript language features.
// Enables the Symbols-as-WeakMap-keys proposal.
BASE_FEATURE(kJavaScriptSymbolAsWeakMapKey,
"JavaScriptSymbolAsWeakMapKey",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the change-Array-by-copy proposal.
BASE_FEATURE(kJavaScriptChangeArrayByCopy,
"JavaScriptChangeArrayByCopy",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the Resizable ArrayBuffer proposal.
BASE_FEATURE(kJavaScriptRabGsab,
"JavaScriptRabGsab",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the well-formed JavaScript strings proposal.
BASE_FEATURE(kJavaScriptStringIsWellFormed,
"JavaScriptStringIsWellFormed",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the JavaScript RegExp Unicode set notation proposal.
BASE_FEATURE(kJavaScriptRegExpUnicodeSets,
"JavaScriptRegExpUnicodeSets",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the JSON.parse with source proposal.
BASE_FEATURE(kJavaScriptJsonParseWithSource,
"JavaScriptJsonParseWithSource",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the ArrayBuffer transfer proposal.
BASE_FEATURE(kJavaScriptArrayBufferTransfer,
"JavaScriptArrayBufferTransfer",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the experiment with compile hints as magic comments.
BASE_FEATURE(kJavaScriptCompileHintsMagic,
"JavaScriptCompileHintsMagic",
base::FEATURE_DISABLED_BY_DEFAULT);
// WebAssembly features.
// Enable support for the WebAssembly tail-call proposal:
// https://github.com/WebAssembly/tail-call.
BASE_FEATURE(kWebAssemblyTailCall,
"WebAssemblyTailCall",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable WebAssembly inlining (not user visible).
BASE_FEATURE(kWebAssemblyInlining,
"WebAssemblyInlining",
base::FEATURE_DISABLED_BY_DEFAULT);
} // namespace features