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

Side by Side Diff: src/profile-generator.h

Issue 9666038: Revert "We have a problem with really big apps. The snapshot for such pages doesn't fit into JS hea… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 9 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 | src/profile-generator.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 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 17 matching lines...) Expand all
28 #ifndef V8_PROFILE_GENERATOR_H_ 28 #ifndef V8_PROFILE_GENERATOR_H_
29 #define V8_PROFILE_GENERATOR_H_ 29 #define V8_PROFILE_GENERATOR_H_
30 30
31 #include "allocation.h" 31 #include "allocation.h"
32 #include "hashmap.h" 32 #include "hashmap.h"
33 #include "../include/v8-profiler.h" 33 #include "../include/v8-profiler.h"
34 34
35 namespace v8 { 35 namespace v8 {
36 namespace internal { 36 namespace internal {
37 37
38 typedef uint32_t SnapshotObjectId;
39
40 class TokenEnumerator { 38 class TokenEnumerator {
41 public: 39 public:
42 TokenEnumerator(); 40 TokenEnumerator();
43 ~TokenEnumerator(); 41 ~TokenEnumerator();
44 int GetTokenId(Object* token); 42 int GetTokenId(Object* token);
45 43
46 static const int kNoSecurityToken = -1; 44 static const int kNoSecurityToken = -1;
47 static const int kInheritsSecurityToken = -2; 45 static const int kInheritsSecurityToken = -2;
48 46
49 private: 47 private:
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 kRegExp = v8::HeapGraphNode::kRegExp, 526 kRegExp = v8::HeapGraphNode::kRegExp,
529 kHeapNumber = v8::HeapGraphNode::kHeapNumber, 527 kHeapNumber = v8::HeapGraphNode::kHeapNumber,
530 kNative = v8::HeapGraphNode::kNative, 528 kNative = v8::HeapGraphNode::kNative,
531 kSynthetic = v8::HeapGraphNode::kSynthetic 529 kSynthetic = v8::HeapGraphNode::kSynthetic
532 }; 530 };
533 531
534 HeapEntry() { } 532 HeapEntry() { }
535 void Init(HeapSnapshot* snapshot, 533 void Init(HeapSnapshot* snapshot,
536 Type type, 534 Type type,
537 const char* name, 535 const char* name,
538 SnapshotObjectId id, 536 uint64_t id,
539 int self_size, 537 int self_size,
540 int children_count, 538 int children_count,
541 int retainers_count); 539 int retainers_count);
542 540
543 HeapSnapshot* snapshot() { return snapshot_; } 541 HeapSnapshot* snapshot() { return snapshot_; }
544 Type type() { return static_cast<Type>(type_); } 542 Type type() { return static_cast<Type>(type_); }
545 const char* name() { return name_; } 543 const char* name() { return name_; }
546 void set_name(const char* name) { name_ = name; } 544 void set_name(const char* name) { name_ = name; }
547 inline SnapshotObjectId id(); 545 inline uint64_t id();
548 int self_size() { return self_size_; } 546 int self_size() { return self_size_; }
549 int retained_size() { return retained_size_; } 547 int retained_size() { return retained_size_; }
550 void add_retained_size(int size) { retained_size_ += size; } 548 void add_retained_size(int size) { retained_size_ += size; }
551 void set_retained_size(int value) { retained_size_ = value; } 549 void set_retained_size(int value) { retained_size_ = value; }
552 int ordered_index() { return ordered_index_; } 550 int ordered_index() { return ordered_index_; }
553 void set_ordered_index(int value) { ordered_index_ = value; } 551 void set_ordered_index(int value) { ordered_index_ = value; }
554 552
555 Vector<HeapGraphEdge> children() { 553 Vector<HeapGraphEdge> children() {
556 return Vector<HeapGraphEdge>(children_arr(), children_count_); } 554 return Vector<HeapGraphEdge>(children_arr(), children_count_); }
557 Vector<HeapGraphEdge*> retainers() { 555 Vector<HeapGraphEdge*> retainers() {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 HeapEntry* gc_roots() { return gc_roots_entry_; } 644 HeapEntry* gc_roots() { return gc_roots_entry_; }
647 HeapEntry* natives_root() { return natives_root_entry_; } 645 HeapEntry* natives_root() { return natives_root_entry_; }
648 HeapEntry* gc_subroot(int index) { return gc_subroot_entries_[index]; } 646 HeapEntry* gc_subroot(int index) { return gc_subroot_entries_[index]; }
649 List<HeapEntry*>* entries() { return &entries_; } 647 List<HeapEntry*>* entries() { return &entries_; }
650 int raw_entries_size() { return raw_entries_size_; } 648 int raw_entries_size() { return raw_entries_size_; }
651 649
652 void AllocateEntries( 650 void AllocateEntries(
653 int entries_count, int children_count, int retainers_count); 651 int entries_count, int children_count, int retainers_count);
654 HeapEntry* AddEntry(HeapEntry::Type type, 652 HeapEntry* AddEntry(HeapEntry::Type type,
655 const char* name, 653 const char* name,
656 SnapshotObjectId id, 654 uint64_t id,
657 int size, 655 int size,
658 int children_count, 656 int children_count,
659 int retainers_count); 657 int retainers_count);
660 HeapEntry* AddRootEntry(int children_count); 658 HeapEntry* AddRootEntry(int children_count);
661 HeapEntry* AddGcRootsEntry(int children_count, int retainers_count); 659 HeapEntry* AddGcRootsEntry(int children_count, int retainers_count);
662 HeapEntry* AddGcSubrootEntry(int tag, 660 HeapEntry* AddGcSubrootEntry(int tag,
663 int children_count, 661 int children_count,
664 int retainers_count); 662 int retainers_count);
665 HeapEntry* AddNativesRootEntry(int children_count, int retainers_count); 663 HeapEntry* AddNativesRootEntry(int children_count, int retainers_count);
666 void ClearPaint(); 664 void ClearPaint();
667 HeapEntry* GetEntryById(SnapshotObjectId id); 665 HeapEntry* GetEntryById(uint64_t id);
668 List<HeapEntry*>* GetSortedEntriesList(); 666 List<HeapEntry*>* GetSortedEntriesList();
669 template<class Visitor> 667 template<class Visitor>
670 void IterateEntries(Visitor* visitor) { entries_.Iterate(visitor); } 668 void IterateEntries(Visitor* visitor) { entries_.Iterate(visitor); }
671 void SetDominatorsToSelf(); 669 void SetDominatorsToSelf();
672 670
673 void Print(int max_depth); 671 void Print(int max_depth);
674 void PrintEntriesSize(); 672 void PrintEntriesSize();
675 673
676 private: 674 private:
677 HeapEntry* GetNextEntryToInit(); 675 HeapEntry* GetNextEntryToInit();
(...skipping 16 matching lines...) Expand all
694 DISALLOW_COPY_AND_ASSIGN(HeapSnapshot); 692 DISALLOW_COPY_AND_ASSIGN(HeapSnapshot);
695 }; 693 };
696 694
697 695
698 class HeapObjectsMap { 696 class HeapObjectsMap {
699 public: 697 public:
700 HeapObjectsMap(); 698 HeapObjectsMap();
701 ~HeapObjectsMap(); 699 ~HeapObjectsMap();
702 700
703 void SnapshotGenerationFinished(); 701 void SnapshotGenerationFinished();
704 SnapshotObjectId FindObject(Address addr); 702 uint64_t FindObject(Address addr);
705 void MoveObject(Address from, Address to); 703 void MoveObject(Address from, Address to);
706 704
707 static SnapshotObjectId GenerateId(v8::RetainedObjectInfo* info); 705 static uint64_t GenerateId(v8::RetainedObjectInfo* info);
708 static inline SnapshotObjectId GetNthGcSubrootId(int delta); 706 static inline uint64_t GetNthGcSubrootId(int delta);
709 707
710 static const int kObjectIdStep = 2; 708 static const int kObjectIdStep = 2;
711 static const SnapshotObjectId kInternalRootObjectId; 709 static const uint64_t kInternalRootObjectId;
712 static const SnapshotObjectId kGcRootsObjectId; 710 static const uint64_t kGcRootsObjectId;
713 static const SnapshotObjectId kNativesRootObjectId; 711 static const uint64_t kNativesRootObjectId;
714 static const SnapshotObjectId kGcRootsFirstSubrootId; 712 static const uint64_t kGcRootsFirstSubrootId;
715 static const SnapshotObjectId kFirstAvailableObjectId; 713 static const uint64_t kFirstAvailableObjectId;
716 714
717 private: 715 private:
718 struct EntryInfo { 716 struct EntryInfo {
719 explicit EntryInfo(SnapshotObjectId id) : id(id), accessed(true) { } 717 explicit EntryInfo(uint64_t id) : id(id), accessed(true) { }
720 EntryInfo(SnapshotObjectId id, bool accessed) : id(id), accessed(accessed) { } 718 EntryInfo(uint64_t id, bool accessed) : id(id), accessed(accessed) { }
721 SnapshotObjectId id; 719 uint64_t id;
722 bool accessed; 720 bool accessed;
723 }; 721 };
724 722
725 void AddEntry(Address addr, SnapshotObjectId id); 723 void AddEntry(Address addr, uint64_t id);
726 SnapshotObjectId FindEntry(Address addr); 724 uint64_t FindEntry(Address addr);
727 void RemoveDeadEntries(); 725 void RemoveDeadEntries();
728 726
729 static bool AddressesMatch(void* key1, void* key2) { 727 static bool AddressesMatch(void* key1, void* key2) {
730 return key1 == key2; 728 return key1 == key2;
731 } 729 }
732 730
733 static uint32_t AddressHash(Address addr) { 731 static uint32_t AddressHash(Address addr) {
734 return ComputeIntegerHash( 732 return ComputeIntegerHash(
735 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(addr)), 733 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(addr)),
736 v8::internal::kZeroHashSeed); 734 v8::internal::kZeroHashSeed);
737 } 735 }
738 736
739 bool initial_fill_mode_; 737 bool initial_fill_mode_;
740 SnapshotObjectId next_id_; 738 uint64_t next_id_;
741 HashMap entries_map_; 739 HashMap entries_map_;
742 List<EntryInfo>* entries_; 740 List<EntryInfo>* entries_;
743 741
744 DISALLOW_COPY_AND_ASSIGN(HeapObjectsMap); 742 DISALLOW_COPY_AND_ASSIGN(HeapObjectsMap);
745 }; 743 };
746 744
747 745
748 class HeapSnapshotsCollection { 746 class HeapSnapshotsCollection {
749 public: 747 public:
750 HeapSnapshotsCollection(); 748 HeapSnapshotsCollection();
751 ~HeapSnapshotsCollection(); 749 ~HeapSnapshotsCollection();
752 750
753 bool is_tracking_objects() { return is_tracking_objects_; } 751 bool is_tracking_objects() { return is_tracking_objects_; }
754 752
755 HeapSnapshot* NewSnapshot( 753 HeapSnapshot* NewSnapshot(
756 HeapSnapshot::Type type, const char* name, unsigned uid); 754 HeapSnapshot::Type type, const char* name, unsigned uid);
757 void SnapshotGenerationFinished(HeapSnapshot* snapshot); 755 void SnapshotGenerationFinished(HeapSnapshot* snapshot);
758 List<HeapSnapshot*>* snapshots() { return &snapshots_; } 756 List<HeapSnapshot*>* snapshots() { return &snapshots_; }
759 HeapSnapshot* GetSnapshot(unsigned uid); 757 HeapSnapshot* GetSnapshot(unsigned uid);
760 void RemoveSnapshot(HeapSnapshot* snapshot); 758 void RemoveSnapshot(HeapSnapshot* snapshot);
761 759
762 StringsStorage* names() { return &names_; } 760 StringsStorage* names() { return &names_; }
763 TokenEnumerator* token_enumerator() { return token_enumerator_; } 761 TokenEnumerator* token_enumerator() { return token_enumerator_; }
764 762
765 SnapshotObjectId GetObjectId(Address addr) { return ids_.FindObject(addr); } 763 uint64_t GetObjectId(Address addr) { return ids_.FindObject(addr); }
766 Handle<HeapObject> FindHeapObjectById(SnapshotObjectId id); 764 Handle<HeapObject> FindHeapObjectById(uint64_t id);
767 void ObjectMoveEvent(Address from, Address to) { ids_.MoveObject(from, to); } 765 void ObjectMoveEvent(Address from, Address to) { ids_.MoveObject(from, to); }
768 766
769 private: 767 private:
770 INLINE(static bool HeapSnapshotsMatch(void* key1, void* key2)) { 768 INLINE(static bool HeapSnapshotsMatch(void* key1, void* key2)) {
771 return key1 == key2; 769 return key1 == key2;
772 } 770 }
773 771
774 bool is_tracking_objects_; // Whether tracking object moves is needed. 772 bool is_tracking_objects_; // Whether tracking object moves is needed.
775 List<HeapSnapshot*> snapshots_; 773 List<HeapSnapshot*> snapshots_;
776 // Mapping from snapshots' uids to HeapSnapshot* pointers. 774 // Mapping from snapshots' uids to HeapSnapshot* pointers.
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 1153
1156 friend class HeapSnapshotJSONSerializerEnumerator; 1154 friend class HeapSnapshotJSONSerializerEnumerator;
1157 friend class HeapSnapshotJSONSerializerIterator; 1155 friend class HeapSnapshotJSONSerializerIterator;
1158 1156
1159 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer); 1157 DISALLOW_COPY_AND_ASSIGN(HeapSnapshotJSONSerializer);
1160 }; 1158 };
1161 1159
1162 } } // namespace v8::internal 1160 } } // namespace v8::internal
1163 1161
1164 #endif // V8_PROFILE_GENERATOR_H_ 1162 #endif // V8_PROFILE_GENERATOR_H_
OLDNEW
« no previous file with comments | « no previous file | src/profile-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698