OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_V8_PROFILER_H_ | 5 #ifndef V8_V8_PROFILER_H_ |
6 #define V8_V8_PROFILER_H_ | 6 #define V8_V8_PROFILER_H_ |
7 | 7 |
| 8 #include <unordered_set> |
8 #include <vector> | 9 #include <vector> |
9 #include "v8.h" // NOLINT(build/include) | 10 #include "v8.h" // NOLINT(build/include) |
10 | 11 |
11 /** | 12 /** |
12 * Profiler support for the V8 JavaScript engine. | 13 * Profiler support for the V8 JavaScript engine. |
13 */ | 14 */ |
14 namespace v8 { | 15 namespace v8 { |
15 | 16 |
16 class HeapGraphNode; | 17 class HeapGraphNode; |
17 struct HeapStatsUpdate; | 18 struct HeapStatsUpdate; |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 * Interface for controlling heap profiling. Instance of the | 624 * Interface for controlling heap profiling. Instance of the |
624 * profiler can be retrieved using v8::Isolate::GetHeapProfiler. | 625 * profiler can be retrieved using v8::Isolate::GetHeapProfiler. |
625 */ | 626 */ |
626 class V8_EXPORT HeapProfiler { | 627 class V8_EXPORT HeapProfiler { |
627 public: | 628 public: |
628 enum SamplingFlags { | 629 enum SamplingFlags { |
629 kSamplingNoFlags = 0, | 630 kSamplingNoFlags = 0, |
630 kSamplingForceGC = 1 << 0, | 631 kSamplingForceGC = 1 << 0, |
631 }; | 632 }; |
632 | 633 |
| 634 typedef std::unordered_set<const v8::PersistentBase<v8::Value>*> |
| 635 RetainerChildren; |
| 636 typedef std::vector<std::pair<v8::RetainedObjectInfo*, RetainerChildren>> |
| 637 RetainerGroups; |
| 638 typedef std::vector<std::pair<const v8::PersistentBase<v8::Value>*, |
| 639 const v8::PersistentBase<v8::Value>*>> |
| 640 RetainerEdges; |
| 641 |
| 642 struct RetainerInfos { |
| 643 RetainerGroups groups; |
| 644 RetainerEdges edges; |
| 645 }; |
| 646 |
| 647 /** |
| 648 * Callback function invoked to retrieve all RetainerInfos from the embedder. |
| 649 */ |
| 650 typedef RetainerInfos (*GetRetainerInfosCallback)(v8::Isolate* isolate); |
| 651 |
633 /** | 652 /** |
634 * Callback function invoked for obtaining RetainedObjectInfo for | 653 * Callback function invoked for obtaining RetainedObjectInfo for |
635 * the given JavaScript wrapper object. It is prohibited to enter V8 | 654 * the given JavaScript wrapper object. It is prohibited to enter V8 |
636 * while the callback is running: only getters on the handle and | 655 * while the callback is running: only getters on the handle and |
637 * GetPointerFromInternalField on the objects are allowed. | 656 * GetPointerFromInternalField on the objects are allowed. |
638 */ | 657 */ |
639 typedef RetainedObjectInfo* (*WrapperInfoCallback)(uint16_t class_id, | 658 typedef RetainedObjectInfo* (*WrapperInfoCallback)(uint16_t class_id, |
640 Local<Value> wrapper); | 659 Local<Value> wrapper); |
641 | 660 |
642 /** Returns the number of snapshots taken. */ | 661 /** Returns the number of snapshots taken. */ |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 * Deletes all snapshots taken. All previously returned pointers to | 794 * Deletes all snapshots taken. All previously returned pointers to |
776 * snapshots and their contents become invalid after this call. | 795 * snapshots and their contents become invalid after this call. |
777 */ | 796 */ |
778 void DeleteAllHeapSnapshots(); | 797 void DeleteAllHeapSnapshots(); |
779 | 798 |
780 /** Binds a callback to embedder's class ID. */ | 799 /** Binds a callback to embedder's class ID. */ |
781 void SetWrapperClassInfoProvider( | 800 void SetWrapperClassInfoProvider( |
782 uint16_t class_id, | 801 uint16_t class_id, |
783 WrapperInfoCallback callback); | 802 WrapperInfoCallback callback); |
784 | 803 |
| 804 void SetGetRetainerInfosCallback(GetRetainerInfosCallback callback); |
| 805 |
785 /** | 806 /** |
786 * Default value of persistent handle class ID. Must not be used to | 807 * Default value of persistent handle class ID. Must not be used to |
787 * define a class. Can be used to reset a class of a persistent | 808 * define a class. Can be used to reset a class of a persistent |
788 * handle. | 809 * handle. |
789 */ | 810 */ |
790 static const uint16_t kPersistentHandleNoClassId = 0; | 811 static const uint16_t kPersistentHandleNoClassId = 0; |
791 | 812 |
792 /** Returns memory used for profiler internal data and snapshots. */ | 813 /** Returns memory used for profiler internal data and snapshots. */ |
793 size_t GetProfilerMemorySize(); | 814 size_t GetProfilerMemorySize(); |
794 | 815 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 uint32_t index; // Index of the time interval that was changed. | 909 uint32_t index; // Index of the time interval that was changed. |
889 uint32_t count; // New value of count field for the interval with this index. | 910 uint32_t count; // New value of count field for the interval with this index. |
890 uint32_t size; // New value of size field for the interval with this index. | 911 uint32_t size; // New value of size field for the interval with this index. |
891 }; | 912 }; |
892 | 913 |
893 | 914 |
894 } // namespace v8 | 915 } // namespace v8 |
895 | 916 |
896 | 917 |
897 #endif // V8_V8_PROFILER_H_ | 918 #endif // V8_V8_PROFILER_H_ |
OLD | NEW |