[flags] Skip --random-seed in FlagList::Hash
Node and friends use --random-seed to temporary reset the seed for predictable code-cache creation. To allow custom random seeds at runtime the flag is reset for encoding the FlagList::Hash in the snapshots. We will soon disallow changing flags via the API after V8 has been initialized. In order to make node work we will exclude --random-seed from the FlagList::Hash calculation. Drive-by-fix: * Lazily initialize flag_hash instead of calculating it after every call to SetFlagsFromString / EnforceFlagImplications. * Simplify hash string source creation since out << flag now includes the full flag information Bug: v8:12309 Change-Id: I1a168f4702d8c4d160ff12fdbea881731e4ea8b6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3218159 Reviewed-by: Marja Hölttä <marja@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/main@{#77345}
This commit is contained in:
parent
3f31ffd019
commit
9fe53c4f0b
@ -796,23 +796,16 @@ static uint32_t flag_hash = 0;
|
||||
|
||||
void ComputeFlagListHash() {
|
||||
std::ostringstream modified_args_as_string;
|
||||
if (COMPRESS_POINTERS_BOOL) {
|
||||
modified_args_as_string << "ptr-compr";
|
||||
}
|
||||
if (DEBUG_BOOL) {
|
||||
modified_args_as_string << "debug";
|
||||
}
|
||||
for (size_t i = 0; i < num_flags; ++i) {
|
||||
Flag* current = &flags[i];
|
||||
if (current->PointsTo(&FLAG_profile_deserialization)) {
|
||||
// We want to be able to flip --profile-deserialization without
|
||||
// causing the code cache to get invalidated by this hash.
|
||||
continue;
|
||||
}
|
||||
if (!current->IsDefault()) {
|
||||
modified_args_as_string << i;
|
||||
modified_args_as_string << *current;
|
||||
}
|
||||
if (COMPRESS_POINTERS_BOOL) modified_args_as_string << "ptr-compr";
|
||||
if (DEBUG_BOOL) modified_args_as_string << "debug";
|
||||
for (const Flag& flag : flags) {
|
||||
if (flag.IsDefault()) continue;
|
||||
// We want to be able to flip --profile-deserialization without
|
||||
// causing the code cache to get invalidated by this hash.
|
||||
if (flag.PointsTo(&FLAG_profile_deserialization)) continue;
|
||||
// Skip FLAG_random_seed to allow predictable code caching.
|
||||
if (flag.PointsTo(&FLAG_random_seed)) continue;
|
||||
modified_args_as_string << flag;
|
||||
}
|
||||
std::string args(modified_args_as_string.str());
|
||||
flag_hash = static_cast<uint32_t>(
|
||||
@ -837,6 +830,7 @@ bool TriggerImplication(bool premise, const char* premise_name,
|
||||
|
||||
// static
|
||||
void FlagList::EnforceFlagImplications() {
|
||||
flag_hash = 0;
|
||||
bool changed;
|
||||
do {
|
||||
changed = false;
|
||||
@ -844,10 +838,14 @@ void FlagList::EnforceFlagImplications() {
|
||||
#include "src/flags/flag-definitions.h" // NOLINT(build/include)
|
||||
#undef FLAG_MODE_DEFINE_IMPLICATIONS
|
||||
} while (changed);
|
||||
ComputeFlagListHash();
|
||||
}
|
||||
|
||||
uint32_t FlagList::Hash() { return flag_hash; }
|
||||
uint32_t FlagList::Hash() {
|
||||
if (flag_hash == 0) {
|
||||
ComputeFlagListHash();
|
||||
}
|
||||
return flag_hash;
|
||||
}
|
||||
|
||||
#undef FLAG_MODE_DEFINE
|
||||
#undef FLAG_MODE_DEFINE_DEFAULTS
|
||||
|
Loading…
Reference in New Issue
Block a user