Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(200)

Side by Side Diff: runtime/vm/clustered_snapshot.cc

Issue 2357313003: AOT: Add a separate switchable call state for unlinked calls. (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/code_generator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/clustered_snapshot.h" 5 #include "vm/clustered_snapshot.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bootstrap.h" 8 #include "vm/bootstrap.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
(...skipping 2071 matching lines...) Expand 10 before | Expand all | Expand 10 after
2082 RawObject** to = scope->to(length); 2082 RawObject** to = scope->to(length);
2083 for (RawObject** p = from; p <= to; p++) { 2083 for (RawObject** p = from; p <= to; p++) {
2084 *p = d->ReadRef(); 2084 *p = d->ReadRef();
2085 } 2085 }
2086 } 2086 }
2087 } 2087 }
2088 }; 2088 };
2089 2089
2090 2090
2091 #if !defined(DART_PRECOMPILED_RUNTIME) 2091 #if !defined(DART_PRECOMPILED_RUNTIME)
2092 class UnlinkedCallSerializationCluster : public SerializationCluster {
2093 public:
2094 UnlinkedCallSerializationCluster() { }
2095 virtual ~UnlinkedCallSerializationCluster() { }
2096
2097 void Trace(Serializer* s, RawObject* object) {
2098 RawUnlinkedCall* unlinked = UnlinkedCall::RawCast(object);
2099 objects_.Add(unlinked);
2100
2101 RawObject** from = unlinked->from();
2102 RawObject** to = unlinked->to();
2103 for (RawObject** p = from; p <= to; p++) {
2104 s->Push(*p);
2105 }
2106 }
2107
2108 void WriteAlloc(Serializer* s) {
2109 s->WriteCid(kUnlinkedCallCid);
2110 intptr_t count = objects_.length();
2111 s->Write<int32_t>(count);
2112 for (intptr_t i = 0; i < count; i++) {
2113 RawUnlinkedCall* unlinked = objects_[i];
2114 s->AssignRef(unlinked);
2115 }
2116 }
2117
2118 void WriteFill(Serializer* s) {
2119 intptr_t count = objects_.length();
2120 for (intptr_t i = 0; i < count; i++) {
2121 RawUnlinkedCall* unlinked = objects_[i];
2122 RawObject** from = unlinked->from();
2123 RawObject** to = unlinked->to();
2124 for (RawObject** p = from; p <= to; p++) {
2125 s->WriteRef(*p);
2126 }
2127 }
2128 }
2129
2130 private:
2131 GrowableArray<RawUnlinkedCall*> objects_;
2132 };
2133 #endif // !DART_PRECOMPILED_RUNTIME
2134
2135
2136 class UnlinkedCallDeserializationCluster : public DeserializationCluster {
2137 public:
2138 UnlinkedCallDeserializationCluster() { }
2139 virtual ~UnlinkedCallDeserializationCluster() { }
2140
2141 void ReadAlloc(Deserializer* d) {
2142 start_index_ = d->next_index();
2143 PageSpace* old_space = d->heap()->old_space();
2144 intptr_t count = d->Read<int32_t>();
2145 for (intptr_t i = 0; i < count; i++) {
2146 d->AssignRef(AllocateUninitialized(old_space,
2147 UnlinkedCall::InstanceSize()));
2148 }
2149 stop_index_ = d->next_index();
2150 }
2151
2152 void ReadFill(Deserializer* d) {
2153 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2154
2155 for (intptr_t id = start_index_; id < stop_index_; id++) {
2156 RawUnlinkedCall* unlinked =
2157 reinterpret_cast<RawUnlinkedCall*>(d->Ref(id));
2158 Deserializer::InitializeHeader(unlinked, kUnlinkedCallCid,
2159 UnlinkedCall::InstanceSize(),
2160 is_vm_object);
2161 RawObject** from = unlinked->from();
2162 RawObject** to = unlinked->to();
2163 for (RawObject** p = from; p <= to; p++) {
2164 *p = d->ReadRef();
2165 }
2166 }
2167 }
2168 };
2169
2170
2171 #if !defined(DART_PRECOMPILED_RUNTIME)
2092 class ICDataSerializationCluster : public SerializationCluster { 2172 class ICDataSerializationCluster : public SerializationCluster {
2093 public: 2173 public:
2094 ICDataSerializationCluster() { } 2174 ICDataSerializationCluster() { }
2095 virtual ~ICDataSerializationCluster() { } 2175 virtual ~ICDataSerializationCluster() { }
2096 2176
2097 void Trace(Serializer* s, RawObject* object) { 2177 void Trace(Serializer* s, RawObject* object) {
2098 RawICData* ic = ICData::RawCast(object); 2178 RawICData* ic = ICData::RawCast(object);
2099 objects_.Add(ic); 2179 objects_.Add(ic);
2100 2180
2101 RawObject** from = ic->from(); 2181 RawObject** from = ic->from();
(...skipping 2162 matching lines...) Expand 10 before | Expand all | Expand 10 after
4264 case kCodeCid: return new (Z) CodeSerializationCluster(); 4344 case kCodeCid: return new (Z) CodeSerializationCluster();
4265 case kObjectPoolCid: return new (Z) ObjectPoolSerializationCluster(); 4345 case kObjectPoolCid: return new (Z) ObjectPoolSerializationCluster();
4266 case kPcDescriptorsCid: 4346 case kPcDescriptorsCid:
4267 return new (Z) RODataSerializationCluster(kPcDescriptorsCid); 4347 return new (Z) RODataSerializationCluster(kPcDescriptorsCid);
4268 case kStackmapCid: 4348 case kStackmapCid:
4269 return new (Z) RODataSerializationCluster(kStackmapCid); 4349 return new (Z) RODataSerializationCluster(kStackmapCid);
4270 case kExceptionHandlersCid: 4350 case kExceptionHandlersCid:
4271 return new (Z) ExceptionHandlersSerializationCluster(); 4351 return new (Z) ExceptionHandlersSerializationCluster();
4272 case kContextCid: return new (Z) ContextSerializationCluster(); 4352 case kContextCid: return new (Z) ContextSerializationCluster();
4273 case kContextScopeCid: return new (Z) ContextScopeSerializationCluster(); 4353 case kContextScopeCid: return new (Z) ContextScopeSerializationCluster();
4354 case kUnlinkedCallCid: return new (Z) UnlinkedCallSerializationCluster();
4274 case kICDataCid: return new (Z) ICDataSerializationCluster(); 4355 case kICDataCid: return new (Z) ICDataSerializationCluster();
4275 case kMegamorphicCacheCid: 4356 case kMegamorphicCacheCid:
4276 return new (Z) MegamorphicCacheSerializationCluster(); 4357 return new (Z) MegamorphicCacheSerializationCluster();
4277 case kSubtypeTestCacheCid: 4358 case kSubtypeTestCacheCid:
4278 return new (Z) SubtypeTestCacheSerializationCluster(); 4359 return new (Z) SubtypeTestCacheSerializationCluster();
4279 case kLanguageErrorCid: 4360 case kLanguageErrorCid:
4280 return new (Z) LanguageErrorSerializationCluster(); 4361 return new (Z) LanguageErrorSerializationCluster();
4281 case kUnhandledExceptionCid: 4362 case kUnhandledExceptionCid:
4282 return new (Z) UnhandledExceptionSerializationCluster(); 4363 return new (Z) UnhandledExceptionSerializationCluster();
4283 case kLibraryPrefixCid: return new (Z) LibraryPrefixSerializationCluster(); 4364 case kLibraryPrefixCid: return new (Z) LibraryPrefixSerializationCluster();
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
4429 AddBaseObject(Object::empty_exception_handlers().raw()); 4510 AddBaseObject(Object::empty_exception_handlers().raw());
4430 4511
4431 for (intptr_t i = 0; i < ArgumentsDescriptor::kCachedDescriptorCount; i++) { 4512 for (intptr_t i = 0; i < ArgumentsDescriptor::kCachedDescriptorCount; i++) {
4432 AddBaseObject(ArgumentsDescriptor::cached_args_descriptors_[i]); 4513 AddBaseObject(ArgumentsDescriptor::cached_args_descriptors_[i]);
4433 } 4514 }
4434 for (intptr_t i = 0; i < ICData::kCachedICDataArrayCount; i++) { 4515 for (intptr_t i = 0; i < ICData::kCachedICDataArrayCount; i++) {
4435 AddBaseObject(ICData::cached_icdata_arrays_[i]); 4516 AddBaseObject(ICData::cached_icdata_arrays_[i]);
4436 } 4517 }
4437 4518
4438 ClassTable* table = isolate()->class_table(); 4519 ClassTable* table = isolate()->class_table();
4439 for (intptr_t cid = kClassCid; cid <= kUnwindErrorCid; cid++) { 4520 for (intptr_t cid = kClassCid; cid < kInstanceCid; cid++) {
4440 // Error has no class object. 4521 // Error has no class object.
4441 if (cid != kErrorCid) { 4522 if (cid != kErrorCid) {
4442 ASSERT(table->HasValidClassAt(cid)); 4523 ASSERT(table->HasValidClassAt(cid));
4443 AddBaseObject(table->At(cid)); 4524 AddBaseObject(table->At(cid));
4444 } 4525 }
4445 } 4526 }
4446 AddBaseObject(table->At(kDynamicCid)); 4527 AddBaseObject(table->At(kDynamicCid));
4447 AddBaseObject(table->At(kVoidCid)); 4528 AddBaseObject(table->At(kVoidCid));
4448 } 4529 }
4449 4530
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
4586 case kNamespaceCid: return new (Z) NamespaceDeserializationCluster(); 4667 case kNamespaceCid: return new (Z) NamespaceDeserializationCluster();
4587 case kCodeCid: return new (Z) CodeDeserializationCluster(); 4668 case kCodeCid: return new (Z) CodeDeserializationCluster();
4588 case kObjectPoolCid: return new (Z) ObjectPoolDeserializationCluster(); 4669 case kObjectPoolCid: return new (Z) ObjectPoolDeserializationCluster();
4589 case kPcDescriptorsCid: 4670 case kPcDescriptorsCid:
4590 case kStackmapCid: 4671 case kStackmapCid:
4591 return new (Z) RODataDeserializationCluster(); 4672 return new (Z) RODataDeserializationCluster();
4592 case kExceptionHandlersCid: 4673 case kExceptionHandlersCid:
4593 return new (Z) ExceptionHandlersDeserializationCluster(); 4674 return new (Z) ExceptionHandlersDeserializationCluster();
4594 case kContextCid: return new (Z) ContextDeserializationCluster(); 4675 case kContextCid: return new (Z) ContextDeserializationCluster();
4595 case kContextScopeCid: return new (Z) ContextScopeDeserializationCluster(); 4676 case kContextScopeCid: return new (Z) ContextScopeDeserializationCluster();
4677 case kUnlinkedCallCid: return new (Z) UnlinkedCallDeserializationCluster();
4596 case kICDataCid: return new (Z) ICDataDeserializationCluster(); 4678 case kICDataCid: return new (Z) ICDataDeserializationCluster();
4597 case kMegamorphicCacheCid: 4679 case kMegamorphicCacheCid:
4598 return new (Z) MegamorphicCacheDeserializationCluster(); 4680 return new (Z) MegamorphicCacheDeserializationCluster();
4599 case kSubtypeTestCacheCid: 4681 case kSubtypeTestCacheCid:
4600 return new (Z) SubtypeTestCacheDeserializationCluster(); 4682 return new (Z) SubtypeTestCacheDeserializationCluster();
4601 case kLanguageErrorCid: 4683 case kLanguageErrorCid:
4602 return new (Z) LanguageErrorDeserializationCluster(); 4684 return new (Z) LanguageErrorDeserializationCluster();
4603 case kUnhandledExceptionCid: 4685 case kUnhandledExceptionCid:
4604 return new (Z) UnhandledExceptionDeserializationCluster(); 4686 return new (Z) UnhandledExceptionDeserializationCluster();
4605 case kLibraryPrefixCid: 4687 case kLibraryPrefixCid:
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after
5127 5209
5128 deserializer.ReadVMSnapshot(); 5210 deserializer.ReadVMSnapshot();
5129 5211
5130 Dart::set_instructions_snapshot_buffer(instructions_buffer_); 5212 Dart::set_instructions_snapshot_buffer(instructions_buffer_);
5131 Dart::set_data_snapshot_buffer(data_buffer_); 5213 Dart::set_data_snapshot_buffer(data_buffer_);
5132 5214
5133 return ApiError::null(); 5215 return ApiError::null();
5134 } 5216 }
5135 5217
5136 } // namespace dart 5218 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/code_generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698