Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(437)

Side by Side Diff: src/heap/heap.cc

Issue 1632913003: [heap] Move to page lookups for SemiSpace, NewSpace, and Heap containment methods (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix arm Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/heap.h" 5 #include "src/heap/heap.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/ast/scopeinfo.h" 9 #include "src/ast/scopeinfo.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 int len) { 1100 int len) {
1101 if (len == 0) return; 1101 if (len == 0) return;
1102 1102
1103 DCHECK(array->map() != fixed_cow_array_map()); 1103 DCHECK(array->map() != fixed_cow_array_map());
1104 Object** dst_objects = array->data_start() + dst_index; 1104 Object** dst_objects = array->data_start() + dst_index;
1105 MemMove(dst_objects, array->data_start() + src_index, len * kPointerSize); 1105 MemMove(dst_objects, array->data_start() + src_index, len * kPointerSize);
1106 if (!InNewSpace(array)) { 1106 if (!InNewSpace(array)) {
1107 for (int i = 0; i < len; i++) { 1107 for (int i = 0; i < len; i++) {
1108 // TODO(hpayer): check store buffer for entries 1108 // TODO(hpayer): check store buffer for entries
1109 if (InNewSpace(dst_objects[i])) { 1109 if (InNewSpace(dst_objects[i])) {
1110 RecordWrite(array->address(), array->OffsetOfElementAt(dst_index + i)); 1110 RecordWrite(array, array->OffsetOfElementAt(dst_index + i));
1111 } 1111 }
1112 } 1112 }
1113 } 1113 }
1114 incremental_marking()->RecordWrites(array); 1114 incremental_marking()->RecordWrites(array);
1115 } 1115 }
1116 1116
1117 1117
1118 #ifdef VERIFY_HEAP 1118 #ifdef VERIFY_HEAP
1119 // Helper class for verifying the string table. 1119 // Helper class for verifying the string table.
1120 class StringTableVerifier : public ObjectVisitor { 1120 class StringTableVerifier : public ObjectVisitor {
(...skipping 3237 matching lines...) Expand 10 before | Expand all | Expand 10 after
4358 } 4358 }
4359 4359
4360 #endif // DEBUG 4360 #endif // DEBUG
4361 4361
4362 bool Heap::Contains(HeapObject* value) { return Contains(value->address()); } 4362 bool Heap::Contains(HeapObject* value) { return Contains(value->address()); }
4363 4363
4364 4364
4365 bool Heap::Contains(Address addr) { 4365 bool Heap::Contains(Address addr) {
4366 if (isolate_->memory_allocator()->IsOutsideAllocatedSpace(addr)) return false; 4366 if (isolate_->memory_allocator()->IsOutsideAllocatedSpace(addr)) return false;
4367 return HasBeenSetUp() && 4367 return HasBeenSetUp() &&
4368 (new_space_.ToSpaceContains(addr) || old_space_->Contains(addr) || 4368 (new_space_.ToSpaceContainsSlow(addr) || old_space_->Contains(addr) ||
Hannes Payer (out of office) 2016/02/08 16:05:40 If ToSpaceContains takes an object, this check wil
Michael Lippautz 2016/02/08 18:00:38 Done.
4369 code_space_->Contains(addr) || map_space_->Contains(addr) || 4369 code_space_->Contains(addr) || map_space_->Contains(addr) ||
4370 lo_space_->SlowContains(addr)); 4370 lo_space_->SlowContains(addr));
4371 } 4371 }
4372 4372
4373 4373
4374 bool Heap::InSpace(HeapObject* value, AllocationSpace space) { 4374 bool Heap::InSpace(HeapObject* value, AllocationSpace space) {
4375 return InSpace(value->address(), space); 4375 return InSpace(value->address(), space);
4376 } 4376 }
4377 4377
4378 4378
4379 bool Heap::InSpace(Address addr, AllocationSpace space) { 4379 bool Heap::InSpace(Address addr, AllocationSpace space) {
4380 if (isolate_->memory_allocator()->IsOutsideAllocatedSpace(addr)) return false; 4380 if (isolate_->memory_allocator()->IsOutsideAllocatedSpace(addr)) return false;
4381 if (!HasBeenSetUp()) return false; 4381 if (!HasBeenSetUp()) return false;
4382 4382
4383 switch (space) { 4383 switch (space) {
4384 case NEW_SPACE: 4384 case NEW_SPACE:
4385 return new_space_.ToSpaceContains(addr); 4385 return new_space_.ToSpaceContainsSlow(addr);
4386 case OLD_SPACE: 4386 case OLD_SPACE:
4387 return old_space_->Contains(addr); 4387 return old_space_->Contains(addr);
4388 case CODE_SPACE: 4388 case CODE_SPACE:
4389 return code_space_->Contains(addr); 4389 return code_space_->Contains(addr);
4390 case MAP_SPACE: 4390 case MAP_SPACE:
4391 return map_space_->Contains(addr); 4391 return map_space_->Contains(addr);
4392 case LO_SPACE: 4392 case LO_SPACE:
4393 return lo_space_->SlowContains(addr); 4393 return lo_space_->SlowContains(addr);
4394 } 4394 }
4395 UNREACHABLE(); 4395 UNREACHABLE();
(...skipping 1826 matching lines...) Expand 10 before | Expand all | Expand 10 after
6222 } 6222 }
6223 6223
6224 6224
6225 // static 6225 // static
6226 int Heap::GetStaticVisitorIdForMap(Map* map) { 6226 int Heap::GetStaticVisitorIdForMap(Map* map) {
6227 return StaticVisitorBase::GetVisitorId(map); 6227 return StaticVisitorBase::GetVisitorId(map);
6228 } 6228 }
6229 6229
6230 } // namespace internal 6230 } // namespace internal
6231 } // namespace v8 6231 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698