Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | List of all members
dart::FullSnapshotWriter Class Reference

#include <app_snapshot.h>

Public Member Functions

 FullSnapshotWriter (Snapshot::Kind kind, NonStreamingWriteStream *vm_snapshot_data, NonStreamingWriteStream *isolate_snapshot_data, ImageWriter *vm_image_writer, ImageWriter *iso_image_writer)
 
 ~FullSnapshotWriter ()
 
void WriteFullSnapshot (GrowableArray< LoadingUnitSerializationData * > *data=nullptr)
 
void WriteUnitSnapshot (GrowableArray< LoadingUnitSerializationData * > *units, LoadingUnitSerializationData *unit, uint32_t program_hash)
 
intptr_t VmIsolateSnapshotSize () const
 
intptr_t IsolateSnapshotSize () const
 

Static Public Attributes

static constexpr intptr_t kInitialSize = 64 * KB
 

Detailed Description

Definition at line 106 of file app_snapshot.h.

Constructor & Destructor Documentation

◆ FullSnapshotWriter()

dart::FullSnapshotWriter::FullSnapshotWriter ( Snapshot::Kind  kind,
NonStreamingWriteStream vm_snapshot_data,
NonStreamingWriteStream isolate_snapshot_data,
ImageWriter vm_image_writer,
ImageWriter iso_image_writer 
)

Definition at line 9592 of file app_snapshot.cc.

9598 : thread_(Thread::Current()),
9599 kind_(kind),
9600 vm_snapshot_data_(vm_snapshot_data),
9601 isolate_snapshot_data_(isolate_snapshot_data),
9602 vm_isolate_snapshot_size_(0),
9603 isolate_snapshot_size_(0),
9604 vm_image_writer_(vm_image_writer),
9605 isolate_image_writer_(isolate_image_writer) {
9606 ASSERT(isolate_group() != nullptr);
9607 ASSERT(heap() != nullptr);
9608 ObjectStore* object_store = isolate_group()->object_store();
9609 ASSERT(object_store != nullptr);
9610
9611#if defined(DEBUG)
9612 isolate_group()->ValidateClassTable();
9613#endif // DEBUG
9614
9615#if defined(DART_PRECOMPILER)
9616 if (FLAG_write_v8_snapshot_profile_to != nullptr) {
9617 profile_writer_ = new (zone()) V8SnapshotProfileWriter(zone());
9618 }
9619#endif
9620}
ObjectStore * object_store() const
Definition isolate.h:505
static Thread * Current()
Definition thread.h:361
#define ASSERT(E)

◆ ~FullSnapshotWriter()

dart::FullSnapshotWriter::~FullSnapshotWriter ( )

Definition at line 9622 of file app_snapshot.cc.

9622{}

Member Function Documentation

◆ IsolateSnapshotSize()

intptr_t dart::FullSnapshotWriter::IsolateSnapshotSize ( ) const
inline

Definition at line 124 of file app_snapshot.h.

124{ return isolate_snapshot_size_; }

◆ VmIsolateSnapshotSize()

intptr_t dart::FullSnapshotWriter::VmIsolateSnapshotSize ( ) const
inline

Definition at line 123 of file app_snapshot.h.

123{ return vm_isolate_snapshot_size_; }

◆ WriteFullSnapshot()

void dart::FullSnapshotWriter::WriteFullSnapshot ( GrowableArray< LoadingUnitSerializationData * > *  data = nullptr)

Definition at line 9742 of file app_snapshot.cc.

9743 {
9744 ZoneGrowableArray<Object*>* objects;
9745 if (vm_snapshot_data_ != nullptr) {
9746 objects = WriteVMSnapshot();
9747 } else {
9748 objects = nullptr;
9749 }
9750
9751 if (isolate_snapshot_data_ != nullptr) {
9752 WriteProgramSnapshot(objects, data);
9753 }
9754
9755 if (FLAG_print_snapshot_sizes) {
9756 OS::Print("VMIsolate(CodeSize): %" Pd "\n", clustered_vm_size_);
9757 OS::Print("Isolate(CodeSize): %" Pd "\n", clustered_isolate_size_);
9758 OS::Print("ReadOnlyData(CodeSize): %" Pd "\n", mapped_data_size_);
9759 OS::Print("Instructions(CodeSize): %" Pd "\n", mapped_text_size_);
9760 OS::Print("Total(CodeSize): %" Pd "\n",
9761 clustered_vm_size_ + clustered_isolate_size_ + mapped_data_size_ +
9762 mapped_text_size_);
9763 OS::Print("VMIsolate(HeapSize): %" Pd "\n", heap_vm_size_);
9764 OS::Print("Isolate(HeapSize): %" Pd "\n", heap_isolate_size_);
9765 OS::Print("Total(HeapSize): %" Pd "\n", heap_vm_size_ + heap_isolate_size_);
9766 }
9767
9768#if defined(DART_PRECOMPILER)
9769 if (FLAG_write_v8_snapshot_profile_to != nullptr) {
9770 profile_writer_->Write(FLAG_write_v8_snapshot_profile_to);
9771 }
9772#endif
9773}
static void Print(const char *format,...) PRINTF_ATTRIBUTE(1
static int8_t data[kExtLength]
#define Pd
Definition globals.h:408

◆ WriteUnitSnapshot()

void dart::FullSnapshotWriter::WriteUnitSnapshot ( GrowableArray< LoadingUnitSerializationData * > *  units,
LoadingUnitSerializationData unit,
uint32_t  program_hash 
)

Definition at line 9704 of file app_snapshot.cc.

9707 {
9708 TIMELINE_DURATION(thread(), Isolate, "WriteUnitSnapshot");
9709
9710 Serializer serializer(thread(), kind_, isolate_snapshot_data_,
9711 isolate_image_writer_, /*vm=*/false, profile_writer_);
9712 serializer.set_loading_units(units);
9713 serializer.set_current_loading_unit_id(unit->id());
9714
9715 serializer.ReserveHeader();
9716 serializer.WriteVersionAndFeatures(false);
9717 serializer.Write(program_hash);
9718
9719 UnitSerializationRoots roots(unit);
9720 unit->set_objects(serializer.Serialize(&roots));
9721
9722 serializer.FillHeader(serializer.kind());
9723 clustered_isolate_size_ = serializer.bytes_written();
9724
9725 if (Snapshot::IncludesCode(kind_)) {
9726 isolate_image_writer_->SetProfileWriter(profile_writer_);
9727 isolate_image_writer_->Write(serializer.stream(), false);
9728#if defined(DART_PRECOMPILER)
9729 isolate_image_writer_->DumpStatistics();
9730#endif
9731
9732 mapped_data_size_ += isolate_image_writer_->data_size();
9733 mapped_text_size_ += isolate_image_writer_->text_size();
9734 isolate_image_writer_->ResetOffsets();
9735 isolate_image_writer_->ClearProfileWriter();
9736 }
9737
9738 // The clustered part + the direct mapped data part.
9739 isolate_snapshot_size_ = serializer.bytes_written();
9740}
void Write(NonStreamingWriteStream *clustered_stream, bool vm)
void SetProfileWriter(V8SnapshotProfileWriter *profile_writer)
intptr_t text_size() const
intptr_t data_size() const
static bool IncludesCode(Kind kind)
Definition snapshot.h:67
#define TIMELINE_DURATION(thread, stream, name)
Definition timeline.h:39

Member Data Documentation

◆ kInitialSize

constexpr intptr_t dart::FullSnapshotWriter::kInitialSize = 64 * KB
staticconstexpr

Definition at line 108 of file app_snapshot.h.


The documentation for this class was generated from the following files: