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

Side by Side Diff: runtime/vm/snapshot.h

Issue 2161853002: Remove dead full snapshot support from the recursive descent serializer. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: . Created 4 years, 5 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 | « runtime/vm/raw_object_snapshot.cc ('k') | runtime/vm/snapshot.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 #ifndef VM_SNAPSHOT_H_ 5 #ifndef VM_SNAPSHOT_H_
6 #define VM_SNAPSHOT_H_ 6 #define VM_SNAPSHOT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/bitfield.h" 10 #include "vm/bitfield.h"
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 PassiveObject* PassiveObjectHandle() { return &pobj_; } 405 PassiveObject* PassiveObjectHandle() { return &pobj_; }
406 Array* ArrayHandle() { return &array_; } 406 Array* ArrayHandle() { return &array_; }
407 Class* ClassHandle() { return &cls_; } 407 Class* ClassHandle() { return &cls_; }
408 String* StringHandle() { return &str_; } 408 String* StringHandle() { return &str_; }
409 AbstractType* TypeHandle() { return &type_; } 409 AbstractType* TypeHandle() { return &type_; }
410 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; } 410 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; }
411 GrowableObjectArray* TokensHandle() { return &tokens_; } 411 GrowableObjectArray* TokensHandle() { return &tokens_; }
412 TokenStream* StreamHandle() { return &stream_; } 412 TokenStream* StreamHandle() { return &stream_; }
413 ExternalTypedData* DataHandle() { return &data_; } 413 ExternalTypedData* DataHandle() { return &data_; }
414 TypedData* TypedDataHandle() { return &typed_data_; } 414 TypedData* TypedDataHandle() { return &typed_data_; }
415 Code* CodeHandle() { return &code_; }
416 Function* FunctionHandle() { return &function_; } 415 Function* FunctionHandle() { return &function_; }
417 MegamorphicCache* MegamorphicCacheHandle() { return &megamorphic_cache_; }
418 Snapshot::Kind kind() const { return kind_; } 416 Snapshot::Kind kind() const { return kind_; }
419 417
420 // Reads an object. 418 // Reads an object.
421 RawObject* ReadObject(); 419 RawObject* ReadObject();
422 420
423 // Add object to backward references. 421 // Add object to backward references.
424 void AddBackRef(intptr_t id, 422 void AddBackRef(intptr_t id,
425 Object* obj, 423 Object* obj,
426 DeserializeState state, 424 DeserializeState state,
427 bool defer_canonicalization = false); 425 bool defer_canonicalization = false);
428 426
429 // Get an object from the backward references list. 427 // Get an object from the backward references list.
430 Object* GetBackRef(intptr_t id); 428 Object* GetBackRef(intptr_t id);
431 429
432 // Read a script snapshot. 430 // Read a script snapshot.
433 RawObject* ReadScriptSnapshot(); 431 RawObject* ReadScriptSnapshot();
434 432
435 // Read version number of snapshot and verify. 433 // Read version number of snapshot and verify.
436 RawApiError* VerifyVersionAndFeatures(); 434 RawApiError* VerifyVersionAndFeatures();
437 435
438 // Helper functions for creating uninitialized versions
439 // of various object types. These are used when reading a
440 // full snapshot.
441 RawArray* NewArray(intptr_t len);
442 RawImmutableArray* NewImmutableArray(intptr_t len);
443 RawOneByteString* NewOneByteString(intptr_t len);
444 RawTwoByteString* NewTwoByteString(intptr_t len);
445 RawTypeArguments* NewTypeArguments(intptr_t len);
446 RawTokenStream* NewTokenStream(intptr_t len);
447 RawContext* NewContext(intptr_t num_variables);
448 RawClass* NewClass(intptr_t class_id);
449 RawInstance* NewInstance();
450 RawMint* NewMint(int64_t value);
451 RawBigint* NewBigint();
452 RawTypedData* NewTypedData(intptr_t class_id, intptr_t len);
453 RawDouble* NewDouble(double value);
454 RawUnresolvedClass* NewUnresolvedClass();
455 RawType* NewType();
456 RawTypeRef* NewTypeRef();
457 RawTypeParameter* NewTypeParameter();
458 RawBoundedType* NewBoundedType();
459 RawMixinAppType* NewMixinAppType();
460 RawPatchClass* NewPatchClass();
461 RawClosure* NewClosure();
462 RawClosureData* NewClosureData();
463 RawRedirectionData* NewRedirectionData();
464 RawFunction* NewFunction();
465 RawCode* NewCode(intptr_t pointer_offsets_length);
466 RawObjectPool* NewObjectPool(intptr_t length);
467 RawPcDescriptors* NewPcDescriptors(intptr_t length);
468 RawCodeSourceMap* NewCodeSourceMap(intptr_t length);
469 RawLocalVarDescriptors* NewLocalVarDescriptors(intptr_t num_entries);
470 RawExceptionHandlers* NewExceptionHandlers(intptr_t num_entries);
471 RawStackmap* NewStackmap(intptr_t length);
472 RawContextScope* NewContextScope(intptr_t num_variables);
473 RawICData* NewICData();
474 RawMegamorphicCache* NewMegamorphicCache();
475 RawSubtypeTestCache* NewSubtypeTestCache();
476 RawLinkedHashMap* NewLinkedHashMap();
477 RawField* NewField();
478 RawLibrary* NewLibrary();
479 RawLibraryPrefix* NewLibraryPrefix();
480 RawNamespace* NewNamespace();
481 RawScript* NewScript();
482 RawLiteralToken* NewLiteralToken();
483 RawGrowableObjectArray* NewGrowableObjectArray();
484 RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3);
485 RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
486 RawFloat64x2* NewFloat64x2(double v0, double v1);
487 RawApiError* NewApiError();
488 RawLanguageError* NewLanguageError();
489 RawUnhandledException* NewUnhandledException();
490 RawObject* NewInteger(int64_t value); 436 RawObject* NewInteger(int64_t value);
491 RawStacktrace* NewStacktrace();
492 RawWeakProperty* NewWeakProperty();
493 RawRegExp* NewRegExp();
494
495 uword GetInstructionsAt(int32_t offset) {
496 return instructions_reader_->GetInstructionsAt(offset);
497 }
498
499 RawObject* GetObjectAt(int32_t offset) {
500 return instructions_reader_->GetObjectAt(offset);
501 }
502
503 const uint8_t* instructions_buffer_;
504 const uint8_t* data_buffer_;
505 437
506 protected: 438 protected:
507 SnapshotReader(const uint8_t* buffer, 439 SnapshotReader(const uint8_t* buffer,
508 intptr_t size, 440 intptr_t size,
509 const uint8_t* instructions_buffer,
510 const uint8_t* data_buffer,
511 Snapshot::Kind kind, 441 Snapshot::Kind kind,
512 ZoneGrowableArray<BackRefNode>* backward_references, 442 ZoneGrowableArray<BackRefNode>* backward_references,
513 Thread* thread); 443 Thread* thread);
514 ~SnapshotReader() { } 444 ~SnapshotReader() { }
515 445
516 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const { 446 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const {
517 return backward_references_; 447 return backward_references_;
518 } 448 }
519 void ResetBackwardReferenceTable() { backward_references_ = NULL; } 449 void ResetBackwardReferenceTable() { backward_references_ = NULL; }
520 PageSpace* old_space() const { return old_space_; } 450 PageSpace* old_space() const { return old_space_; }
521 451
522 private: 452 private:
523 // Allocate uninitialized objects, this is used when reading a full snapshot.
524 RawObject* AllocateUninitialized(intptr_t class_id, intptr_t size);
525
526 RawClass* ReadClassId(intptr_t object_id); 453 RawClass* ReadClassId(intptr_t object_id);
527 RawFunction* ReadFunctionId(intptr_t object_id); 454 RawFunction* ReadFunctionId(intptr_t object_id);
528 RawObject* ReadStaticImplicitClosure(intptr_t object_id, intptr_t cls_header); 455 RawObject* ReadStaticImplicitClosure(intptr_t object_id, intptr_t cls_header);
529 456
530 // Implementation to read an object. 457 // Implementation to read an object.
531 RawObject* ReadObjectImpl(bool as_reference, 458 RawObject* ReadObjectImpl(bool as_reference,
532 intptr_t patch_object_id = kInvalidPatchIndex, 459 intptr_t patch_object_id = kInvalidPatchIndex,
533 intptr_t patch_offset = 0); 460 intptr_t patch_offset = 0);
534 RawObject* ReadObjectImpl(intptr_t header, 461 RawObject* ReadObjectImpl(intptr_t header,
535 bool as_reference, 462 bool as_reference,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 Array& array_; // Temporary Array handle. 513 Array& array_; // Temporary Array handle.
587 Field& field_; // Temporary Field handle. 514 Field& field_; // Temporary Field handle.
588 String& str_; // Temporary String handle. 515 String& str_; // Temporary String handle.
589 Library& library_; // Temporary library handle. 516 Library& library_; // Temporary library handle.
590 AbstractType& type_; // Temporary type handle. 517 AbstractType& type_; // Temporary type handle.
591 TypeArguments& type_arguments_; // Temporary type argument handle. 518 TypeArguments& type_arguments_; // Temporary type argument handle.
592 GrowableObjectArray& tokens_; // Temporary tokens handle. 519 GrowableObjectArray& tokens_; // Temporary tokens handle.
593 TokenStream& stream_; // Temporary token stream handle. 520 TokenStream& stream_; // Temporary token stream handle.
594 ExternalTypedData& data_; // Temporary stream data handle. 521 ExternalTypedData& data_; // Temporary stream data handle.
595 TypedData& typed_data_; // Temporary typed data handle. 522 TypedData& typed_data_; // Temporary typed data handle.
596 Code& code_; // Temporary code handle.
597 Function& function_; // Temporary function handle. 523 Function& function_; // Temporary function handle.
598 MegamorphicCache& megamorphic_cache_; // Temporary megamorphic cache handle.
599 UnhandledException& error_; // Error handle. 524 UnhandledException& error_; // Error handle.
600 intptr_t max_vm_isolate_object_id_; 525 intptr_t max_vm_isolate_object_id_;
601 ZoneGrowableArray<BackRefNode>* backward_references_; 526 ZoneGrowableArray<BackRefNode>* backward_references_;
602 InstructionsReader* instructions_reader_;
603 527
604 friend class ApiError; 528 friend class ApiError;
605 friend class Array; 529 friend class Array;
606 friend class Bigint; 530 friend class Bigint;
607 friend class BoundedType; 531 friend class BoundedType;
608 friend class Class; 532 friend class Class;
609 friend class Closure; 533 friend class Closure;
610 friend class ClosureData; 534 friend class ClosureData;
611 friend class Code;
612 friend class Context; 535 friend class Context;
613 friend class ContextScope; 536 friend class ContextScope;
614 friend class ExceptionHandlers; 537 friend class ExceptionHandlers;
615 friend class Field; 538 friend class Field;
616 friend class Function; 539 friend class Function;
617 friend class GrowableObjectArray; 540 friend class GrowableObjectArray;
618 friend class ICData; 541 friend class ICData;
619 friend class ImmutableArray; 542 friend class ImmutableArray;
620 friend class Instructions;
621 friend class RegExp; 543 friend class RegExp;
622 friend class LanguageError; 544 friend class LanguageError;
623 friend class Library; 545 friend class Library;
624 friend class LibraryPrefix; 546 friend class LibraryPrefix;
625 friend class LinkedHashMap; 547 friend class LinkedHashMap;
626 friend class LiteralToken; 548 friend class LiteralToken;
627 friend class LocalVarDescriptors;
628 friend class MegamorphicCache;
629 friend class MirrorReference; 549 friend class MirrorReference;
630 friend class MixinAppType; 550 friend class MixinAppType;
631 friend class Namespace; 551 friend class Namespace;
632 friend class ObjectPool;
633 friend class PatchClass; 552 friend class PatchClass;
634 friend class RedirectionData; 553 friend class RedirectionData;
635 friend class Script; 554 friend class Script;
636 friend class Stacktrace;
637 friend class SubtypeTestCache; 555 friend class SubtypeTestCache;
638 friend class TokenStream; 556 friend class TokenStream;
639 friend class Type; 557 friend class Type;
640 friend class TypeArguments; 558 friend class TypeArguments;
641 friend class TypeParameter; 559 friend class TypeParameter;
642 friend class TypeRef; 560 friend class TypeRef;
643 friend class UnhandledException; 561 friend class UnhandledException;
644 friend class UnresolvedClass; 562 friend class UnresolvedClass;
645 friend class WeakProperty; 563 friend class WeakProperty;
646 DISALLOW_COPY_AND_ASSIGN(SnapshotReader); 564 DISALLOW_COPY_AND_ASSIGN(SnapshotReader);
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 856
939 857
940 class SnapshotWriter : public BaseWriter { 858 class SnapshotWriter : public BaseWriter {
941 protected: 859 protected:
942 SnapshotWriter(Thread* thread, 860 SnapshotWriter(Thread* thread,
943 Snapshot::Kind kind, 861 Snapshot::Kind kind,
944 uint8_t** buffer, 862 uint8_t** buffer,
945 ReAlloc alloc, 863 ReAlloc alloc,
946 intptr_t initial_size, 864 intptr_t initial_size,
947 ForwardList* forward_list, 865 ForwardList* forward_list,
948 InstructionsWriter* instructions_writer, 866 bool can_send_any_object);
949 bool can_send_any_object,
950 bool writing_vm_isolate = false);
951 867
952 public: 868 public:
953 // Snapshot kind. 869 // Snapshot kind.
954 Snapshot::Kind kind() const { return kind_; } 870 Snapshot::Kind kind() const { return kind_; }
955 Thread* thread() const { return thread_; } 871 Thread* thread() const { return thread_; }
956 Zone* zone() const { return thread_->zone(); } 872 Zone* zone() const { return thread_->zone(); }
957 Isolate* isolate() const { return thread_->isolate(); } 873 Isolate* isolate() const { return thread_->isolate(); }
958 Heap* heap() const { return isolate()->heap(); } 874 Heap* heap() const { return isolate()->heap(); }
959 875
960 // Serialize an object into the buffer. 876 // Serialize an object into the buffer.
961 void WriteObject(RawObject* raw); 877 void WriteObject(RawObject* raw);
962 878
963 uword GetObjectTags(RawObject* raw); 879 uword GetObjectTags(RawObject* raw);
964 880
965 Exceptions::ExceptionType exception_type() const { 881 Exceptions::ExceptionType exception_type() const {
966 return exception_type_; 882 return exception_type_;
967 } 883 }
968 void set_exception_type(Exceptions::ExceptionType type) { 884 void set_exception_type(Exceptions::ExceptionType type) {
969 exception_type_ = type; 885 exception_type_ = type;
970 } 886 }
971 const char* exception_msg() const { return exception_msg_; } 887 const char* exception_msg() const { return exception_msg_; }
972 void set_exception_msg(const char* msg) { 888 void set_exception_msg(const char* msg) {
973 exception_msg_ = msg; 889 exception_msg_ = msg;
974 } 890 }
975 bool can_send_any_object() const { return can_send_any_object_; } 891 bool can_send_any_object() const { return can_send_any_object_; }
976 bool writing_vm_isolate() const { return writing_vm_isolate_; }
977 void ThrowException(Exceptions::ExceptionType type, const char* msg); 892 void ThrowException(Exceptions::ExceptionType type, const char* msg);
978 893
979 // Write a version string for the snapshot. 894 // Write a version string for the snapshot.
980 void WriteVersionAndFeatures(); 895 void WriteVersionAndFeatures();
981 896
982 int32_t GetInstructionsId(RawInstructions* instructions, RawCode* code) {
983 return instructions_writer_->GetOffsetFor(instructions, code);
984 }
985
986 int32_t GetObjectId(RawObject* raw) {
987 return instructions_writer_->GetObjectOffsetFor(raw);
988 }
989
990 void WriteFunctionId(RawFunction* func, bool owner_is_class); 897 void WriteFunctionId(RawFunction* func, bool owner_is_class);
991 898
992 RawFunction* IsSerializableClosure(RawClosure* closure); 899 RawFunction* IsSerializableClosure(RawClosure* closure);
993 900
994 void WriteStaticImplicitClosure(intptr_t object_id, 901 void WriteStaticImplicitClosure(intptr_t object_id,
995 RawFunction* func, 902 RawFunction* func,
996 intptr_t tags); 903 intptr_t tags);
997 904
998 protected: 905 protected:
999 bool CheckAndWritePredefinedObject(RawObject* raw); 906 bool CheckAndWritePredefinedObject(RawObject* raw);
(...skipping 25 matching lines...) Expand all
1025 intptr_t FindVmSnapshotObject(RawObject* rawobj); 932 intptr_t FindVmSnapshotObject(RawObject* rawobj);
1026 933
1027 ObjectStore* object_store() const { return object_store_; } 934 ObjectStore* object_store() const { return object_store_; }
1028 935
1029 private: 936 private:
1030 Thread* thread_; 937 Thread* thread_;
1031 Snapshot::Kind kind_; 938 Snapshot::Kind kind_;
1032 ObjectStore* object_store_; // Object store for common classes. 939 ObjectStore* object_store_; // Object store for common classes.
1033 ClassTable* class_table_; // Class table for the class index to class lookup. 940 ClassTable* class_table_; // Class table for the class index to class lookup.
1034 ForwardList* forward_list_; 941 ForwardList* forward_list_;
1035 InstructionsWriter* instructions_writer_;
1036 Exceptions::ExceptionType exception_type_; // Exception type. 942 Exceptions::ExceptionType exception_type_; // Exception type.
1037 const char* exception_msg_; // Message associated with exception. 943 const char* exception_msg_; // Message associated with exception.
1038 bool unmarked_objects_; // True if marked objects have been unmarked.
1039 bool can_send_any_object_; // True if any Dart instance can be sent. 944 bool can_send_any_object_; // True if any Dart instance can be sent.
1040 bool writing_vm_isolate_;
1041 945
1042 friend class RawArray; 946 friend class RawArray;
1043 friend class RawClass; 947 friend class RawClass;
1044 friend class RawClosureData; 948 friend class RawClosureData;
1045 friend class RawCode; 949 friend class RawCode;
1046 friend class RawContextScope; 950 friend class RawContextScope;
1047 friend class RawExceptionHandlers; 951 friend class RawExceptionHandlers;
1048 friend class RawField; 952 friend class RawField;
1049 friend class RawFunction; 953 friend class RawFunction;
1050 friend class RawGrowableObjectArray; 954 friend class RawGrowableObjectArray;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 private: 1021 private:
1118 SnapshotWriter* writer_; 1022 SnapshotWriter* writer_;
1119 bool as_references_; 1023 bool as_references_;
1120 1024
1121 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); 1025 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor);
1122 }; 1026 };
1123 1027
1124 } // namespace dart 1028 } // namespace dart
1125 1029
1126 #endif // VM_SNAPSHOT_H_ 1030 #endif // VM_SNAPSHOT_H_
OLDNEW
« no previous file with comments | « runtime/vm/raw_object_snapshot.cc ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698