| OLD | NEW |
| 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 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 return id; | 465 return id; |
| 466 } | 466 } |
| 467 | 467 |
| 468 | 468 |
| 469 void HeapObjectsMap::StopHeapObjectsTracking() { | 469 void HeapObjectsMap::StopHeapObjectsTracking() { |
| 470 time_intervals_.Clear(); | 470 time_intervals_.Clear(); |
| 471 } | 471 } |
| 472 | 472 |
| 473 | 473 |
| 474 void HeapObjectsMap::UpdateHeapObjectsMap() { | 474 void HeapObjectsMap::UpdateHeapObjectsMap() { |
| 475 HEAP->CollectAllGarbage(Heap::kMakeHeapIterableMask, | 475 heap_->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
| 476 "HeapSnapshotsCollection::UpdateHeapObjectsMap"); | 476 "HeapSnapshotsCollection::UpdateHeapObjectsMap"); |
| 477 HeapIterator iterator(heap_); | 477 HeapIterator iterator(heap_); |
| 478 for (HeapObject* obj = iterator.next(); | 478 for (HeapObject* obj = iterator.next(); |
| 479 obj != NULL; | 479 obj != NULL; |
| 480 obj = iterator.next()) { | 480 obj = iterator.next()) { |
| 481 FindOrAddEntry(obj->address(), obj->Size()); | 481 FindOrAddEntry(obj->address(), obj->Size()); |
| 482 } | 482 } |
| 483 RemoveDeadEntries(); | 483 RemoveDeadEntries(); |
| 484 } | 484 } |
| 485 | 485 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 ComputePointerHash(entry_info.addr)); | 553 ComputePointerHash(entry_info.addr)); |
| 554 } | 554 } |
| 555 } | 555 } |
| 556 } | 556 } |
| 557 entries_.Rewind(first_free_entry); | 557 entries_.Rewind(first_free_entry); |
| 558 ASSERT(static_cast<uint32_t>(entries_.length()) - 1 == | 558 ASSERT(static_cast<uint32_t>(entries_.length()) - 1 == |
| 559 entries_map_.occupancy()); | 559 entries_map_.occupancy()); |
| 560 } | 560 } |
| 561 | 561 |
| 562 | 562 |
| 563 SnapshotObjectId HeapObjectsMap::GenerateId(v8::RetainedObjectInfo* info) { | 563 SnapshotObjectId HeapObjectsMap::GenerateId(Heap* heap, |
| 564 v8::RetainedObjectInfo* info) { |
| 564 SnapshotObjectId id = static_cast<SnapshotObjectId>(info->GetHash()); | 565 SnapshotObjectId id = static_cast<SnapshotObjectId>(info->GetHash()); |
| 565 const char* label = info->GetLabel(); | 566 const char* label = info->GetLabel(); |
| 566 id ^= StringHasher::HashSequentialString(label, | 567 id ^= StringHasher::HashSequentialString(label, |
| 567 static_cast<int>(strlen(label)), | 568 static_cast<int>(strlen(label)), |
| 568 HEAP->HashSeed()); | 569 heap->HashSeed()); |
| 569 intptr_t element_count = info->GetElementCount(); | 570 intptr_t element_count = info->GetElementCount(); |
| 570 if (element_count != -1) | 571 if (element_count != -1) |
| 571 id ^= ComputeIntegerHash(static_cast<uint32_t>(element_count), | 572 id ^= ComputeIntegerHash(static_cast<uint32_t>(element_count), |
| 572 v8::internal::kZeroHashSeed); | 573 v8::internal::kZeroHashSeed); |
| 573 return id << 1; | 574 return id << 1; |
| 574 } | 575 } |
| 575 | 576 |
| 576 | 577 |
| 577 size_t HeapObjectsMap::GetUsedMemorySize() const { | 578 size_t HeapObjectsMap::GetUsedMemorySize() const { |
| 578 return | 579 return |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 | 617 |
| 617 | 618 |
| 618 void HeapSnapshotsCollection::RemoveSnapshot(HeapSnapshot* snapshot) { | 619 void HeapSnapshotsCollection::RemoveSnapshot(HeapSnapshot* snapshot) { |
| 619 snapshots_.RemoveElement(snapshot); | 620 snapshots_.RemoveElement(snapshot); |
| 620 } | 621 } |
| 621 | 622 |
| 622 | 623 |
| 623 Handle<HeapObject> HeapSnapshotsCollection::FindHeapObjectById( | 624 Handle<HeapObject> HeapSnapshotsCollection::FindHeapObjectById( |
| 624 SnapshotObjectId id) { | 625 SnapshotObjectId id) { |
| 625 // First perform a full GC in order to avoid dead objects. | 626 // First perform a full GC in order to avoid dead objects. |
| 626 HEAP->CollectAllGarbage(Heap::kMakeHeapIterableMask, | 627 heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
| 627 "HeapSnapshotsCollection::FindHeapObjectById"); | 628 "HeapSnapshotsCollection::FindHeapObjectById"); |
| 628 DisallowHeapAllocation no_allocation; | 629 DisallowHeapAllocation no_allocation; |
| 629 HeapObject* object = NULL; | 630 HeapObject* object = NULL; |
| 630 HeapIterator iterator(heap(), HeapIterator::kFilterUnreachable); | 631 HeapIterator iterator(heap(), HeapIterator::kFilterUnreachable); |
| 631 // Make sure that object with the given id is still reachable. | 632 // Make sure that object with the given id is still reachable. |
| 632 for (HeapObject* obj = iterator.next(); | 633 for (HeapObject* obj = iterator.next(); |
| 633 obj != NULL; | 634 obj != NULL; |
| 634 obj = iterator.next()) { | 635 obj = iterator.next()) { |
| 635 if (ids_.FindEntry(obj->address()) == id) { | 636 if (ids_.FindEntry(obj->address()) == id) { |
| 636 ASSERT(object == NULL); | 637 ASSERT(object == NULL); |
| (...skipping 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1925 v8::RetainedObjectInfo* info = reinterpret_cast<v8::RetainedObjectInfo*>(ptr); | 1926 v8::RetainedObjectInfo* info = reinterpret_cast<v8::RetainedObjectInfo*>(ptr); |
| 1926 intptr_t elements = info->GetElementCount(); | 1927 intptr_t elements = info->GetElementCount(); |
| 1927 intptr_t size = info->GetSizeInBytes(); | 1928 intptr_t size = info->GetSizeInBytes(); |
| 1928 const char* name = elements != -1 | 1929 const char* name = elements != -1 |
| 1929 ? collection_->names()->GetFormatted( | 1930 ? collection_->names()->GetFormatted( |
| 1930 "%s / %" V8_PTR_PREFIX "d entries", info->GetLabel(), elements) | 1931 "%s / %" V8_PTR_PREFIX "d entries", info->GetLabel(), elements) |
| 1931 : collection_->names()->GetCopy(info->GetLabel()); | 1932 : collection_->names()->GetCopy(info->GetLabel()); |
| 1932 return snapshot_->AddEntry( | 1933 return snapshot_->AddEntry( |
| 1933 entries_type_, | 1934 entries_type_, |
| 1934 name, | 1935 name, |
| 1935 HeapObjectsMap::GenerateId(info), | 1936 HeapObjectsMap::GenerateId(collection_->heap(), info), |
| 1936 size != -1 ? static_cast<int>(size) : 0); | 1937 size != -1 ? static_cast<int>(size) : 0); |
| 1937 } | 1938 } |
| 1938 | 1939 |
| 1939 | 1940 |
| 1940 NativeObjectsExplorer::NativeObjectsExplorer( | 1941 NativeObjectsExplorer::NativeObjectsExplorer( |
| 1941 HeapSnapshot* snapshot, | 1942 HeapSnapshot* snapshot, |
| 1942 SnapshottingProgressReportingInterface* progress) | 1943 SnapshottingProgressReportingInterface* progress) |
| 1943 : isolate_(snapshot->collection()->heap()->isolate()), | 1944 : isolate_(snapshot->collection()->heap()->isolate()), |
| 1944 snapshot_(snapshot), | 1945 snapshot_(snapshot), |
| 1945 collection_(snapshot_->collection()), | 1946 collection_(snapshot_->collection()), |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2101 const char* label_; | 2102 const char* label_; |
| 2102 }; | 2103 }; |
| 2103 | 2104 |
| 2104 | 2105 |
| 2105 NativeGroupRetainedObjectInfo* NativeObjectsExplorer::FindOrAddGroupInfo( | 2106 NativeGroupRetainedObjectInfo* NativeObjectsExplorer::FindOrAddGroupInfo( |
| 2106 const char* label) { | 2107 const char* label) { |
| 2107 const char* label_copy = collection_->names()->GetCopy(label); | 2108 const char* label_copy = collection_->names()->GetCopy(label); |
| 2108 uint32_t hash = StringHasher::HashSequentialString( | 2109 uint32_t hash = StringHasher::HashSequentialString( |
| 2109 label_copy, | 2110 label_copy, |
| 2110 static_cast<int>(strlen(label_copy)), | 2111 static_cast<int>(strlen(label_copy)), |
| 2111 HEAP->HashSeed()); | 2112 isolate_->heap()->HashSeed()); |
| 2112 HashMap::Entry* entry = native_groups_.Lookup(const_cast<char*>(label_copy), | 2113 HashMap::Entry* entry = native_groups_.Lookup(const_cast<char*>(label_copy), |
| 2113 hash, true); | 2114 hash, true); |
| 2114 if (entry->value == NULL) { | 2115 if (entry->value == NULL) { |
| 2115 entry->value = new NativeGroupRetainedObjectInfo(label); | 2116 entry->value = new NativeGroupRetainedObjectInfo(label); |
| 2116 } | 2117 } |
| 2117 return static_cast<NativeGroupRetainedObjectInfo*>(entry->value); | 2118 return static_cast<NativeGroupRetainedObjectInfo*>(entry->value); |
| 2118 } | 2119 } |
| 2119 | 2120 |
| 2120 | 2121 |
| 2121 void NativeObjectsExplorer::SetNativeRootReference( | 2122 void NativeObjectsExplorer::SetNativeRootReference( |
| (...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2718 | 2719 |
| 2719 | 2720 |
| 2720 void HeapSnapshotJSONSerializer::SortHashMap( | 2721 void HeapSnapshotJSONSerializer::SortHashMap( |
| 2721 HashMap* map, List<HashMap::Entry*>* sorted_entries) { | 2722 HashMap* map, List<HashMap::Entry*>* sorted_entries) { |
| 2722 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) | 2723 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) |
| 2723 sorted_entries->Add(p); | 2724 sorted_entries->Add(p); |
| 2724 sorted_entries->Sort(SortUsingEntryValue); | 2725 sorted_entries->Sort(SortUsingEntryValue); |
| 2725 } | 2726 } |
| 2726 | 2727 |
| 2727 } } // namespace v8::internal | 2728 } } // namespace v8::internal |
| OLD | NEW |