Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
dart::UnitSerializationRoots Class Reference
Inheritance diagram for dart::UnitSerializationRoots:
dart::SerializationRoots

Public Member Functions

 UnitSerializationRoots (LoadingUnitSerializationData *unit)
 
void AddBaseObjects (Serializer *s)
 
void PushRoots (Serializer *s)
 
void WriteRoots (Serializer *s)
 
- Public Member Functions inherited from dart::SerializationRoots
virtual ~SerializationRoots ()
 
virtual const CompressedStackMapscanonicalized_stack_map_entries () const
 

Detailed Description

Definition at line 7224 of file app_snapshot.cc.

Constructor & Destructor Documentation

◆ UnitSerializationRoots()

dart::UnitSerializationRoots::UnitSerializationRoots ( LoadingUnitSerializationData unit)
inlineexplicit

Definition at line 7226 of file app_snapshot.cc.

7227 : unit_(unit) {}

Member Function Documentation

◆ AddBaseObjects()

void dart::UnitSerializationRoots::AddBaseObjects ( Serializer s)
inlinevirtual

Implements dart::SerializationRoots.

Definition at line 7229 of file app_snapshot.cc.

7229 {
7230 ZoneGrowableArray<Object*>* objects = unit_->parent()->objects();
7231 for (intptr_t i = 0; i < objects->length(); i++) {
7232 s->AddBaseObject(objects->At(i)->ptr());
7233 }
7234 }
ZoneGrowableArray< Object * > * objects()
LoadingUnitSerializationData * parent() const
struct MyStruct s

◆ PushRoots()

void dart::UnitSerializationRoots::PushRoots ( Serializer s)
inlinevirtual

Implements dart::SerializationRoots.

Definition at line 7236 of file app_snapshot.cc.

7236 {
7237 for (auto deferred_object : *unit_->deferred_objects()) {
7238 ASSERT(deferred_object->IsCode());
7239 CodePtr code = static_cast<CodePtr>(deferred_object->ptr());
7240 ObjectPoolPtr pool = code->untag()->object_pool_;
7241 if (pool != ObjectPool::null()) {
7242 const intptr_t length = pool->untag()->length_;
7243 uint8_t* entry_bits = pool->untag()->entry_bits();
7244 for (intptr_t i = 0; i < length; i++) {
7245 auto entry_type = ObjectPool::TypeBits::decode(entry_bits[i]);
7246 if (entry_type == ObjectPool::EntryType::kTaggedObject) {
7247 s->Push(pool->untag()->data()[i].raw_obj_);
7248 }
7249 }
7250 }
7251 s->Push(code->untag()->code_source_map_);
7252 }
7253 }
AutoreleasePool pool
static constexpr T decode(S value)
Definition bitfield.h:173
static ObjectPtr null()
Definition object.h:433
#define ASSERT(E)
size_t length

◆ WriteRoots()

void dart::UnitSerializationRoots::WriteRoots ( Serializer s)
inlinevirtual

Implements dart::SerializationRoots.

Definition at line 7255 of file app_snapshot.cc.

7255 {
7256#if defined(DART_PRECOMPILER)
7257 intptr_t start_index = 0;
7258 intptr_t num_deferred_objects = unit_->deferred_objects()->length();
7259 if (num_deferred_objects != 0) {
7260 start_index = s->RefId(unit_->deferred_objects()->At(0)->ptr());
7261 ASSERT(start_index > 0);
7262 }
7263 s->WriteUnsigned(start_index);
7264 s->WriteUnsigned(num_deferred_objects);
7265 for (intptr_t i = 0; i < num_deferred_objects; i++) {
7266 const Object* deferred_object = (*unit_->deferred_objects())[i];
7267 ASSERT(deferred_object->IsCode());
7268 CodePtr code = static_cast<CodePtr>(deferred_object->ptr());
7269 ASSERT(s->RefId(code) == (start_index + i));
7270 ASSERT(!Code::IsDiscarded(code));
7271 s->WriteInstructions(code->untag()->instructions_,
7272 code->untag()->unchecked_offset_, code, false);
7273 s->WriteRootRef(code->untag()->code_source_map_, "deferred-code");
7274 }
7275
7276 ObjectPoolPtr pool =
7277 s->isolate_group()->object_store()->global_object_pool();
7278 const intptr_t length = pool->untag()->length_;
7279 uint8_t* entry_bits = pool->untag()->entry_bits();
7280 intptr_t last_write = 0;
7281 for (intptr_t i = 0; i < length; i++) {
7282 auto entry_type = ObjectPool::TypeBits::decode(entry_bits[i]);
7283 if (entry_type == ObjectPool::EntryType::kTaggedObject) {
7284 if (s->IsWritten(pool->untag()->data()[i].raw_obj_)) {
7285 intptr_t skip = i - last_write;
7286 s->WriteUnsigned(skip);
7287 s->WriteRootRef(pool->untag()->data()[i].raw_obj_,
7288 "deferred-literal");
7289 last_write = i;
7290 }
7291 }
7292 }
7293 s->WriteUnsigned(length - last_write);
7294#endif
7295 }
static bool skip(SkStream *stream, size_t amount)
static bool IsDiscarded(const CodePtr code)
Definition object.h:6807
GrowableArray< Code * > * deferred_objects()

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