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 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 } | 409 } |
410 | 410 |
411 // Write out a buffer of bytes. | 411 // Write out a buffer of bytes. |
412 void WriteBytes(const uint8_t* addr, intptr_t len) { | 412 void WriteBytes(const uint8_t* addr, intptr_t len) { |
413 stream_.WriteBytes(addr, len); | 413 stream_.WriteBytes(addr, len); |
414 } | 414 } |
415 | 415 |
416 protected: | 416 protected: |
417 BaseWriter(uint8_t** buffer, | 417 BaseWriter(uint8_t** buffer, |
418 ReAlloc alloc, | 418 ReAlloc alloc, |
419 intptr_t increment_size) : stream_(buffer, alloc, increment_size) { | 419 intptr_t initial_size) : stream_(buffer, alloc, initial_size) { |
420 ASSERT(buffer != NULL); | 420 ASSERT(buffer != NULL); |
421 ASSERT(alloc != NULL); | 421 ASSERT(alloc != NULL); |
422 } | 422 } |
423 ~BaseWriter() { } | 423 ~BaseWriter() { } |
424 | 424 |
425 void ReserveHeader() { | 425 void ReserveHeader() { |
426 // Make room for recording snapshot buffer size. | 426 // Make room for recording snapshot buffer size. |
427 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize); | 427 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize); |
428 } | 428 } |
429 | 429 |
430 void FillHeader(Snapshot::Kind kind) { | 430 void FillHeader(Snapshot::Kind kind) { |
431 int32_t* data = reinterpret_cast<int32_t*>(stream_.buffer()); | 431 int32_t* data = reinterpret_cast<int32_t*>(stream_.buffer()); |
432 data[Snapshot::kLengthIndex] = stream_.bytes_written(); | 432 data[Snapshot::kLengthIndex] = stream_.bytes_written(); |
433 data[Snapshot::kSnapshotFlagIndex] = kind; | 433 data[Snapshot::kSnapshotFlagIndex] = kind; |
434 } | 434 } |
435 | 435 |
436 private: | 436 private: |
437 WriteStream stream_; | 437 WriteStream stream_; |
438 | 438 |
439 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); | 439 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); |
440 }; | 440 }; |
441 | 441 |
442 | 442 |
443 class SnapshotWriter : public BaseWriter { | 443 class SnapshotWriter : public BaseWriter { |
444 protected: | 444 protected: |
445 SnapshotWriter(Snapshot::Kind kind, | 445 SnapshotWriter(Snapshot::Kind kind, |
446 uint8_t** buffer, | 446 uint8_t** buffer, |
447 ReAlloc alloc, | 447 ReAlloc alloc, |
448 intptr_t increment_size); | 448 intptr_t initial_size); |
449 | 449 |
450 public: | 450 public: |
451 // Snapshot kind. | 451 // Snapshot kind. |
452 Snapshot::Kind kind() const { return kind_; } | 452 Snapshot::Kind kind() const { return kind_; } |
453 | 453 |
454 // Serialize an object into the buffer. | 454 // Serialize an object into the buffer. |
455 void WriteObject(RawObject* raw); | 455 void WriteObject(RawObject* raw); |
456 | 456 |
457 uword GetObjectTags(RawObject* raw); | 457 uword GetObjectTags(RawObject* raw); |
458 | 458 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 friend class RawScript; | 527 friend class RawScript; |
528 friend class RawTokenStream; | 528 friend class RawTokenStream; |
529 friend class RawTypeArguments; | 529 friend class RawTypeArguments; |
530 friend class SnapshotWriterVisitor; | 530 friend class SnapshotWriterVisitor; |
531 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); | 531 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); |
532 }; | 532 }; |
533 | 533 |
534 | 534 |
535 class FullSnapshotWriter : public SnapshotWriter { | 535 class FullSnapshotWriter : public SnapshotWriter { |
536 public: | 536 public: |
537 static const intptr_t kIncrementSize = 64 * KB; | 537 static const intptr_t kInitialSize = 64 * KB; |
538 FullSnapshotWriter(uint8_t** buffer, ReAlloc alloc) | 538 FullSnapshotWriter(uint8_t** buffer, ReAlloc alloc) |
539 : SnapshotWriter(Snapshot::kFull, buffer, alloc, kIncrementSize) { | 539 : SnapshotWriter(Snapshot::kFull, buffer, alloc, kInitialSize) { |
540 ASSERT(buffer != NULL); | 540 ASSERT(buffer != NULL); |
541 ASSERT(alloc != NULL); | 541 ASSERT(alloc != NULL); |
542 } | 542 } |
543 ~FullSnapshotWriter() { } | 543 ~FullSnapshotWriter() { } |
544 | 544 |
545 // Writes a full snapshot of the Isolate. | 545 // Writes a full snapshot of the Isolate. |
546 void WriteFullSnapshot(); | 546 void WriteFullSnapshot(); |
547 | 547 |
548 private: | 548 private: |
549 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); | 549 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); |
550 }; | 550 }; |
551 | 551 |
552 | 552 |
553 class ScriptSnapshotWriter : public SnapshotWriter { | 553 class ScriptSnapshotWriter : public SnapshotWriter { |
554 public: | 554 public: |
555 static const intptr_t kIncrementSize = 64 * KB; | 555 static const intptr_t kInitialSize = 64 * KB; |
556 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc) | 556 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc) |
557 : SnapshotWriter(Snapshot::kScript, buffer, alloc, kIncrementSize) { | 557 : SnapshotWriter(Snapshot::kScript, buffer, alloc, kInitialSize) { |
558 ASSERT(buffer != NULL); | 558 ASSERT(buffer != NULL); |
559 ASSERT(alloc != NULL); | 559 ASSERT(alloc != NULL); |
560 } | 560 } |
561 ~ScriptSnapshotWriter() { } | 561 ~ScriptSnapshotWriter() { } |
562 | 562 |
563 // Writes a partial snapshot of the script. | 563 // Writes a partial snapshot of the script. |
564 void WriteScriptSnapshot(const Library& lib); | 564 void WriteScriptSnapshot(const Library& lib); |
565 | 565 |
566 private: | 566 private: |
567 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter); | 567 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter); |
568 }; | 568 }; |
569 | 569 |
570 | 570 |
571 class MessageWriter : public SnapshotWriter { | 571 class MessageWriter : public SnapshotWriter { |
572 public: | 572 public: |
573 static const intptr_t kIncrementSize = 512; | 573 static const intptr_t kInitialSize = 512; |
574 MessageWriter(uint8_t** buffer, ReAlloc alloc) | 574 MessageWriter(uint8_t** buffer, ReAlloc alloc) |
575 : SnapshotWriter(Snapshot::kMessage, buffer, alloc, kIncrementSize) { | 575 : SnapshotWriter(Snapshot::kMessage, buffer, alloc, kInitialSize) { |
576 ASSERT(buffer != NULL); | 576 ASSERT(buffer != NULL); |
577 ASSERT(alloc != NULL); | 577 ASSERT(alloc != NULL); |
578 } | 578 } |
579 ~MessageWriter() { } | 579 ~MessageWriter() { } |
580 | 580 |
581 void WriteMessage(const Object& obj); | 581 void WriteMessage(const Object& obj); |
582 | 582 |
583 private: | 583 private: |
584 DISALLOW_COPY_AND_ASSIGN(MessageWriter); | 584 DISALLOW_COPY_AND_ASSIGN(MessageWriter); |
585 }; | 585 }; |
(...skipping 18 matching lines...) Expand all Loading... |
604 private: | 604 private: |
605 SnapshotWriter* writer_; | 605 SnapshotWriter* writer_; |
606 bool as_references_; | 606 bool as_references_; |
607 | 607 |
608 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 608 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
609 }; | 609 }; |
610 | 610 |
611 } // namespace dart | 611 } // namespace dart |
612 | 612 |
613 #endif // VM_SNAPSHOT_H_ | 613 #endif // VM_SNAPSHOT_H_ |
OLD | NEW |