Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
src: get and set all V8 flags from V8
Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
  • Loading branch information
juanarbol committed Apr 1, 2023
commit 55ac9b2280fdb39b9e864198e82a401bd36f9ece
5 changes: 5 additions & 0 deletions deps/v8/include/v8-initialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ class V8_EXPORT V8 {
static void SetFlagsFromCommandLine(int* argc, char** argv,
bool remove_flags);

/**
* Gets V8 flags names and stores them in the provided vector.
*/
static std::vector<const char*> GetFlagsNames();

/** Get the version string. */
static const char* GetVersion();

Expand Down
6 changes: 5 additions & 1 deletion deps/v8/src/api/api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,10 @@ void V8::SetFlagsFromCommandLine(int* argc, char** argv, bool remove_flags) {
HelpOptions(HelpOptions::kDontExit));
}

std::vector<const char*> V8::GetFlagsNames() {
return i::FlagList::GetNames();
}

RegisteredExtension* RegisteredExtension::first_extension_ = nullptr;

RegisteredExtension::RegisteredExtension(std::unique_ptr<Extension> extension)
Expand Down Expand Up @@ -6326,7 +6330,7 @@ void v8::V8::InitializeExternalStartupDataFromFile(const char* snapshot_blob) {
i::InitializeExternalStartupDataFromFile(snapshot_blob);
}

const char* v8::V8::GetVersion() { return i::Version::GetVersion(); }
const char* V8::GetVersion() { return i::Version::GetVersion(); }

#ifdef V8_ENABLE_SANDBOX
VirtualAddressSpace* v8::V8::GetSandboxAddressSpace() {
Expand Down
12 changes: 12 additions & 0 deletions deps/v8/src/flags/flags.cc
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,18 @@ void FlagList::PrintValues() {
}
}

// static
std::vector<const char*> FlagList::GetNames() {
std::vector<const char*> stor;
for (const Flag& f : flags) {
std::string parsed_name;
FlagName flag_name = FlagName{f.name()};
for (const char* p = flag_name.name; *p; ++p) parsed_name += NormalizeChar(*p);
stor.push_back(parsed_name.c_str());
}
return stor;
}

namespace {

class ImplicationProcessor {
Expand Down
3 changes: 3 additions & 0 deletions deps/v8/src/flags/flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ class V8_EXPORT_PRIVATE FlagList {

static void PrintValues();

// Get all the flags names and store them in the privided vector.
static std::vector<const char*> GetNames();

// Set flags as consequence of being implied by another flag.
static void EnforceFlagImplications();

Expand Down
9 changes: 9 additions & 0 deletions src/node_options.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "node_external_reference.h"
#include "node_internals.h"
#include "node_sea.h"
#include "v8.h"
#if HAVE_OPENSSL
#include "openssl/opensslv.h"
#endif
Expand Down Expand Up @@ -738,6 +739,14 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {

PerIsolateOptionsParser::PerIsolateOptionsParser(
const EnvironmentOptionsParser& eop) {

std::vector<const char*> v8_available_flags = v8::V8::GetFlagsNames();
for (size_t i = 0; i < v8_available_flags.size(); ++i) {
std::string v8Opt = "--";
v8Opt.append(v8_available_flags[i]);
AddOption(v8Opt.c_str(), "", V8Option{}, kAllowedInEnvvar);
}

AddOption("--track-heap-objects",
"track heap object allocations for heap snapshots",
&PerIsolateOptions::track_heap_objects,
Expand Down