724 {
726
728
729 bool any_failed = false;
730 intptr_t bytes_evacuated = 0;
734
735 bool page_failed = false;
739 while (current < end) {
741 intptr_t
size = obj->untag()->HeapSize();
742
743 if (obj->untag()->IsMarked()) {
745 if (copied == 0) {
746 obj->untag()->ClearIsEvacuationCandidateUnsynchronized();
747 page_failed = true;
748 any_failed = true;
749 } else {
751 bytes_evacuated +=
size;
752 objcpy(
reinterpret_cast<void*
>(copied),
753 reinterpret_cast<const void*
>(current),
size);
755
756 copied_obj->untag()->ClearIsEvacuationCandidateUnsynchronized();
758 static_cast<TypedDataPtr>(copied_obj)
760 ->RecomputeDataField();
761 }
762
765 }
766 }
767
769 }
770
771 if (page_failed) {
772 page->set_evacuation_candidate(
false);
773 }
774 }
775
778#if defined(SUPPORT_TIMELINE)
779 tbes.SetNumArguments(1);
780 tbes.FormatArgument(0,
"bytes_evacuated",
"%" Pd, bytes_evacuated);
781#endif
782
783 if (any_failed) {
785 }
786 }
bool NextEvacPage(Page **page)
static ForwardingCorpse * AsForwarder(uword addr, intptr_t size)
void set_target(ObjectPtr target)
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
DART_FORCE_INLINE uword TryAllocatePromoLocked(FreeList *freelist, intptr_t size)
void AcquireLock(FreeList *freelist)
void ReleaseLock(FreeList *freelist)
static Page * Of(ObjectPtr obj)
RelaxedAtomic< intptr_t > used_in_words
static Thread * Current()
static ObjectPtr FromAddr(uword addr)
bool IsTypedDataClassId(intptr_t index)
constexpr intptr_t kWordSizeLog2
raw_obj untag() -> num_entries()) VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(TypedData, TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(Record, RecordShape(raw_obj->untag() ->shape()).num_fields()) VARIABLE_NULL_VISITOR(CompressedStackMaps, CompressedStackMaps::PayloadSizeOf(raw_obj)) VARIABLE_NULL_VISITOR(OneByteString, Smi::Value(raw_obj->untag() ->length())) VARIABLE_NULL_VISITOR(TwoByteString, Smi::Value(raw_obj->untag() ->length())) intptr_t UntaggedField::VisitFieldPointers(FieldPtr raw_obj, ObjectPointerVisitor *visitor)
static void objcpy(void *dst, const void *src, size_t size)
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)