v8  9.4.146 (node 16.13.0)
V8 is Google's open source JavaScript engine
heap-statistics.h
Go to the documentation of this file.
1 // Copyright 2021 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef INCLUDE_CPPGC_HEAP_STATISTICS_H_
6 #define INCLUDE_CPPGC_HEAP_STATISTICS_H_
7 
8 #include <cstddef>
9 #include <cstdint>
10 #include <string>
11 #include <vector>
12 
13 namespace cppgc {
14 
15 /**
16  * `HeapStatistics` contains memory consumption and utilization statistics for a
17  * cppgc heap.
18  */
19 struct HeapStatistics final {
20  /**
21  * Specifies the detail level of the heap statistics. Brief statistics contain
22  * only the top-level allocated and used memory statistics for the entire
23  * heap. Detailed statistics also contain a break down per space and page, as
24  * well as freelist statistics and object type histograms. Note that used
25  * memory reported by brief statistics and detailed statistics might differ
26  * slightly.
27  */
31  };
32 
33  /**
34  * Object statistics for a single type.
35  */
37  /**
38  * Number of allocated bytes.
39  */
41  /**
42  * Number of allocated objects.
43  */
44  size_t object_count;
45  };
46 
47  /**
48  * Page granularity statistics. For each page the statistics record the
49  * allocated memory size and overall used memory size for the page.
50  */
51  struct PageStatistics {
52  /** Overall committed amount of memory for the page. */
54  /** Resident amount of memory held by the page. */
55  size_t resident_size_bytes = 0;
56  /** Amount of memory actually used on the page. */
57  size_t used_size_bytes = 0;
58  /** Statistics for object allocated on the page. Filled only when
59  * NameProvider::HideInternalNames() is false. */
61  };
62 
63  /**
64  * Statistics of the freelist (used only in non-large object spaces). For
65  * each bucket in the freelist the statistics record the bucket size, the
66  * number of freelist entries in the bucket, and the overall allocated memory
67  * consumed by these freelist entries.
68  */
70  /** bucket sizes in the freelist. */
71  std::vector<size_t> bucket_size;
72  /** number of freelist entries per bucket. */
73  std::vector<size_t> free_count;
74  /** memory size consumed by freelist entries per size. */
75  std::vector<size_t> free_size;
76  };
77 
78  /**
79  * Space granularity statistics. For each space the statistics record the
80  * space name, the amount of allocated memory and overall used memory for the
81  * space. The statistics also contain statistics for each of the space's
82  * pages, its freelist and the objects allocated on the space.
83  */
84  struct SpaceStatistics {
85  /** The space name */
86  std::string name;
87  /** Overall committed amount of memory for the heap. */
89  /** Resident amount of memory held by the heap. */
90  size_t resident_size_bytes = 0;
91  /** Amount of memory actually used on the space. */
92  size_t used_size_bytes = 0;
93  /** Statistics for each of the pages in the space. */
94  std::vector<PageStatistics> page_stats;
95  /** Statistics for the freelist of the space. */
97  };
98 
99  /** Overall committed amount of memory for the heap. */
101  /** Resident amount of memory help by the heap. */
103  /** Amount of memory actually used on the heap. */
104  size_t used_size_bytes = 0;
105  /** Detail level of this HeapStatistics. */
107 
108  /** Statistics for each of the spaces in the heap. Filled only when
109  * `detail_level` is `DetailLevel::kDetailed`. */
111 
112  /**
113  * Vector of `cppgc::GarbageCollected` type names.
114  */
115  std::vector<std::string> type_names;
116 };
117 
118 } // namespace cppgc
119 
120 #endif // INCLUDE_CPPGC_HEAP_STATISTICS_H_