Serializer: Cache FlagList::Hash result.

R=vogelheim@chromium.org

Review URL: https://codereview.chromium.org/1011703003

Cr-Commit-Position: refs/heads/master@{#27234}
This commit is contained in:
yangguo 2015-03-17 04:04:12 -07:00 committed by Commit bot
parent d4cd05e6df
commit d74f5c6f09
3 changed files with 19 additions and 9 deletions

View File

@ -543,15 +543,10 @@ void FlagList::PrintHelp() {
}
// static
void FlagList::EnforceFlagImplications() {
#define FLAG_MODE_DEFINE_IMPLICATIONS
#include "src/flag-definitions.h"
#undef FLAG_MODE_DEFINE_IMPLICATIONS
}
static uint32_t flag_hash = 0;
uint32_t FlagList::Hash() {
void ComputeFlagListHash() {
std::ostringstream modified_args_as_string;
#ifdef DEBUG
modified_args_as_string << "debug";
@ -564,7 +559,19 @@ uint32_t FlagList::Hash() {
}
}
std::string args(modified_args_as_string.str());
return static_cast<uint32_t>(
flag_hash = static_cast<uint32_t>(
base::hash_range(args.c_str(), args.c_str() + args.length()));
}
// static
void FlagList::EnforceFlagImplications() {
#define FLAG_MODE_DEFINE_IMPLICATIONS
#include "src/flag-definitions.h"
#undef FLAG_MODE_DEFINE_IMPLICATIONS
ComputeFlagListHash();
}
uint32_t FlagList::Hash() { return flag_hash; }
} } // namespace v8::internal

View File

@ -58,7 +58,8 @@ class FlagList {
// Set flags as consequence of being implied by another flag.
static void EnforceFlagImplications();
// Hash of current flags (to quickly determine flag changes).
// Hash of flags (to quickly determine mismatching flag expectations).
// This hash is calculated during V8::Initialize and cached.
static uint32_t Hash();
};

View File

@ -1372,7 +1372,9 @@ TEST(SerializeToplevelFlagChange) {
v8::ScriptCompiler::CachedData* cache = ProduceCache(source);
v8::Isolate* isolate2 = v8::Isolate::New();
FLAG_allow_natives_syntax = true; // Flag change should trigger cache reject.
FlagList::EnforceFlagImplications();
{
v8::Isolate::Scope iscope(isolate2);
v8::HandleScope scope(isolate2);