Index: src/snapshot/serialize.cc |
diff --git a/src/snapshot/serialize.cc b/src/snapshot/serialize.cc |
index fceec47fae6daab3b74a9896905c0f3d552c1cb5..5d3f624da8b7d9e56690588aa592f12dd367012a 100644 |
--- a/src/snapshot/serialize.cc |
+++ b/src/snapshot/serialize.cc |
@@ -500,16 +500,19 @@ void Deserializer::DecodeReservation( |
} |
-void Deserializer::FlushICacheForNewCodeObjects() { |
- if (!deserializing_user_code_) { |
- // The entire isolate is newly deserialized. Simply flush all code pages. |
- PageIterator it(isolate_->heap()->code_space()); |
- while (it.has_next()) { |
- Page* p = it.next(); |
- CpuFeatures::FlushICache(p->area_start(), |
- p->area_end() - p->area_start()); |
- } |
+void Deserializer::FlushICacheForNewIsolate() { |
+ DCHECK(!deserializing_user_code_); |
+ // The entire isolate is newly deserialized. Simply flush all code pages. |
+ PageIterator it(isolate_->heap()->code_space()); |
+ while (it.has_next()) { |
+ Page* p = it.next(); |
+ CpuFeatures::FlushICache(p->area_start(), p->area_end() - p->area_start()); |
} |
+} |
+ |
+ |
+void Deserializer::FlushICacheForNewCodeObjects() { |
+ DCHECK(deserializing_user_code_); |
for (Code* code : new_code_objects_) { |
CpuFeatures::FlushICache(code->instruction_start(), |
code->instruction_size()); |
@@ -557,6 +560,7 @@ void Deserializer::Deserialize(Isolate* isolate) { |
isolate_->heap()->RepairFreeListsAfterDeserialization(); |
isolate_->heap()->IterateWeakRoots(this, VISIT_ALL); |
DeserializeDeferredObjects(); |
+ FlushICacheForNewIsolate(); |
} |
isolate_->heap()->set_native_contexts_list( |
@@ -574,8 +578,6 @@ void Deserializer::Deserialize(Isolate* isolate) { |
ExtraNatives::UpdateSourceCache(isolate_->heap()); |
CodeStubNatives::UpdateSourceCache(isolate_->heap()); |
- FlushICacheForNewCodeObjects(); |
- |
// Issue code events for newly deserialized code objects. |
LOG_CODE_EVENT(isolate_, LogCodeObjects()); |
LOG_CODE_EVENT(isolate_, LogCompiledFunctions()); |
@@ -631,6 +633,7 @@ MaybeHandle<SharedFunctionInfo> Deserializer::DeserializeCode( |
Object* root; |
VisitPointer(&root); |
DeserializeDeferredObjects(); |
+ FlushICacheForNewCodeObjects(); |
result = Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(root)); |
} |
CommitPostProcessedObjects(isolate); |
@@ -2626,7 +2629,6 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize( |
if (FLAG_profile_deserialization) PrintF("[Deserializing failed]\n"); |
return MaybeHandle<SharedFunctionInfo>(); |
} |
- deserializer.FlushICacheForNewCodeObjects(); |
if (FLAG_profile_deserialization) { |
double ms = timer.Elapsed().InMillisecondsF(); |