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

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

Issue 19368002: Add missing links from PropertyCell to dependent_code (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 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 | « no previous file | test/cctest/test-heap-profiler.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 912 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 int parent_; 923 int parent_;
924 int next_index_; 924 int next_index_;
925 }; 925 };
926 926
927 927
928 void V8HeapExplorer::ExtractReferences(HeapObject* obj) { 928 void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
929 HeapEntry* heap_entry = GetEntry(obj); 929 HeapEntry* heap_entry = GetEntry(obj);
930 if (heap_entry == NULL) return; // No interest in this object. 930 if (heap_entry == NULL) return; // No interest in this object.
931 int entry = heap_entry->index(); 931 int entry = heap_entry->index();
932 932
933 bool extract_indexed_refs = true;
934 if (obj->IsJSGlobalProxy()) { 933 if (obj->IsJSGlobalProxy()) {
935 ExtractJSGlobalProxyReferences(entry, JSGlobalProxy::cast(obj)); 934 ExtractJSGlobalProxyReferences(entry, JSGlobalProxy::cast(obj));
936 } else if (obj->IsJSObject()) { 935 } else if (obj->IsJSObject()) {
937 ExtractJSObjectReferences(entry, JSObject::cast(obj)); 936 ExtractJSObjectReferences(entry, JSObject::cast(obj));
938 } else if (obj->IsString()) { 937 } else if (obj->IsString()) {
939 ExtractStringReferences(entry, String::cast(obj)); 938 ExtractStringReferences(entry, String::cast(obj));
940 } else if (obj->IsContext()) { 939 } else if (obj->IsContext()) {
941 ExtractContextReferences(entry, Context::cast(obj)); 940 ExtractContextReferences(entry, Context::cast(obj));
942 } else if (obj->IsMap()) { 941 } else if (obj->IsMap()) {
943 ExtractMapReferences(entry, Map::cast(obj)); 942 ExtractMapReferences(entry, Map::cast(obj));
944 } else if (obj->IsSharedFunctionInfo()) { 943 } else if (obj->IsSharedFunctionInfo()) {
945 ExtractSharedFunctionInfoReferences(entry, SharedFunctionInfo::cast(obj)); 944 ExtractSharedFunctionInfoReferences(entry, SharedFunctionInfo::cast(obj));
946 } else if (obj->IsScript()) { 945 } else if (obj->IsScript()) {
947 ExtractScriptReferences(entry, Script::cast(obj)); 946 ExtractScriptReferences(entry, Script::cast(obj));
948 } else if (obj->IsAccessorPair()) { 947 } else if (obj->IsAccessorPair()) {
949 ExtractAccessorPairReferences(entry, AccessorPair::cast(obj)); 948 ExtractAccessorPairReferences(entry, AccessorPair::cast(obj));
950 } else if (obj->IsCodeCache()) { 949 } else if (obj->IsCodeCache()) {
951 ExtractCodeCacheReferences(entry, CodeCache::cast(obj)); 950 ExtractCodeCacheReferences(entry, CodeCache::cast(obj));
952 } else if (obj->IsCode()) { 951 } else if (obj->IsCode()) {
953 ExtractCodeReferences(entry, Code::cast(obj)); 952 ExtractCodeReferences(entry, Code::cast(obj));
954 } else if (obj->IsCell()) { 953 } else if (obj->IsCell()) {
955 ExtractCellReferences(entry, Cell::cast(obj)); 954 ExtractCellReferences(entry, Cell::cast(obj));
956 extract_indexed_refs = false;
957 } else if (obj->IsPropertyCell()) { 955 } else if (obj->IsPropertyCell()) {
958 ExtractPropertyCellReferences(entry, PropertyCell::cast(obj)); 956 ExtractPropertyCellReferences(entry, PropertyCell::cast(obj));
959 extract_indexed_refs = false;
960 } else if (obj->IsAllocationSite()) { 957 } else if (obj->IsAllocationSite()) {
961 ExtractAllocationSiteReferences(entry, AllocationSite::cast(obj)); 958 ExtractAllocationSiteReferences(entry, AllocationSite::cast(obj));
962 } 959 }
963 if (extract_indexed_refs) { 960 SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
964 SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset); 961
965 IndexedReferencesExtractor refs_extractor(this, obj, entry); 962 // Extract unvisited fields as hidden references and restore tags
966 obj->Iterate(&refs_extractor); 963 // of visited fields.
967 } 964 IndexedReferencesExtractor refs_extractor(this, obj, entry);
965 obj->Iterate(&refs_extractor);
968 } 966 }
969 967
970 968
971 void V8HeapExplorer::ExtractJSGlobalProxyReferences( 969 void V8HeapExplorer::ExtractJSGlobalProxyReferences(
972 int entry, JSGlobalProxy* proxy) { 970 int entry, JSGlobalProxy* proxy) {
973 SetInternalReference(proxy, entry, 971 SetInternalReference(proxy, entry,
974 "native_context", proxy->native_context(), 972 "native_context", proxy->native_context(),
975 JSGlobalProxy::kNativeContextOffset); 973 JSGlobalProxy::kNativeContextOffset);
976 } 974 }
977 975
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1247 "type_feedback_info", code->type_feedback_info(), 1245 "type_feedback_info", code->type_feedback_info(),
1248 Code::kTypeFeedbackInfoOffset); 1246 Code::kTypeFeedbackInfoOffset);
1249 } 1247 }
1250 SetInternalReference(code, entry, 1248 SetInternalReference(code, entry,
1251 "gc_metadata", code->gc_metadata(), 1249 "gc_metadata", code->gc_metadata(),
1252 Code::kGCMetadataOffset); 1250 Code::kGCMetadataOffset);
1253 } 1251 }
1254 1252
1255 1253
1256 void V8HeapExplorer::ExtractCellReferences(int entry, Cell* cell) { 1254 void V8HeapExplorer::ExtractCellReferences(int entry, Cell* cell) {
1257 SetInternalReference(cell, entry, "value", cell->value()); 1255 SetInternalReference(cell, entry, "value", cell->value(), Cell::kValueOffset);
1258 } 1256 }
1259 1257
1260 1258
1261 void V8HeapExplorer::ExtractPropertyCellReferences(int entry, 1259 void V8HeapExplorer::ExtractPropertyCellReferences(int entry,
1262 PropertyCell* cell) { 1260 PropertyCell* cell) {
1263 SetInternalReference(cell, entry, "value", cell->value()); 1261 ExtractCellReferences(entry, cell);
1264 SetInternalReference(cell, entry, "type", cell->type()); 1262 SetInternalReference(cell, entry, "type", cell->type(),
1263 PropertyCell::kTypeOffset);
1264 SetInternalReference(cell, entry, "dependent_code", cell->dependent_code(),
1265 PropertyCell::kDependentCodeOffset);
1265 } 1266 }
1266 1267
1267 1268
1268 void V8HeapExplorer::ExtractAllocationSiteReferences(int entry, 1269 void V8HeapExplorer::ExtractAllocationSiteReferences(int entry,
1269 AllocationSite* site) { 1270 AllocationSite* site) {
1270 SetInternalReference(site, entry, "transition_info", site->transition_info(), 1271 SetInternalReference(site, entry, "transition_info", site->transition_info(),
1271 AllocationSite::kTransitionInfoOffset); 1272 AllocationSite::kTransitionInfoOffset);
1272 } 1273 }
1273 1274
1274 1275
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after
2675 2676
2676 2677
2677 void HeapSnapshotJSONSerializer::SortHashMap( 2678 void HeapSnapshotJSONSerializer::SortHashMap(
2678 HashMap* map, List<HashMap::Entry*>* sorted_entries) { 2679 HashMap* map, List<HashMap::Entry*>* sorted_entries) {
2679 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) 2680 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p))
2680 sorted_entries->Add(p); 2681 sorted_entries->Add(p);
2681 sorted_entries->Sort(SortUsingEntryValue); 2682 sorted_entries->Sort(SortUsingEntryValue);
2682 } 2683 }
2683 2684
2684 } } // namespace v8::internal 2685 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698