From: yangguo Date: Wed, 17 Jun 2015 06:45:25 +0000 (-0700) Subject: Revert of Serializer: clear string hash for code serializer. (patchset #1 id:1 of... X-Git-Tag: upstream/4.7.83~1975 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=22160e7c3945ef5290266dbb628fb8daba5436fd;p=platform%2Fupstream%2Fv8.git Revert of Serializer: clear string hash for code serializer. (patchset #1 id:1 of https://codereview.chromium.org/1183483006/) Reason for revert: This led to the roll being stuck: https://codereview.chromium.org/1189863003/ Original issue's description: > Serializer: clear string hash for code serializer. > > R=jochen@chromium.org > BUG=v8:4179 > LOG=N > > Committed: https://crrev.com/a0342678e865337215f9195f983c6013b60e7641 > Cr-Commit-Position: refs/heads/master@{#29016} TBR=jochen@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4179 Review URL: https://codereview.chromium.org/1186173004 Cr-Commit-Position: refs/heads/master@{#29065} --- diff --git a/src/snapshot/serialize.cc b/src/snapshot/serialize.cc index 026d602..fe33c3e 100644 --- a/src/snapshot/serialize.cc +++ b/src/snapshot/serialize.cc @@ -714,16 +714,20 @@ class StringTableInsertionKey : public HashTableKey { HeapObject* Deserializer::PostProcessNewObject(HeapObject* obj, int space) { if (deserializing_user_code()) { - if (obj->IsInternalizedString()) { - // Canonicalize the internalized string. If it already exists in the - // string table, set it to forward to the existing one. - DisallowHeapAllocation no_gc; + if (obj->IsString()) { String* string = String::cast(obj); - HandleScope scope(isolate_); - StringTableInsertionKey key(string); - String* canonical = *StringTable::LookupKey(isolate_, &key); - string->SetForwardedInternalizedString(canonical); - return canonical; + // Uninitialize hash field as the hash seed may have changed. + string->set_hash_field(String::kEmptyHashField); + if (string->IsInternalizedString()) { + // Canonicalize the internalized string. If it already exists in the + // string table, set it to forward to the existing one. + DisallowHeapAllocation no_gc; + HandleScope scope(isolate_); + StringTableInsertionKey key(string); + String* canonical = *StringTable::LookupKey(isolate_, &key); + string->SetForwardedInternalizedString(canonical); + return canonical; + } } else if (obj->IsScript()) { // Assign a new script id to avoid collision. Script::cast(obj)->set_id(isolate_->heap()->NextScriptId()); @@ -2314,24 +2318,12 @@ void CodeSerializer::SerializeObject(HeapObject* obj, HowToCode how_to_code, void CodeSerializer::SerializeGeneric(HeapObject* heap_object, HowToCode how_to_code, WhereToPoint where_to_point) { - int string_hash = String::kEmptyHashField; - if (heap_object->IsString()) { - String* string = String::cast(heap_object); - if (string->IsInternalizedString()) num_internalized_strings_++; - // Temporarily clear string hash. - string_hash = string->hash_field(); - string->set_hash_field(String::kEmptyHashField); - } + if (heap_object->IsInternalizedString()) num_internalized_strings_++; // Object has not yet been serialized. Serialize it here. ObjectSerializer serializer(this, heap_object, sink_, how_to_code, where_to_point); serializer.Serialize(); - - if (string_hash != String::kEmptyHashField) { - // Restore string hash. - String::cast(heap_object)->set_hash_field(String::kEmptyHashField); - } } diff --git a/src/snapshot/serialize.h b/src/snapshot/serialize.h index 2a426a9..3413385 100644 --- a/src/snapshot/serialize.h +++ b/src/snapshot/serialize.h @@ -307,7 +307,7 @@ class SerializerDeserializer: public ObjectVisitor { protected: static bool CanBeDeferred(HeapObject* o) { - return !o->IsInternalizedString() && !o->IsScript(); + return !o->IsString() && !o->IsScript(); } // ---------- byte code range 0x00..0x7f ----------