1// Copyright 2020 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "src/heap/cppgc/heap-space.h" 6 7#include <algorithm> 8 9#include "src/base/logging.h" 10#include "src/base/platform/mutex.h" 11#include "src/heap/cppgc/heap-page.h" 12#include "src/heap/cppgc/object-start-bitmap.h" 13 14namespace cppgc { 15namespace internal { 16 17BaseSpace::BaseSpace(RawHeap* heap, size_t index, PageType type, 18 bool is_compactable) 19 : heap_(heap), index_(index), type_(type), is_compactable_(is_compactable) { 20 USE(is_compactable_); 21} 22 23BaseSpace::~BaseSpace() = default; 24 25void BaseSpace::AddPage(BasePage* page) { 26 v8::base::LockGuard<v8::base::Mutex> lock(&pages_mutex_); 27 DCHECK_EQ(pages_.cend(), std::find(pages_.cbegin(), pages_.cend(), page)); 28 pages_.push_back(page); 29} 30 31void BaseSpace::RemovePage(BasePage* page) { 32 v8::base::LockGuard<v8::base::Mutex> lock(&pages_mutex_); 33 auto it = std::find(pages_.cbegin(), pages_.cend(), page); 34 DCHECK_NE(pages_.cend(), it); 35 pages_.erase(it); 36} 37 38BaseSpace::Pages BaseSpace::RemoveAllPages() { 39 Pages pages = std::move(pages_); 40 pages_.clear(); 41 return pages; 42} 43 44NormalPageSpace::NormalPageSpace(RawHeap* heap, size_t index, 45 bool is_compactable) 46 : BaseSpace(heap, index, PageType::kNormal, is_compactable) {} 47 48LargePageSpace::LargePageSpace(RawHeap* heap, size_t index) 49 : BaseSpace(heap, index, PageType::kLarge, false /* is_compactable */) {} 50 51} // namespace internal 52} // namespace cppgc 53