Fix live bytes counter in large object space after right trimming.
BUG=chromium:609761 LOG=NO Review-Url: https://codereview.chromium.org/1964143004 Cr-Commit-Position: refs/heads/master@{#36183}
This commit is contained in:
parent
be8c688ade
commit
12fa3fff65
@ -3078,7 +3078,9 @@ void Heap::AdjustLiveBytes(HeapObject* object, int by, InvocationMode mode) {
|
||||
// the heap using HeapIterator, we can update the live byte count. We cannot
|
||||
// update while using HeapIterator because the iterator is temporarily
|
||||
// marking the whole object graph, without updating live bytes.
|
||||
if (!in_heap_iterator() &&
|
||||
if (lo_space()->Contains(object)) {
|
||||
lo_space()->AdjustLiveBytes(by);
|
||||
} else if (!in_heap_iterator() &&
|
||||
!mark_compact_collector()->sweeping_in_progress() &&
|
||||
Marking::IsBlack(Marking::MarkBitFrom(object->address()))) {
|
||||
if (mode == SEQUENTIAL_TO_SWEEPER) {
|
||||
|
@ -3057,6 +3057,8 @@ class LargeObjectSpace : public Space {
|
||||
// Checks whether the space is empty.
|
||||
bool IsEmpty() { return first_page_ == NULL; }
|
||||
|
||||
void AdjustLiveBytes(int by) { objects_size_ += by; }
|
||||
|
||||
LargePage* first_page() { return first_page_; }
|
||||
|
||||
#ifdef VERIFY_HEAP
|
||||
|
@ -6743,5 +6743,18 @@ TEST(Regress598319) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Regress609761) {
|
||||
CcTest::InitializeVM();
|
||||
v8::HandleScope scope(CcTest::isolate());
|
||||
Heap* heap = CcTest::heap();
|
||||
Isolate* isolate = heap->isolate();
|
||||
|
||||
intptr_t size_before = heap->SizeOfObjects();
|
||||
Handle<FixedArray> array = isolate->factory()->NewFixedArray(200000);
|
||||
array->Shrink(1);
|
||||
intptr_t size_after = heap->SizeOfObjects();
|
||||
CHECK_EQ(size_after, size_before + array->Size());
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
} // namespace v8
|
||||
|
Loading…
Reference in New Issue
Block a user