| Index: runtime/vm/clustered_snapshot.cc
|
| diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
|
| index 2fb50bf09c20302824ece681bb756d03956fa8d6..3585925e06c7dcafd32ead3d7f11b83fc45f91d5 100644
|
| --- a/runtime/vm/clustered_snapshot.cc
|
| +++ b/runtime/vm/clustered_snapshot.cc
|
| @@ -520,7 +520,7 @@ class FunctionSerializationCluster : public SerializationCluster {
|
| if (s->kind() == Snapshot::kAppNoJIT) {
|
| s->Push(func->ptr()->code_);
|
| } else if (s->kind() == Snapshot::kAppWithJIT) {
|
| - s->Push(func->ptr()->unoptimized_code_);
|
| + NOT_IN_PRECOMPILED(s->Push(func->ptr()->unoptimized_code_));
|
| s->Push(func->ptr()->ic_data_array_);
|
| }
|
| }
|
| @@ -548,18 +548,23 @@ class FunctionSerializationCluster : public SerializationCluster {
|
| if (kind == Snapshot::kAppNoJIT) {
|
| s->WriteRef(func->ptr()->code_);
|
| } else if (s->kind() == Snapshot::kAppWithJIT) {
|
| - s->WriteRef(func->ptr()->unoptimized_code_);
|
| + NOT_IN_PRECOMPILED(s->WriteRef(func->ptr()->unoptimized_code_));
|
| s->WriteRef(func->ptr()->ic_data_array_);
|
| }
|
|
|
| - s->WriteTokenPosition(func->ptr()->token_pos_);
|
| - s->WriteTokenPosition(func->ptr()->end_token_pos_);
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| + if (kind != Snapshot::kAppNoJIT) {
|
| + s->WriteTokenPosition(func->ptr()->token_pos_);
|
| + s->WriteTokenPosition(func->ptr()->end_token_pos_);
|
| + }
|
| +#endif
|
| s->Write<int16_t>(func->ptr()->num_fixed_parameters_);
|
| s->Write<int16_t>(func->ptr()->num_optional_parameters_);
|
| s->Write<uint32_t>(func->ptr()->kind_tag_);
|
| if (kind == Snapshot::kAppNoJIT) {
|
| // Omit fields used to support de/reoptimization.
|
| } else {
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| bool is_optimized = Code::IsOptimized(func->ptr()->code_);
|
| if (is_optimized) {
|
| s->Write<int32_t>(FLAG_optimization_counter_threshold);
|
| @@ -569,6 +574,7 @@ class FunctionSerializationCluster : public SerializationCluster {
|
| s->Write<int8_t>(func->ptr()->deoptimization_counter_);
|
| s->Write<uint16_t>(func->ptr()->optimized_instruction_count_);
|
| s->Write<uint16_t>(func->ptr()->optimized_call_site_count_);
|
| +#endif
|
| }
|
| }
|
| }
|
| @@ -615,8 +621,8 @@ class FunctionDeserializationCluster : public DeserializationCluster {
|
| if (kind == Snapshot::kAppNoJIT) {
|
| func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef());
|
| } else if (kind == Snapshot::kAppWithJIT) {
|
| - func->ptr()->unoptimized_code_ =
|
| - reinterpret_cast<RawCode*>(d->ReadRef());
|
| + NOT_IN_PRECOMPILED(func->ptr()->unoptimized_code_ =
|
| + reinterpret_cast<RawCode*>(d->ReadRef()));
|
| func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef());
|
| }
|
|
|
| @@ -624,18 +630,24 @@ class FunctionDeserializationCluster : public DeserializationCluster {
|
| func->ptr()->entry_point_ = 0;
|
| #endif
|
|
|
| - func->ptr()->token_pos_ = d->ReadTokenPosition();
|
| - func->ptr()->end_token_pos_ = d->ReadTokenPosition();
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| + if (kind != Snapshot::kAppNoJIT) {
|
| + func->ptr()->token_pos_ = d->ReadTokenPosition();
|
| + func->ptr()->end_token_pos_ = d->ReadTokenPosition();
|
| + }
|
| +#endif
|
| func->ptr()->num_fixed_parameters_ = d->Read<int16_t>();
|
| func->ptr()->num_optional_parameters_ = d->Read<int16_t>();
|
| func->ptr()->kind_tag_ = d->Read<uint32_t>();
|
| if (kind == Snapshot::kAppNoJIT) {
|
| // Omit fields used to support de/reoptimization.
|
| } else {
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| func->ptr()->usage_counter_ = d->Read<int32_t>();
|
| func->ptr()->deoptimization_counter_ = d->Read<int8_t>();
|
| func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>();
|
| func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>();
|
| +#endif
|
| }
|
| }
|
| }
|
| @@ -690,11 +702,12 @@ class ClosureDataSerializationCluster : public SerializationCluster {
|
| RawClosureData* data = ClosureData::RawCast(object);
|
| objects_.Add(data);
|
|
|
| - RawObject** from = data->from();
|
| - RawObject** to = data->to();
|
| - for (RawObject** p = from; p <= to; p++) {
|
| - s->Push(*p);
|
| + if (s->kind() != Snapshot::kAppNoJIT) {
|
| + s->Push(data->ptr()->context_scope_);
|
| }
|
| + s->Push(data->ptr()->parent_function_);
|
| + s->Push(data->ptr()->signature_type_);
|
| + s->Push(data->ptr()->closure_);
|
| }
|
|
|
| void WriteAlloc(Serializer* s) {
|
| @@ -711,11 +724,12 @@ class ClosureDataSerializationCluster : public SerializationCluster {
|
| intptr_t count = objects_.length();
|
| for (intptr_t i = 0; i < count; i++) {
|
| RawClosureData* data = objects_[i];
|
| - RawObject** from = data->from();
|
| - RawObject** to = data->to();
|
| - for (RawObject** p = from; p <= to; p++) {
|
| - s->WriteRef(*p);
|
| + if (s->kind() != Snapshot::kAppNoJIT) {
|
| + s->WriteRef(data->ptr()->context_scope_);
|
| }
|
| + s->WriteRef(data->ptr()->parent_function_);
|
| + s->WriteRef(data->ptr()->signature_type_);
|
| + s->WriteRef(data->ptr()->closure_);
|
| }
|
| }
|
|
|
| @@ -747,12 +761,17 @@ class ClosureDataDeserializationCluster : public DeserializationCluster {
|
| for (intptr_t id = start_index_; id < stop_index_; id++) {
|
| RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id));
|
| Deserializer::InitializeHeader(data, kClosureDataCid,
|
| - ClosureData::InstanceSize(), is_vm_object);
|
| - RawObject** from = data->from();
|
| - RawObject** to = data->to();
|
| - for (RawObject** p = from; p <= to; p++) {
|
| - *p = d->ReadRef();
|
| + ClosureData::InstanceSize(),
|
| + is_vm_object);
|
| + if (d->kind() == Snapshot::kAppNoJIT) {
|
| + data->ptr()->context_scope_ = ContextScope::null();
|
| + } else {
|
| + data->ptr()->context_scope_ =
|
| + static_cast<RawContextScope*>(d->ReadRef());
|
| }
|
| + data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef());
|
| + data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef());
|
| + data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef());
|
| }
|
| }
|
| };
|
| @@ -1489,7 +1508,8 @@ class CodeSerializationCluster : public SerializationCluster {
|
| }
|
| if (kind == Snapshot::kAppNoJIT) {
|
| // No disabled code in precompilation.
|
| - ASSERT(code->ptr()->instructions_ == code->ptr()->active_instructions_);
|
| + NOT_IN_PRECOMPILED(ASSERT(
|
| + code->ptr()->instructions_ == code->ptr()->active_instructions_));
|
| } else {
|
| ASSERT(kind == Snapshot::kAppWithJIT);
|
| // We never include optimized code in JIT precompilation. Deoptimization
|
| @@ -1552,7 +1572,7 @@ class CodeDeserializationCluster : public DeserializationCluster {
|
| code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr);
|
| code->ptr()->checked_entry_point_ =
|
| Instructions::CheckedEntryPoint(instr);
|
| - code->ptr()->active_instructions_ = instr;
|
| + NOT_IN_PRECOMPILED(code->ptr()->active_instructions_ = instr);
|
| code->ptr()->instructions_ = instr;
|
| code->ptr()->object_pool_ =
|
| reinterpret_cast<RawObjectPool*>(d->ReadRef());
|
| @@ -1564,6 +1584,7 @@ class CodeDeserializationCluster : public DeserializationCluster {
|
| code->ptr()->stackmaps_ =
|
| reinterpret_cast<RawArray*>(d->ReadRef());
|
|
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| code->ptr()->deopt_info_array_ = Array::null();
|
| code->ptr()->static_calls_target_table_ = Array::null();
|
| code->ptr()->var_descriptors_ = LocalVarDescriptors::null();
|
| @@ -1573,8 +1594,11 @@ class CodeDeserializationCluster : public DeserializationCluster {
|
| code->ptr()->return_address_metadata_ = Object::null();
|
|
|
| code->ptr()->compile_timestamp_ = 0;
|
| +#endif
|
| code->ptr()->state_bits_ = d->Read<int32_t>();
|
| +#if !defined(DART_PRECOMPILED_RUNTIME)
|
| code->ptr()->lazy_deopt_pc_offset_ = -1;
|
| +#endif
|
| }
|
| }
|
| };
|
| @@ -2100,7 +2124,9 @@ class ICDataSerializationCluster : public SerializationCluster {
|
| for (RawObject** p = from; p <= to; p++) {
|
| s->WriteRef(*p);
|
| }
|
| - s->Write<int32_t>(ic->ptr()->deopt_id_);
|
| + if (kind != Snapshot::kAppNoJIT) {
|
| + NOT_IN_PRECOMPILED(s->Write<int32_t>(ic->ptr()->deopt_id_));
|
| + }
|
| s->Write<uint32_t>(ic->ptr()->state_bits_);
|
| #if defined(TAG_IC_DATA)
|
| s->Write<int32_t>(ic->ptr()->tag_);
|
| @@ -2146,7 +2172,7 @@ class ICDataDeserializationCluster : public DeserializationCluster {
|
| for (RawObject** p = to_snapshot + 1; p <= to; p++) {
|
| *p = Object::null();
|
| }
|
| - ic->ptr()->deopt_id_ = d->Read<int32_t>();
|
| + NOT_IN_PRECOMPILED(ic->ptr()->deopt_id_ = d->Read<int32_t>());
|
| ic->ptr()->state_bits_ = d->Read<int32_t>();
|
| #if defined(TAG_IC_DATA)
|
| ic->ptr()->tag_ = d->Read<int32_t>();
|
|
|