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

Side by Side Diff: src/heap-snapshot-generator.cc

Issue 16631002: Separate Cell and PropertyCell spaces (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove Mips changes Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/heap-snapshot-generator.h ('k') | src/hydrogen.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 13 matching lines...) Expand all
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #include "v8.h" 28 #include "v8.h"
29 29
30 #include "heap-snapshot-generator-inl.h" 30 #include "heap-snapshot-generator-inl.h"
31 31
32 #include "heap-profiler.h" 32 #include "heap-profiler.h"
33 #include "debug.h" 33 #include "debug.h"
34 #include "types.h"
34 35
35 namespace v8 { 36 namespace v8 {
36 namespace internal { 37 namespace internal {
37 38
38 39
39 HeapGraphEdge::HeapGraphEdge(Type type, const char* name, int from, int to) 40 HeapGraphEdge::HeapGraphEdge(Type type, const char* name, int from, int to)
40 : type_(type), 41 : type_(type),
41 from_index_(from), 42 from_index_(from),
42 to_index_(to), 43 to_index_(to),
43 name_(name) { 44 name_(name) {
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 const char* V8HeapExplorer::GetSystemEntryName(HeapObject* object) { 882 const char* V8HeapExplorer::GetSystemEntryName(HeapObject* object) {
882 switch (object->map()->instance_type()) { 883 switch (object->map()->instance_type()) {
883 case MAP_TYPE: 884 case MAP_TYPE:
884 switch (Map::cast(object)->instance_type()) { 885 switch (Map::cast(object)->instance_type()) {
885 #define MAKE_STRING_MAP_CASE(instance_type, size, name, Name) \ 886 #define MAKE_STRING_MAP_CASE(instance_type, size, name, Name) \
886 case instance_type: return "system / Map (" #Name ")"; 887 case instance_type: return "system / Map (" #Name ")";
887 STRING_TYPE_LIST(MAKE_STRING_MAP_CASE) 888 STRING_TYPE_LIST(MAKE_STRING_MAP_CASE)
888 #undef MAKE_STRING_MAP_CASE 889 #undef MAKE_STRING_MAP_CASE
889 default: return "system / Map"; 890 default: return "system / Map";
890 } 891 }
891 case JS_GLOBAL_PROPERTY_CELL_TYPE: return "system / JSGlobalPropertyCell"; 892 case CELL_TYPE: return "system / Cell";
893 case PROPERTY_CELL_TYPE: return "system / JSGlobalPropertyCell";
892 case FOREIGN_TYPE: return "system / Foreign"; 894 case FOREIGN_TYPE: return "system / Foreign";
893 case ODDBALL_TYPE: return "system / Oddball"; 895 case ODDBALL_TYPE: return "system / Oddball";
894 #define MAKE_STRUCT_CASE(NAME, Name, name) \ 896 #define MAKE_STRUCT_CASE(NAME, Name, name) \
895 case NAME##_TYPE: return "system / "#Name; 897 case NAME##_TYPE: return "system / "#Name;
896 STRUCT_LIST(MAKE_STRUCT_CASE) 898 STRUCT_LIST(MAKE_STRUCT_CASE)
897 #undef MAKE_STRUCT_CASE 899 #undef MAKE_STRUCT_CASE
898 default: return "system"; 900 default: return "system";
899 } 901 }
900 } 902 }
901 903
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 } else if (obj->IsMap()) { 971 } else if (obj->IsMap()) {
970 ExtractMapReferences(entry, Map::cast(obj)); 972 ExtractMapReferences(entry, Map::cast(obj));
971 } else if (obj->IsSharedFunctionInfo()) { 973 } else if (obj->IsSharedFunctionInfo()) {
972 ExtractSharedFunctionInfoReferences(entry, SharedFunctionInfo::cast(obj)); 974 ExtractSharedFunctionInfoReferences(entry, SharedFunctionInfo::cast(obj));
973 } else if (obj->IsScript()) { 975 } else if (obj->IsScript()) {
974 ExtractScriptReferences(entry, Script::cast(obj)); 976 ExtractScriptReferences(entry, Script::cast(obj));
975 } else if (obj->IsCodeCache()) { 977 } else if (obj->IsCodeCache()) {
976 ExtractCodeCacheReferences(entry, CodeCache::cast(obj)); 978 ExtractCodeCacheReferences(entry, CodeCache::cast(obj));
977 } else if (obj->IsCode()) { 979 } else if (obj->IsCode()) {
978 ExtractCodeReferences(entry, Code::cast(obj)); 980 ExtractCodeReferences(entry, Code::cast(obj));
981 } else if (obj->IsCell()) {
982 ExtractCellReferences(entry, Cell::cast(obj));
983 extract_indexed_refs = false;
979 } else if (obj->IsJSGlobalPropertyCell()) { 984 } else if (obj->IsJSGlobalPropertyCell()) {
980 ExtractJSGlobalPropertyCellReferences( 985 ExtractJSGlobalPropertyCellReferences(
981 entry, JSGlobalPropertyCell::cast(obj)); 986 entry, JSGlobalPropertyCell::cast(obj));
982 extract_indexed_refs = false; 987 extract_indexed_refs = false;
983 } 988 }
984 if (extract_indexed_refs) { 989 if (extract_indexed_refs) {
985 SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset); 990 SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
986 IndexedReferencesExtractor refs_extractor(this, obj, entry); 991 IndexedReferencesExtractor refs_extractor(this, obj, entry);
987 obj->Iterate(&refs_extractor); 992 obj->Iterate(&refs_extractor);
988 } 993 }
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 SetInternalReference(code, entry, 1271 SetInternalReference(code, entry,
1267 "type_feedback_info", code->type_feedback_info(), 1272 "type_feedback_info", code->type_feedback_info(),
1268 Code::kTypeFeedbackInfoOffset); 1273 Code::kTypeFeedbackInfoOffset);
1269 } 1274 }
1270 SetInternalReference(code, entry, 1275 SetInternalReference(code, entry,
1271 "gc_metadata", code->gc_metadata(), 1276 "gc_metadata", code->gc_metadata(),
1272 Code::kGCMetadataOffset); 1277 Code::kGCMetadataOffset);
1273 } 1278 }
1274 1279
1275 1280
1281 void V8HeapExplorer::ExtractCellReferences(int entry, Cell* cell) {
1282 SetInternalReference(cell, entry, "value", cell->value());
1283 }
1284
1285
1276 void V8HeapExplorer::ExtractJSGlobalPropertyCellReferences( 1286 void V8HeapExplorer::ExtractJSGlobalPropertyCellReferences(
1277 int entry, JSGlobalPropertyCell* cell) { 1287 int entry, JSGlobalPropertyCell* cell) {
1278 SetInternalReference(cell, entry, "value", cell->value()); 1288 SetInternalReference(cell, entry, "value", cell->value());
1289 SetInternalReference(cell, entry, "type", cell->type());
1279 } 1290 }
1280 1291
1281 1292
1282 void V8HeapExplorer::ExtractClosureReferences(JSObject* js_obj, int entry) { 1293 void V8HeapExplorer::ExtractClosureReferences(JSObject* js_obj, int entry) {
1283 if (!js_obj->IsJSFunction()) return; 1294 if (!js_obj->IsJSFunction()) return;
1284 1295
1285 JSFunction* func = JSFunction::cast(js_obj); 1296 JSFunction* func = JSFunction::cast(js_obj);
1286 if (func->shared()->bound()) { 1297 if (func->shared()->bound()) {
1287 FixedArray* bindings = func->function_bindings(); 1298 FixedArray* bindings = func->function_bindings();
1288 SetNativeBindReference(js_obj, entry, "bound_this", 1299 SetNativeBindReference(js_obj, entry, "bound_this",
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1555 } 1566 }
1556 1567
1557 1568
1558 bool V8HeapExplorer::IsEssentialObject(Object* object) { 1569 bool V8HeapExplorer::IsEssentialObject(Object* object) {
1559 return object->IsHeapObject() 1570 return object->IsHeapObject()
1560 && !object->IsOddball() 1571 && !object->IsOddball()
1561 && object != heap_->empty_byte_array() 1572 && object != heap_->empty_byte_array()
1562 && object != heap_->empty_fixed_array() 1573 && object != heap_->empty_fixed_array()
1563 && object != heap_->empty_descriptor_array() 1574 && object != heap_->empty_descriptor_array()
1564 && object != heap_->fixed_array_map() 1575 && object != heap_->fixed_array_map()
1576 && object != heap_->cell_map()
1565 && object != heap_->global_property_cell_map() 1577 && object != heap_->global_property_cell_map()
1566 && object != heap_->shared_function_info_map() 1578 && object != heap_->shared_function_info_map()
1567 && object != heap_->free_space_map() 1579 && object != heap_->free_space_map()
1568 && object != heap_->one_pointer_filler_map() 1580 && object != heap_->one_pointer_filler_map()
1569 && object != heap_->two_pointer_filler_map(); 1581 && object != heap_->two_pointer_filler_map();
1570 } 1582 }
1571 1583
1572 1584
1573 void V8HeapExplorer::SetContextReference(HeapObject* parent_obj, 1585 void V8HeapExplorer::SetContextReference(HeapObject* parent_obj,
1574 int parent_entry, 1586 int parent_entry,
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
2203 Isolate::Current()->heap()->CollectAllGarbage( 2215 Isolate::Current()->heap()->CollectAllGarbage(
2204 Heap::kMakeHeapIterableMask, 2216 Heap::kMakeHeapIterableMask,
2205 "HeapSnapshotGenerator::GenerateSnapshot"); 2217 "HeapSnapshotGenerator::GenerateSnapshot");
2206 2218
2207 #ifdef VERIFY_HEAP 2219 #ifdef VERIFY_HEAP
2208 Heap* debug_heap = Isolate::Current()->heap(); 2220 Heap* debug_heap = Isolate::Current()->heap();
2209 CHECK(!debug_heap->old_data_space()->was_swept_conservatively()); 2221 CHECK(!debug_heap->old_data_space()->was_swept_conservatively());
2210 CHECK(!debug_heap->old_pointer_space()->was_swept_conservatively()); 2222 CHECK(!debug_heap->old_pointer_space()->was_swept_conservatively());
2211 CHECK(!debug_heap->code_space()->was_swept_conservatively()); 2223 CHECK(!debug_heap->code_space()->was_swept_conservatively());
2212 CHECK(!debug_heap->cell_space()->was_swept_conservatively()); 2224 CHECK(!debug_heap->cell_space()->was_swept_conservatively());
2225 CHECK(!debug_heap->property_cell_space()->
2226 was_swept_conservatively());
2213 CHECK(!debug_heap->map_space()->was_swept_conservatively()); 2227 CHECK(!debug_heap->map_space()->was_swept_conservatively());
2214 #endif 2228 #endif
2215 2229
2216 // The following code uses heap iterators, so we want the heap to be 2230 // The following code uses heap iterators, so we want the heap to be
2217 // stable. It should follow TagGlobalObjects as that can allocate. 2231 // stable. It should follow TagGlobalObjects as that can allocate.
2218 DisallowHeapAllocation no_alloc; 2232 DisallowHeapAllocation no_alloc;
2219 2233
2220 #ifdef VERIFY_HEAP 2234 #ifdef VERIFY_HEAP
2221 debug_heap->Verify(); 2235 debug_heap->Verify();
2222 #endif 2236 #endif
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
2654 2668
2655 2669
2656 void HeapSnapshotJSONSerializer::SortHashMap( 2670 void HeapSnapshotJSONSerializer::SortHashMap(
2657 HashMap* map, List<HashMap::Entry*>* sorted_entries) { 2671 HashMap* map, List<HashMap::Entry*>* sorted_entries) {
2658 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) 2672 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p))
2659 sorted_entries->Add(p); 2673 sorted_entries->Add(p);
2660 sorted_entries->Sort(SortUsingEntryValue); 2674 sorted_entries->Sort(SortUsingEntryValue);
2661 } 2675 }
2662 2676
2663 } } // namespace v8::internal 2677 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap-snapshot-generator.h ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698