class UpdateVisitor { public:
uint8_t operator()(uint8_t c) const { // Must map zero to zero. Never applied to zero. return c == 0 ? 0 : c * 93 + 123;
} voidoperator()(uint8_t* /*card*/, uint8_t /*expected_value*/, uint8_t /*new_value*/) const {
}
};
TEST_F(CardTableTest, TestModifyCardsAtomic) {
CommonSetup();
FillRandom(); const size_t delta = std::min(static_cast<size_t>(HeapLimit() - HeapBegin()), 8U * CardTable::kCardSize);
UpdateVisitor visitor;
size_t start_offset = 0; for (uint8_t* cstart = HeapBegin(); cstart < HeapBegin() + delta; cstart += CardTable::kCardSize) {
start_offset = (start_offset + kObjectAlignment) % CardTable::kCardSize;
size_t end_offset = 0; for (uint8_t* cend = HeapLimit() - delta; cend < HeapLimit(); cend += CardTable::kCardSize) { // Don't always start at a card boundary.
uint8_t* start = cstart + start_offset;
uint8_t* end = cend - end_offset;
end_offset = (end_offset + kObjectAlignment) % CardTable::kCardSize; // Modify cards.
card_table_->ModifyCardsAtomic(start, end, visitor, visitor); // Check adjacent cards not modified. for (uint8_t* cur = start - CardTable::kCardSize; cur >= HeapBegin();
cur -= CardTable::kCardSize) {
EXPECT_EQ(card_table_->GetCard(reinterpret_cast<mirror::Object*>(cur)),
PseudoRandomCard(cur));
} for (uint8_t* cur = end + CardTable::kCardSize; cur < HeapLimit();
cur += CardTable::kCardSize) {
EXPECT_EQ(card_table_->GetCard(reinterpret_cast<mirror::Object*>(cur)),
PseudoRandomCard(cur));
} // Verify Range. for (uint8_t* cur = start; cur < AlignUp(end, CardTable::kCardSize);
cur += CardTable::kCardSize) {
uint8_t* card = card_table_->CardFromAddr(cur);
uint8_t value = PseudoRandomCard(cur);
EXPECT_EQ(visitor(value), *card); // Restore for next iteration.
*card = value;
}
}
}
}
// TODO: Add test for CardTable::Scan.
} // namespace accounting
} // namespace gc
} // namespace art
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.