51 return object->IsHeapObject() &&
object->IsForwardingCorpse();
58 return forwarder->
target();
69 FATAL(
"become: ForwardObjectTo failure.");
73 if (size_before != size_after) {
74 FATAL(
"become: Before and after sizes do not match.");
83 visiting_object_(nullptr) {}
97 new_target = old_target;
99 if (visiting_object_ ==
nullptr) {
109#if defined(DART_COMPRESSED_POINTERS)
114 ObjectPtr old_target =
p->Decompress(heap_base);
124 new_target = old_target;
126 if (visiting_object_ ==
nullptr) {
140 visiting_object_ = obj;
143 if ((obj !=
nullptr) && obj->IsOldObject() &&
161 : pointer_visitor_(pointer_visitor) {}
195#if defined(TARGET_ARCH_IA32)
196class WritableCodeLiteralsScope :
public ValueObject {
199 if (FLAG_write_protect_code) {
200 heap_->WriteProtectCode(
false);
205 if (FLAG_write_protect_code) {
206 heap_->WriteProtectCode(
true);
224 group->set_become(
this);
232 pointers_.Add(before.
ptr());
233 pointers_.Add(after.
ptr());
237 if (pointers_.length() != 0) {
264 before->IsHeapObject() ? before->
untag()->
tags() : 0);
266 after->IsHeapObject() ? after->
untag()->
tags() : 0);
276 if (pointers_.length() == 0) {
287 for (intptr_t
i = 0;
i < pointers_.length();
i += 2) {
291 if (before == after) {
294 if (before->IsImmediateObject()) {
297 if (after->IsImmediateObject()) {
314 heap->ForwardWeakEntries(before, after);
315#if defined(HASH_IN_OBJECT_HEADER)
316 Object::SetCachedHashIfNotSet(after, Object::GetCachedHash(before));
323 for (intptr_t
i = 0;
i < pointers_.length();
i += 2) {
324 ASSERT(pointers_[
i] == pointers_[
i + 1]);
334 Heap* heap = isolate_group->heap();
337 isolate_group->ReleaseStoreBuffers();
338 isolate_group->store_buffer()->Reset();
346 heap->VisitObjects(&object_visitor);
351 isolate_group->VisitObjectPointers(&pointer_visitor,
354 isolate_group->ForEachIsolate(
357 if (ring !=
nullptr) {
366 isolate_group->VisitWeakPersistentHandles(&handle_visitor);
static void FollowForwardingPointers(Thread *thread)
static void MakeDummyObject(const Instance &instance)
void VisitObjectPointers(ObjectPointerVisitor *visitor)
void Add(const Object &before, const Object &after)
static constexpr uword update(ClassIdTagType value, uword original)
ForwardHeapPointersHandleVisitor(Thread *thread)
void VisitHandle(uword addr) override
void VisitObject(ObjectPtr obj) override
ForwardHeapPointersVisitor(ForwardPointersVisitor *pointer_visitor)
void VisitPointers(ObjectPtr *first, ObjectPtr *last) override
ForwardPointersVisitor(Thread *thread)
void VisitingObject(ObjectPtr obj)
static ForwardingCorpse * AsForwarder(uword addr, intptr_t size)
void set_target(ObjectPtr target)
void set_become(Become *become)
ObjectIdRing * object_id_ring() const
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
void VisitPointers(ObjectPointerVisitor *visitor)
virtual void VisitPointers(ObjectPtr *first, ObjectPtr *last)=0
IsolateGroup * isolate_group() const
void VisitCompressedPointers(uword heap_base, CompressedObjectPtr *first, CompressedObjectPtr *last)
bool IsFreeListElement() const
UntaggedObject * untag() const
bool IsForwardingCorpse() const
virtual const char * ToCString() const
static intptr_t tags_offset()
static Thread * Current()
IsolateGroup * isolate_group() const
static constexpr uword update(intptr_t size, uword tag)
static constexpr intptr_t kMaxSizeTag
void StorePointer(type const *addr, type value)
void StoreCompressedArrayPointer(compressed_type const *addr, type value)
void StoreArrayPointer(type const *addr, value_type value)
bool IsCardRemembered() const
intptr_t HeapSize() const
bool InVMIsolateHeap() const
void ClearRememberedBit()
intptr_t VisitPointers(ObjectPointerVisitor *visitor)
bool IsRemembered() const
void StoreCompressedPointer(compressed_type const *addr, type value)
static constexpr bool IsAligned(T x, uintptr_t alignment, uintptr_t offset=0)
~WritableCodeLiteralsScope()
WritableCodeLiteralsScope(Heap *heap)
DART_NOINLINE static DART_NORETURN void InvalidForwarding(ObjectPtr before, ObjectPtr after, const char *message)
static ObjectPtr GetForwardedObject(ObjectPtr object)
static constexpr intptr_t kOldObjectAlignmentOffset
static constexpr intptr_t kNewObjectAlignmentOffset
static void ForwardObjectTo(ObjectPtr before_obj, ObjectPtr after_obj)
static bool IsDummyObject(ObjectPtr object)
static bool IsForwardingObject(ObjectPtr object)
static constexpr intptr_t kObjectAlignment
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
#define TIMELINE_FUNCTION_GC_DURATION(thread, name)
#define OFFSET_OF(type, field)