OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 | 2 |
3 #include <stdlib.h> | 3 #include <stdlib.h> |
4 | 4 |
5 #include "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #include "compilation-cache.h" | 7 #include "compilation-cache.h" |
8 #include "execution.h" | 8 #include "execution.h" |
9 #include "factory.h" | 9 #include "factory.h" |
10 #include "macro-assembler.h" | 10 #include "macro-assembler.h" |
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 Handle<String> ascii_str = | 813 Handle<String> ascii_str = |
814 FACTORY->NewStringFromUtf8(Vector<const char>(ascii, length)); | 814 FACTORY->NewStringFromUtf8(Vector<const char>(ascii, length)); |
815 ascii_str->Hash(); | 815 ascii_str->Hash(); |
816 CHECK_EQ(length, ascii_str->length()); | 816 CHECK_EQ(length, ascii_str->length()); |
817 DeleteArray(non_ascii); | 817 DeleteArray(non_ascii); |
818 DeleteArray(ascii); | 818 DeleteArray(ascii); |
819 } | 819 } |
820 } | 820 } |
821 | 821 |
822 | 822 |
823 static int ObjectsFoundInHeap(Handle<Object> objs[], int size) { | 823 static int ObjectsFoundInHeap(Heap* heap, Handle<Object> objs[], int size) { |
824 // Count the number of objects found in the heap. | 824 // Count the number of objects found in the heap. |
825 int found_count = 0; | 825 int found_count = 0; |
826 HeapIterator iterator; | 826 HeapIterator iterator(heap); |
827 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 827 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
828 for (int i = 0; i < size; i++) { | 828 for (int i = 0; i < size; i++) { |
829 if (*objs[i] == obj) { | 829 if (*objs[i] == obj) { |
830 found_count++; | 830 found_count++; |
831 } | 831 } |
832 } | 832 } |
833 } | 833 } |
834 return found_count; | 834 return found_count; |
835 } | 835 } |
836 | 836 |
(...skipping 25 matching lines...) Expand all Loading... |
862 for (int i = 0; i < large_size - 1; ++i) str[i] = 'a'; | 862 for (int i = 0; i < large_size - 1; ++i) str[i] = 'a'; |
863 str[large_size - 1] = '\0'; | 863 str[large_size - 1] = '\0'; |
864 objs[next_objs_index++] = | 864 objs[next_objs_index++] = |
865 FACTORY->NewStringFromAscii(CStrVector(str), TENURED); | 865 FACTORY->NewStringFromAscii(CStrVector(str), TENURED); |
866 delete[] str; | 866 delete[] str; |
867 | 867 |
868 // Add a Map object to look for. | 868 // Add a Map object to look for. |
869 objs[next_objs_index++] = Handle<Map>(HeapObject::cast(*objs[0])->map()); | 869 objs[next_objs_index++] = Handle<Map>(HeapObject::cast(*objs[0])->map()); |
870 | 870 |
871 CHECK_EQ(objs_count, next_objs_index); | 871 CHECK_EQ(objs_count, next_objs_index); |
872 CHECK_EQ(objs_count, ObjectsFoundInHeap(objs, objs_count)); | 872 CHECK_EQ(objs_count, ObjectsFoundInHeap(HEAP, objs, objs_count)); |
873 } | 873 } |
874 | 874 |
875 | 875 |
876 TEST(EmptyHandleEscapeFrom) { | 876 TEST(EmptyHandleEscapeFrom) { |
877 InitializeVM(); | 877 InitializeVM(); |
878 | 878 |
879 v8::HandleScope scope; | 879 v8::HandleScope scope; |
880 Handle<JSObject> runaway; | 880 Handle<JSObject> runaway; |
881 | 881 |
882 { | 882 { |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 HEAP->old_pointer_space()->AdvanceSweeper(KB); | 1458 HEAP->old_pointer_space()->AdvanceSweeper(KB); |
1459 CHECK_EQ(initial_size, static_cast<int>(HEAP->SizeOfObjects())); | 1459 CHECK_EQ(initial_size, static_cast<int>(HEAP->SizeOfObjects())); |
1460 } | 1460 } |
1461 } | 1461 } |
1462 | 1462 |
1463 | 1463 |
1464 TEST(TestSizeOfObjectsVsHeapIteratorPrecision) { | 1464 TEST(TestSizeOfObjectsVsHeapIteratorPrecision) { |
1465 InitializeVM(); | 1465 InitializeVM(); |
1466 HEAP->EnsureHeapIsIterable(); | 1466 HEAP->EnsureHeapIsIterable(); |
1467 intptr_t size_of_objects_1 = HEAP->SizeOfObjects(); | 1467 intptr_t size_of_objects_1 = HEAP->SizeOfObjects(); |
1468 HeapIterator iterator; | 1468 HeapIterator iterator(HEAP); |
1469 intptr_t size_of_objects_2 = 0; | 1469 intptr_t size_of_objects_2 = 0; |
1470 for (HeapObject* obj = iterator.next(); | 1470 for (HeapObject* obj = iterator.next(); |
1471 obj != NULL; | 1471 obj != NULL; |
1472 obj = iterator.next()) { | 1472 obj = iterator.next()) { |
1473 if (!obj->IsFreeSpace()) { | 1473 if (!obj->IsFreeSpace()) { |
1474 size_of_objects_2 += obj->Size(); | 1474 size_of_objects_2 += obj->Size(); |
1475 } | 1475 } |
1476 } | 1476 } |
1477 // Delta must be within 5% of the larger result. | 1477 // Delta must be within 5% of the larger result. |
1478 // TODO(gc): Tighten this up by distinguishing between byte | 1478 // TODO(gc): Tighten this up by distinguishing between byte |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1579 CHECK(2 * old_capacity == new_capacity); | 1579 CHECK(2 * old_capacity == new_capacity); |
1580 FillUpNewSpace(new_space); | 1580 FillUpNewSpace(new_space); |
1581 HEAP->CollectAllAvailableGarbage(); | 1581 HEAP->CollectAllAvailableGarbage(); |
1582 new_capacity = new_space->Capacity(); | 1582 new_capacity = new_space->Capacity(); |
1583 CHECK(old_capacity == new_capacity); | 1583 CHECK(old_capacity == new_capacity); |
1584 } | 1584 } |
1585 | 1585 |
1586 | 1586 |
1587 static int NumberOfGlobalObjects() { | 1587 static int NumberOfGlobalObjects() { |
1588 int count = 0; | 1588 int count = 0; |
1589 HeapIterator iterator; | 1589 HeapIterator iterator(HEAP); |
1590 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 1590 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
1591 if (obj->IsGlobalObject()) count++; | 1591 if (obj->IsGlobalObject()) count++; |
1592 } | 1592 } |
1593 return count; | 1593 return count; |
1594 } | 1594 } |
1595 | 1595 |
1596 | 1596 |
1597 // Test that we don't embed maps from foreign contexts into | 1597 // Test that we don't embed maps from foreign contexts into |
1598 // optimized code. | 1598 // optimized code. |
1599 TEST(LeakNativeContextViaMap) { | 1599 TEST(LeakNativeContextViaMap) { |
(...skipping 1230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2830 // Now optimize the function so that it is taken off the candidate list. | 2830 // Now optimize the function so that it is taken off the candidate list. |
2831 { | 2831 { |
2832 HandleScope inner_scope; | 2832 HandleScope inner_scope; |
2833 CompileRun("%OptimizeFunctionOnNextCall(f); f(3);"); | 2833 CompileRun("%OptimizeFunctionOnNextCall(f); f(3);"); |
2834 } | 2834 } |
2835 | 2835 |
2836 // This cycle will bust the heap and subsequent cycles will go ballistic. | 2836 // This cycle will bust the heap and subsequent cycles will go ballistic. |
2837 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 2837 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
2838 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 2838 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
2839 } | 2839 } |
OLD | NEW |