OLD | NEW |
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 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 }; | 417 }; |
418 }; | 418 }; |
419 | 419 |
420 | 420 |
421 // Reads a message snapshot into C structure. | 421 // Reads a message snapshot into C structure. |
422 class CMessageReader : public BaseReader { | 422 class CMessageReader : public BaseReader { |
423 public: | 423 public: |
424 CMessageReader(const uint8_t* buffer, intptr_t length, ReAlloc alloc); | 424 CMessageReader(const uint8_t* buffer, intptr_t length, ReAlloc alloc); |
425 ~CMessageReader() { } | 425 ~CMessageReader() { } |
426 | 426 |
427 Dart_CMessage* ReadMessage(); | 427 Dart_CObject* ReadMessage(); |
428 | 428 |
429 private: | 429 private: |
430 // Allocates a Dart_CObject object on the C heap. | 430 // Allocates a Dart_CObject object on the C heap. |
431 Dart_CObject* AllocateDartCObject(); | 431 Dart_CObject* AllocateDartCObject(); |
432 // Allocates a Dart_CObject object with the specified type on the C heap. | 432 // Allocates a Dart_CObject object with the specified type on the C heap. |
433 Dart_CObject* AllocateDartCObject(Dart_CObject::Type type); | 433 Dart_CObject* AllocateDartCObject(Dart_CObject::Type type); |
434 // Allocates a Dart_CObject object for the null object on the C heap. | 434 // Allocates a Dart_CObject object for the null object on the C heap. |
435 Dart_CObject* AllocateDartCObjectNull(); | 435 Dart_CObject* AllocateDartCObjectNull(); |
436 // Allocates a Dart_CObject object for a boolean object on the C heap. | 436 // Allocates a Dart_CObject object for a boolean object on the C heap. |
437 Dart_CObject* AllocateDartCObjectBool(bool value); | 437 Dart_CObject* AllocateDartCObjectBool(bool value); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 | 524 |
525 private: | 525 private: |
526 WriteStream stream_; | 526 WriteStream stream_; |
527 | 527 |
528 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); | 528 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); |
529 }; | 529 }; |
530 | 530 |
531 | 531 |
532 class MessageWriter : public BaseWriter { | 532 class MessageWriter : public BaseWriter { |
533 public: | 533 public: |
534 MessageWriter(uint8_t** buffer, ReAlloc alloc) : BaseWriter(buffer, alloc) { | 534 MessageWriter(uint8_t** buffer, ReAlloc alloc) |
| 535 : BaseWriter(buffer, alloc), object_id_(0) { |
| 536 ASSERT(kDartCObjectTypeMask >= Dart_CObject::kNumberOfTypes); |
535 } | 537 } |
536 ~MessageWriter() { } | 538 ~MessageWriter() { } |
537 | 539 |
538 // Writes a message of integers. | 540 // Writes a message of integers. |
539 void WriteMessage(intptr_t field_count, intptr_t *data); | 541 void WriteMessage(intptr_t field_count, intptr_t *data); |
540 | 542 |
| 543 void WriteCMessage(Dart_CObject* object); |
| 544 |
541 void FinalizeBuffer() { | 545 void FinalizeBuffer() { |
542 BaseWriter::FinalizeBuffer(Snapshot::kMessage); | 546 BaseWriter::FinalizeBuffer(Snapshot::kMessage); |
543 } | 547 } |
544 | 548 |
545 private: | 549 private: |
| 550 static const intptr_t kDartCObjectTypeBits = 3; |
| 551 static const intptr_t kDartCObjectTypeMask = (1 << kDartCObjectTypeBits) - 1; |
| 552 static const intptr_t kDartCObjectMarkMask = ~kDartCObjectTypeMask; |
| 553 static const intptr_t kDartCObjectMarkOffset = 1; |
| 554 |
| 555 void MarkCObject(Dart_CObject* object, intptr_t object_id); |
| 556 void UnmarkCObject(Dart_CObject* object); |
| 557 bool IsCObjectMarked(Dart_CObject* object); |
| 558 intptr_t GetMarkedCObjectMark(Dart_CObject* object); |
| 559 void UnmarkAllCObjects(Dart_CObject* object); |
| 560 |
| 561 void WriteSmi(int32_t value); |
| 562 void WriteInlinedHeader(Dart_CObject* object); |
| 563 void WriteCObject(Dart_CObject* object); |
| 564 |
| 565 intptr_t object_id_; |
| 566 |
546 DISALLOW_COPY_AND_ASSIGN(MessageWriter); | 567 DISALLOW_COPY_AND_ASSIGN(MessageWriter); |
547 }; | 568 }; |
548 | 569 |
549 | 570 |
550 class SnapshotWriter : public BaseWriter { | 571 class SnapshotWriter : public BaseWriter { |
551 public: | 572 public: |
552 SnapshotWriter(Snapshot::Kind kind, uint8_t** buffer, ReAlloc alloc) | 573 SnapshotWriter(Snapshot::Kind kind, uint8_t** buffer, ReAlloc alloc) |
553 : BaseWriter(buffer, alloc), | 574 : BaseWriter(buffer, alloc), |
554 kind_(kind), | 575 kind_(kind), |
555 object_store_(Isolate::Current()->object_store()), | 576 object_store_(Isolate::Current()->object_store()), |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 | 655 |
635 private: | 656 private: |
636 SnapshotWriter* writer_; | 657 SnapshotWriter* writer_; |
637 | 658 |
638 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 659 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
639 }; | 660 }; |
640 | 661 |
641 } // namespace dart | 662 } // namespace dart |
642 | 663 |
643 #endif // VM_SNAPSHOT_H_ | 664 #endif // VM_SNAPSHOT_H_ |
OLD | NEW |