// Copyright 2017 The Chromium Authors. All rights reserved.
// 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.
const base::Feature kV8CompactCodeSpaceWithStack{
    "V8CompactCodeSpaceWithStack", base::FEATURE_ENABLED_BY_DEFAULT};

// Enable compaction when finalizing a full GC with stack.
const base::Feature kV8CompactWithStack{"V8CompactWithStack",
                                        base::FEATURE_ENABLED_BY_DEFAULT};

// Enables compaction of maps in a full GC.
const base::Feature kV8CompactMaps{"V8CompactMaps",
                                   base::FEATURE_DISABLED_BY_DEFAULT};

// Crashes on evacuation failures in a full GC instead of aborting evacuation.
const base::Feature kV8CrashOnEvacuationFailure{
    "V8CrashOnEvacuationFailure", base::FEATURE_DISABLED_BY_DEFAULT};

// Enables a separate heap space for all map objects.
const base::Feature kV8UseMapSpace{"V8UseMapSpace",
                                   base::FEATURE_ENABLED_BY_DEFAULT};

// Enables optimization of JavaScript in V8.
const base::Feature kV8OptimizeJavascript{"V8OptimizeJavascript",
                                          base::FEATURE_ENABLED_BY_DEFAULT};

// Enables flushing of JS bytecode in V8.
const base::Feature kV8FlushBytecode{"V8FlushBytecode",
                                     base::FEATURE_ENABLED_BY_DEFAULT};

// Enables flushing of baseline code in V8.
const base::Feature kV8FlushBaselineCode{"V8FlushBaselineCode",
                                         base::FEATURE_DISABLED_BY_DEFAULT};

// Enables finalizing streaming JS compilations on a background thread.
const base::Feature kV8OffThreadFinalization{"V8OffThreadFinalization",
                                             base::FEATURE_ENABLED_BY_DEFAULT};

// Enables lazy feedback allocation in V8.
const base::Feature kV8LazyFeedbackAllocation{"V8LazyFeedbackAllocation",
                                              base::FEATURE_ENABLED_BY_DEFAULT};

// Enables per-context marking worklists in V8 GC.
const base::Feature kV8PerContextMarkingWorklist{
    "V8PerContextMarkingWorklist", base::FEATURE_DISABLED_BY_DEFAULT};

// Enables flushing of the instruction cache for the embedded blob.
const base::Feature kV8FlushEmbeddedBlobICache{
    "V8FlushEmbeddedBlobICache", base::FEATURE_DISABLED_BY_DEFAULT};

// Enables reduced number of concurrent marking tasks.
const base::Feature kV8ReduceConcurrentMarkingTasks{
    "V8ReduceConcurrentMarkingTasks", base::FEATURE_DISABLED_BY_DEFAULT};

// Disables reclaiming of unmodified wrappers objects.
const 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.
const base::Feature kV8CodeMemoryWriteProtection{
    "V8CodeMemoryWriteProtection", base::FEATURE_ENABLED_BY_DEFAULT};

// Enables fallback to a breadth-first regexp engine on excessive backtracking.
const base::Feature kV8ExperimentalRegexpEngine{
    "V8ExperimentalRegexpEngine", base::FEATURE_ENABLED_BY_DEFAULT};

// Enables experimental Turboprop compiler.
const base::Feature kV8Turboprop{"V8Turboprop",
                                 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.
const base::Feature kV8Sparkplug{"V8Sparkplug",
                                 base::FEATURE_ENABLED_BY_DEFAULT};

// Enables the concurrent Sparkplug compiler.
const base::Feature kV8ConcurrentSparkplug{"V8ConcurrentSparkplug",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
const base::FeatureParam<int> kV8ConcurrentSparkplugMaxThreads{
    &kV8ConcurrentSparkplug, "V8ConcurrentSparkplugMaxThreads", 0};

// Makes sure the experimental Sparkplug compiler is only enabled if short
// builtin calls are enabled too.
const base::Feature kV8SparkplugNeedsShortBuiltinCalls{
    "V8SparkplugNeedsShortBuiltinCalls", base::FEATURE_DISABLED_BY_DEFAULT};

// Enables short builtin calls feature.
const base::Feature kV8ShortBuiltinCalls{"V8ShortBuiltinCalls",
                                         base::FEATURE_ENABLED_BY_DEFAULT};

// Enables fast API calls in TurboFan.
const base::Feature kV8TurboFastApiCalls{"V8TurboFastApiCalls",
                                         base::FEATURE_ENABLED_BY_DEFAULT};

// Artificially delays script execution.
const base::Feature kV8ScriptAblation{"V8ScriptAblation",
                                      base::FEATURE_DISABLED_BY_DEFAULT};
const base::FeatureParam<int> kV8ScriptDelayOnceMs{&kV8ScriptAblation,
                                                   "V8ScriptDelayOnceMs", 0};
const base::FeatureParam<int> kV8ScriptDelayMs{&kV8ScriptAblation,
                                               "V8ScriptDelayMs", 0};
const base::FeatureParam<double> kV8ScriptDelayFraction{
    &kV8ScriptAblation, "V8ScriptDelayFraction", 0.0};

// Enables slow histograms that provide detailed information at increased
// runtime overheads.
const 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.
const base::Feature kV8SlowHistogramsCodeMemoryWriteProtection{
    "V8SlowHistogramsCodeMemoryWriteProtection",
    base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kV8SlowHistogramsSparkplug{
    "V8SlowHistogramsSparkplug", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kV8SlowHistogramsSparkplugAndroid{
    "V8SlowHistogramsSparkplugAndroid", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kV8SlowHistogramsScriptAblation{
    "V8SlowHistogramsScriptAblation", base::FEATURE_DISABLED_BY_DEFAULT};

// Enables the experimental V8 sandbox. This is called V8VirtualMemoryCage
// instead of V8Sandbox for historical reasons.
// TODO(1218005) remove this once the finch trial has ended.
const base::Feature kV8VirtualMemoryCage{"V8VirtualMemoryCage",
                                         base::FEATURE_DISABLED_BY_DEFAULT};

}  // namespace features
