diff options
Diffstat (limited to 'chromium/v8/src/heap/cppgc/caged-heap-local-data.cc')
| -rw-r--r-- | chromium/v8/src/heap/cppgc/caged-heap-local-data.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/chromium/v8/src/heap/cppgc/caged-heap-local-data.cc b/chromium/v8/src/heap/cppgc/caged-heap-local-data.cc new file mode 100644 index 00000000000..55ededdc087 --- /dev/null +++ b/chromium/v8/src/heap/cppgc/caged-heap-local-data.cc @@ -0,0 +1,36 @@ +// Copyright 2020 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/cppgc/internal/caged-heap-local-data.h" + +#include <algorithm> +#include <type_traits> + +#include "include/cppgc/platform.h" +#include "src/base/macros.h" + +namespace cppgc { +namespace internal { + +#if defined(CPPGC_YOUNG_GENERATION) + +static_assert( + std::is_trivially_default_constructible<AgeTable>::value, + "To support lazy committing, AgeTable must be trivially constructible"); + +void AgeTable::Reset(PageAllocator* allocator) { + // TODO(chromium:1029379): Consider MADV_DONTNEED instead of MADV_FREE on + // POSIX platforms. + std::fill(table_.begin(), table_.end(), Age::kOld); + const uintptr_t begin = RoundUp(reinterpret_cast<uintptr_t>(table_.begin()), + allocator->CommitPageSize()); + const uintptr_t end = RoundDown(reinterpret_cast<uintptr_t>(table_.end()), + allocator->CommitPageSize()); + allocator->DiscardSystemPages(reinterpret_cast<void*>(begin), end - begin); +} + +#endif + +} // namespace internal +} // namespace cppgc |
