Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index a63fd65d4bc6b2298a08bcdad7a62e160867ede8..6e50c980294c73f70f81cea18184a34e13a37332 100644 |
| --- a/src/runtime.cc |
| +++ b/src/runtime.cc |
| @@ -13126,14 +13126,6 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
| HandleScope scope(isolate); |
| ASSERT(args.length() == 3); |
| - // First perform a full GC in order to avoid references from dead objects. |
| - Heap* heap = isolate->heap(); |
| - heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugReferencedBy"); |
| - // The heap iterator reserves the right to do a GC to make the heap iterable. |
| - // Due to the GC above we know it won't need to do that, but it seems cleaner |
| - // to get the heap iterator constructed before we start having unprotected |
| - // Object* locals that are not protected by handles. |
| - |
| // Check parameters. |
| CONVERT_ARG_HANDLE_CHECKED(JSObject, target, 0); |
| CONVERT_ARG_HANDLE_CHECKED(Object, instance_filter, 1); |
| @@ -13151,6 +13143,10 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
| // Get the number of referencing objects. |
| int count; |
| + // First perform a full GC in order to avoid dead objects and to make the heap |
| + // iterable. |
| + Heap* heap = isolate->heap(); |
| + heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
|
Hannes Payer (out of office)
2014/05/18 18:25:43
Call MakeIterable instead.
Jarin
2014/05/19 06:06:42
I think this should still call CollectAllGarbage b
|
| HeapIterator heap_iterator(heap); |
| count = DebugReferencedBy(&heap_iterator, |
| *target, *instance_filter, max_references, |
| @@ -13160,8 +13156,7 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
| Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
| // Fill the referencing objects. |
| - // AllocateFixedArray above does not make the heap non-iterable. |
| - ASSERT(heap->IsHeapIterable()); |
| + heap->EnsureHeapIsIterable(); |
| HeapIterator heap_iterator2(heap); |
| count = DebugReferencedBy(&heap_iterator2, |
| *target, *instance_filter, max_references, |
| @@ -13216,9 +13211,6 @@ RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { |
| HandleScope scope(isolate); |
| ASSERT(args.length() == 2); |
| - // First perform a full GC in order to avoid dead objects. |
| - Heap* heap = isolate->heap(); |
| - heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
| // Check parameters. |
| CONVERT_ARG_HANDLE_CHECKED(JSFunction, constructor, 0); |
| @@ -13227,6 +13219,10 @@ RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { |
| // Get the number of referencing objects. |
| int count; |
| + // First perform a full GC in order to avoid dead objects and to make the heap |
| + // iterable. |
| + Heap* heap = isolate->heap(); |
| + heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "%DebugConstructedBy"); |
|
Hannes Payer (out of office)
2014/05/18 18:25:43
Call MakeIterable instead.
Jarin
2014/05/19 06:06:42
See above.
|
| HeapIterator heap_iterator(heap); |
| count = DebugConstructedBy(&heap_iterator, |
| *constructor, |
| @@ -13237,8 +13233,8 @@ RUNTIME_FUNCTION(Runtime_DebugConstructedBy) { |
| // Allocate an array to hold the result. |
| Handle<FixedArray> instances = isolate->factory()->NewFixedArray(count); |
| - ASSERT(heap->IsHeapIterable()); |
| // Fill the referencing objects. |
| + heap->EnsureHeapIsIterable(); |
| HeapIterator heap_iterator2(heap); |
| count = DebugConstructedBy(&heap_iterator2, |
| *constructor, |