OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1078 lol->Sort(); | 1078 lol->Sort(); |
1079 lol = lol->prev_; | 1079 lol = lol->prev_; |
1080 } | 1080 } |
1081 } | 1081 } |
1082 | 1082 |
1083 | 1083 |
1084 // Counts the number of objects in the heap. | 1084 // Counts the number of objects in the heap. |
1085 static int CountHeapObjects() { | 1085 static int CountHeapObjects() { |
1086 int count = 0; | 1086 int count = 0; |
1087 // Iterate over all the heap spaces and count the number of objects. | 1087 // Iterate over all the heap spaces and count the number of objects. |
1088 HeapIterator iterator(HeapIterator::kFilterFreeListNodes); | 1088 HeapIterator iterator; |
1089 HeapObject* heap_obj = NULL; | 1089 HeapObject* heap_obj = NULL; |
1090 while ((heap_obj = iterator.next()) != NULL) { | 1090 while ((heap_obj = iterator.next()) != NULL) { |
1091 count++; | 1091 count++; |
1092 } | 1092 } |
1093 return count; | 1093 return count; |
1094 } | 1094 } |
1095 | 1095 |
1096 | 1096 |
1097 // Captures a current snapshot of all objects in the heap. | 1097 // Captures a current snapshot of all objects in the heap. |
1098 MaybeObject* LiveObjectList::Capture() { | 1098 MaybeObject* LiveObjectList::Capture() { |
(...skipping 16 matching lines...) Expand all Loading... |
1115 // Create a lol large enough to track all the objects. | 1115 // Create a lol large enough to track all the objects. |
1116 lol = new LiveObjectList(last_lol, count); | 1116 lol = new LiveObjectList(last_lol, count); |
1117 if (lol == NULL) { | 1117 if (lol == NULL) { |
1118 return NULL; // No memory to proceed. | 1118 return NULL; // No memory to proceed. |
1119 } | 1119 } |
1120 | 1120 |
1121 // The HeapIterator needs to be in its own scope because it disables | 1121 // The HeapIterator needs to be in its own scope because it disables |
1122 // allocation, and we need allocate below. | 1122 // allocation, and we need allocate below. |
1123 { | 1123 { |
1124 // Iterate over all the heap spaces and add the objects. | 1124 // Iterate over all the heap spaces and add the objects. |
1125 HeapIterator iterator(HeapIterator::kFilterFreeListNodes); | 1125 HeapIterator iterator; |
1126 HeapObject* heap_obj = NULL; | 1126 HeapObject* heap_obj = NULL; |
1127 bool failed = false; | 1127 bool failed = false; |
1128 while (!failed && (heap_obj = iterator.next()) != NULL) { | 1128 while (!failed && (heap_obj = iterator.next()) != NULL) { |
1129 failed = !lol->Add(heap_obj); | 1129 failed = !lol->Add(heap_obj); |
1130 size += heap_obj->Size(); | 1130 size += heap_obj->Size(); |
1131 } | 1131 } |
1132 ASSERT(!failed); | 1132 ASSERT(!failed); |
1133 | 1133 |
1134 lol->Sort(); | 1134 lol->Sort(); |
1135 | 1135 |
(...skipping 1370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2506 // and specified match_heap_exactly = true. | 2506 // and specified match_heap_exactly = true. |
2507 | 2507 |
2508 int number_of_heap_objects = 0; | 2508 int number_of_heap_objects = 0; |
2509 int number_of_matches = 0; | 2509 int number_of_matches = 0; |
2510 int number_not_in_heap = total_count; | 2510 int number_not_in_heap = total_count; |
2511 int number_not_in_lol = 0; | 2511 int number_not_in_lol = 0; |
2512 | 2512 |
2513 OS::Print(" Start verify ...\n"); | 2513 OS::Print(" Start verify ...\n"); |
2514 OS::Print(" Verifying ..."); | 2514 OS::Print(" Verifying ..."); |
2515 Flush(); | 2515 Flush(); |
2516 HeapIterator iterator(HeapIterator::kFilterFreeListNodes); | 2516 HeapIterator iterator; |
2517 HeapObject* heap_obj = NULL; | 2517 HeapObject* heap_obj = NULL; |
2518 while ((heap_obj = iterator.next()) != NULL) { | 2518 while ((heap_obj = iterator.next()) != NULL) { |
2519 number_of_heap_objects++; | 2519 number_of_heap_objects++; |
2520 | 2520 |
2521 // Check if the heap_obj is in the lol. | 2521 // Check if the heap_obj is in the lol. |
2522 Element key; | 2522 Element key; |
2523 key.obj_ = heap_obj; | 2523 key.obj_ = heap_obj; |
2524 | 2524 |
2525 Element* result = reinterpret_cast<Element*>( | 2525 Element* result = reinterpret_cast<Element*>( |
2526 bsearch(&key, elements, total_count, sizeof(Element), | 2526 bsearch(&key, elements, total_count, sizeof(Element), |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2622 i++, heap_obj, Heap::new_space()->FromSpaceStart()); | 2622 i++, heap_obj, Heap::new_space()->FromSpaceStart()); |
2623 } | 2623 } |
2624 } | 2624 } |
2625 } | 2625 } |
2626 #endif // VERIFY_LOL | 2626 #endif // VERIFY_LOL |
2627 | 2627 |
2628 | 2628 |
2629 } } // namespace v8::internal | 2629 } } // namespace v8::internal |
2630 | 2630 |
2631 #endif // LIVE_OBJECT_LIST | 2631 #endif // LIVE_OBJECT_LIST |
OLD | NEW |