16#if defined(CPPGC_YOUNG_GENERATION)
19 std::is_trivially_default_constructible_v<AgeTable>,
20 "To support lazy committing, AgeTable must be trivially constructible");
22void AgeTable::SetAgeForRange(uintptr_t offset_begin, uintptr_t offset_end,
24 AdjacentCardsPolicy adjacent_cards_policy) {
26 const uintptr_t inner_card_offset_begin =
27 RoundUp(offset_begin, kCardSizeInBytes);
28 const uintptr_t outer_card_offset_end =
31 for (
auto inner_offset = inner_card_offset_begin;
32 inner_offset < outer_card_offset_end; inner_offset += kCardSizeInBytes)
33 SetAge(inner_offset, age);
37 const auto set_age_for_outer_card =
38 [
this, age, adjacent_cards_policy](uintptr_t
offset) {
40 if (adjacent_cards_policy == AdjacentCardsPolicy::kIgnore)
42 else if (GetAge(
offset) != age)
43 SetAge(
offset, AgeTable::Age::kMixed);
46 set_age_for_outer_card(offset_begin);
47 set_age_for_outer_card(offset_end);
50AgeTable::Age AgeTable::GetAgeForRange(uintptr_t offset_begin,
51 uintptr_t offset_end)
const {
52 Age
result = GetAge(offset_begin);
53 for (
auto offset = offset_begin + kCardSizeInBytes;
offset < offset_end;
54 offset += kCardSizeInBytes) {
60void AgeTable::ResetForTesting() {
61 std::fill(&
table_[0], &
table_[CagedHeapBase::GetAgeTableSize()], Age::kOld);
ZoneVector< RpoNumber > & result
SourcePositionTable *const table_
constexpr T RoundUp(T x, intptr_t m)
constexpr T RoundDown(T x, intptr_t m)
constexpr bool IsAligned(T value, U alignment)