diff --git a/gin/BUILD.gn b/gin/BUILD.gn index 2684e608fcbece..0301ac24a15389 100644 --- a/gin/BUILD.gn +++ b/gin/BUILD.gn @@ -25,6 +25,8 @@ component("gin") { "function_template.cc", "function_template.h", "gin_export.h", + "gin_features.cc", + "gin_features.h", "handle.h", "interceptor.cc", "interceptor.h", diff --git a/gin/gin_features.cc b/gin/gin_features.cc new file mode 100644 index 00000000000000..a487e256be914a --- /dev/null +++ b/gin/gin_features.cc @@ -0,0 +1,13 @@ +// 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" + +namespace features { + +// Enables optimization of JavaScript in V8. +const base::Feature kV8OptimizeJavascript{"V8OptimizeJavascript", + base::FEATURE_ENABLED_BY_DEFAULT}; + +} // namespace features diff --git a/gin/gin_features.h b/gin/gin_features.h new file mode 100644 index 00000000000000..58bb433c21ad48 --- /dev/null +++ b/gin/gin_features.h @@ -0,0 +1,17 @@ +// 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. + +#ifndef GIN_GIN_FEATURES_H_ +#define GIN_GIN_FEATURES_H_ + +#include "base/feature_list.h" +#include "gin/gin_export.h" + +namespace features { + +GIN_EXPORT extern const base::Feature kV8OptimizeJavascript; + +} // namespace features + +#endif // GIN_GIN_FEATURES_H_ diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc index 7c1d44cec92753..02d4b1cd652147 100644 --- a/gin/v8_initializer.cc +++ b/gin/v8_initializer.cc @@ -25,6 +25,7 @@ #include "base/threading/platform_thread.h" #include "base/time/time.h" #include "build/build_config.h" +#include "gin/gin_features.h" #if defined(V8_USE_EXTERNAL_STARTUP_DATA) #if defined(OS_ANDROID) @@ -242,6 +243,14 @@ void V8Initializer::Initialize(IsolateHolder::ScriptMode mode, v8::V8::InitializePlatform(V8Platform::Get()); + if (base::FeatureList::IsEnabled(features::kV8OptimizeJavascript)) { + static const char optimize[] = "--opt"; + v8::V8::SetFlagsFromString(optimize, sizeof(optimize) - 1); + } else { + static const char no_optimize[] = "--no-opt"; + v8::V8::SetFlagsFromString(no_optimize, sizeof(no_optimize) - 1); + } + if (IsolateHolder::kStrictMode == mode) { static const char use_strict[] = "--use_strict"; v8::V8::SetFlagsFromString(use_strict, sizeof(use_strict) - 1);