From d74f5c6f09704a86ca1b87d6acf8cb6c1d09ba24 Mon Sep 17 00:00:00 2001 From: yangguo Date: Tue, 17 Mar 2015 04:04:12 -0700 Subject: [PATCH] Serializer: Cache FlagList::Hash result. R=vogelheim@chromium.org Review URL: https://codereview.chromium.org/1011703003 Cr-Commit-Position: refs/heads/master@{#27234} --- src/flags.cc | 23 +++++++++++++++-------- src/flags.h | 3 ++- test/cctest/test-serialize.cc | 2 ++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/flags.cc b/src/flags.cc index d498c28240..7386238090 100644 --- a/src/flags.cc +++ b/src/flags.cc @@ -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( + flag_hash = static_cast( 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 diff --git a/src/flags.h b/src/flags.h index 9ec5d30119..545c172d36 100644 --- a/src/flags.h +++ b/src/flags.h @@ -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(); }; diff --git a/test/cctest/test-serialize.cc b/test/cctest/test-serialize.cc index 71e5d82181..88711b8429 100644 --- a/test/cctest/test-serialize.cc +++ b/test/cctest/test-serialize.cc @@ -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);