OLD | NEW |
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 2842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2853 class LibraryPrefixSerializationCluster : public SerializationCluster { | 2853 class LibraryPrefixSerializationCluster : public SerializationCluster { |
2854 public: | 2854 public: |
2855 LibraryPrefixSerializationCluster() {} | 2855 LibraryPrefixSerializationCluster() {} |
2856 virtual ~LibraryPrefixSerializationCluster() {} | 2856 virtual ~LibraryPrefixSerializationCluster() {} |
2857 | 2857 |
2858 void Trace(Serializer* s, RawObject* object) { | 2858 void Trace(Serializer* s, RawObject* object) { |
2859 RawLibraryPrefix* prefix = LibraryPrefix::RawCast(object); | 2859 RawLibraryPrefix* prefix = LibraryPrefix::RawCast(object); |
2860 objects_.Add(prefix); | 2860 objects_.Add(prefix); |
2861 | 2861 |
2862 RawObject** from = prefix->from(); | 2862 RawObject** from = prefix->from(); |
2863 RawObject** to = prefix->to(); | 2863 RawObject** to = prefix->to_snapshot(s->kind()); |
2864 for (RawObject** p = from; p <= to; p++) { | 2864 for (RawObject** p = from; p <= to; p++) { |
2865 s->Push(*p); | 2865 s->Push(*p); |
2866 } | 2866 } |
2867 } | 2867 } |
2868 | 2868 |
2869 void WriteAlloc(Serializer* s) { | 2869 void WriteAlloc(Serializer* s) { |
2870 s->WriteCid(kLibraryPrefixCid); | 2870 s->WriteCid(kLibraryPrefixCid); |
2871 intptr_t count = objects_.length(); | 2871 intptr_t count = objects_.length(); |
2872 s->Write<int32_t>(count); | 2872 s->Write<int32_t>(count); |
2873 for (intptr_t i = 0; i < count; i++) { | 2873 for (intptr_t i = 0; i < count; i++) { |
2874 RawLibraryPrefix* prefix = objects_[i]; | 2874 RawLibraryPrefix* prefix = objects_[i]; |
2875 s->AssignRef(prefix); | 2875 s->AssignRef(prefix); |
2876 } | 2876 } |
2877 } | 2877 } |
2878 | 2878 |
2879 void WriteFill(Serializer* s) { | 2879 void WriteFill(Serializer* s) { |
| 2880 Snapshot::Kind kind = s->kind(); |
2880 intptr_t count = objects_.length(); | 2881 intptr_t count = objects_.length(); |
2881 for (intptr_t i = 0; i < count; i++) { | 2882 for (intptr_t i = 0; i < count; i++) { |
2882 RawLibraryPrefix* prefix = objects_[i]; | 2883 RawLibraryPrefix* prefix = objects_[i]; |
2883 RawObject** from = prefix->from(); | 2884 RawObject** from = prefix->from(); |
2884 RawObject** to = prefix->to(); | 2885 RawObject** to = prefix->to_snapshot(kind); |
2885 for (RawObject** p = from; p <= to; p++) { | 2886 for (RawObject** p = from; p <= to; p++) { |
2886 s->WriteRef(*p); | 2887 s->WriteRef(*p); |
2887 } | 2888 } |
2888 s->Write<uint16_t>(prefix->ptr()->num_imports_); | 2889 s->Write<uint16_t>(prefix->ptr()->num_imports_); |
2889 s->Write<bool>(prefix->ptr()->is_deferred_load_); | 2890 s->Write<bool>(prefix->ptr()->is_deferred_load_); |
2890 } | 2891 } |
2891 } | 2892 } |
2892 | 2893 |
2893 private: | 2894 private: |
2894 GrowableArray<RawLibraryPrefix*> objects_; | 2895 GrowableArray<RawLibraryPrefix*> objects_; |
(...skipping 11 matching lines...) Expand all Loading... |
2906 PageSpace* old_space = d->heap()->old_space(); | 2907 PageSpace* old_space = d->heap()->old_space(); |
2907 intptr_t count = d->Read<int32_t>(); | 2908 intptr_t count = d->Read<int32_t>(); |
2908 for (intptr_t i = 0; i < count; i++) { | 2909 for (intptr_t i = 0; i < count; i++) { |
2909 d->AssignRef( | 2910 d->AssignRef( |
2910 AllocateUninitialized(old_space, LibraryPrefix::InstanceSize())); | 2911 AllocateUninitialized(old_space, LibraryPrefix::InstanceSize())); |
2911 } | 2912 } |
2912 stop_index_ = d->next_index(); | 2913 stop_index_ = d->next_index(); |
2913 } | 2914 } |
2914 | 2915 |
2915 void ReadFill(Deserializer* d) { | 2916 void ReadFill(Deserializer* d) { |
| 2917 Snapshot::Kind kind = d->kind(); |
2916 bool is_vm_object = d->isolate() == Dart::vm_isolate(); | 2918 bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
2917 | 2919 |
2918 for (intptr_t id = start_index_; id < stop_index_; id++) { | 2920 for (intptr_t id = start_index_; id < stop_index_; id++) { |
2919 RawLibraryPrefix* prefix = | 2921 RawLibraryPrefix* prefix = |
2920 reinterpret_cast<RawLibraryPrefix*>(d->Ref(id)); | 2922 reinterpret_cast<RawLibraryPrefix*>(d->Ref(id)); |
2921 Deserializer::InitializeHeader(prefix, kLibraryPrefixCid, | 2923 Deserializer::InitializeHeader(prefix, kLibraryPrefixCid, |
2922 LibraryPrefix::InstanceSize(), | 2924 LibraryPrefix::InstanceSize(), |
2923 is_vm_object); | 2925 is_vm_object); |
2924 RawObject** from = prefix->from(); | 2926 RawObject** from = prefix->from(); |
| 2927 RawObject** to_snapshot = prefix->to_snapshot(kind); |
2925 RawObject** to = prefix->to(); | 2928 RawObject** to = prefix->to(); |
2926 for (RawObject** p = from; p <= to; p++) { | 2929 for (RawObject** p = from; p <= to_snapshot; p++) { |
2927 *p = d->ReadRef(); | 2930 *p = d->ReadRef(); |
2928 } | 2931 } |
| 2932 for (RawObject** p = to_snapshot + 1; p <= to; p++) { |
| 2933 *p = Object::null(); |
| 2934 } |
| 2935 |
2929 prefix->ptr()->num_imports_ = d->Read<uint16_t>(); | 2936 prefix->ptr()->num_imports_ = d->Read<uint16_t>(); |
2930 prefix->ptr()->is_deferred_load_ = d->Read<bool>(); | 2937 prefix->ptr()->is_deferred_load_ = d->Read<bool>(); |
2931 prefix->ptr()->is_loaded_ = !prefix->ptr()->is_deferred_load_; | 2938 prefix->ptr()->is_loaded_ = !prefix->ptr()->is_deferred_load_; |
2932 } | 2939 } |
2933 } | 2940 } |
2934 }; | 2941 }; |
2935 | 2942 |
2936 | 2943 |
2937 #if !defined(DART_PRECOMPILED_RUNTIME) | 2944 #if !defined(DART_PRECOMPILED_RUNTIME) |
2938 class TypeSerializationCluster : public SerializationCluster { | 2945 class TypeSerializationCluster : public SerializationCluster { |
(...skipping 2627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5566 thread_->isolate()->SetupImagePage(data_buffer_, | 5573 thread_->isolate()->SetupImagePage(data_buffer_, |
5567 /* is_executable */ false); | 5574 /* is_executable */ false); |
5568 } | 5575 } |
5569 | 5576 |
5570 deserializer.ReadIsolateSnapshot(thread_->isolate()->object_store()); | 5577 deserializer.ReadIsolateSnapshot(thread_->isolate()->object_store()); |
5571 | 5578 |
5572 return ApiError::null(); | 5579 return ApiError::null(); |
5573 } | 5580 } |
5574 | 5581 |
5575 } // namespace dart | 5582 } // namespace dart |
OLD | NEW |