File: heap-statistics.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (122 lines) | stat: -rw-r--r-- 4,095 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef INCLUDE_CPPGC_HEAP_STATISTICS_H_
#define INCLUDE_CPPGC_HEAP_STATISTICS_H_

#include <cstddef>
#include <cstdint>
#include <string>
#include <vector>

namespace cppgc {

/**
 * `HeapStatistics` contains memory consumption and utilization statistics for a
 * cppgc heap.
 */
struct HeapStatistics final {
  /**
   * Specifies the detail level of the heap statistics. Brief statistics contain
   * only the top-level allocated and used memory statistics for the entire
   * heap. Detailed statistics also contain a break down per space and page, as
   * well as freelist statistics and object type histograms. Note that used
   * memory reported by brief statistics and detailed statistics might differ
   * slightly.
   */
  enum DetailLevel : uint8_t {
    kBrief,
    kDetailed,
  };

  /**
   * Object statistics for a single type.
   */
  struct ObjectStatsEntry {
    /**
     * Number of allocated bytes.
     */
    size_t allocated_bytes;
    /**
     * Number of allocated objects.
     */
    size_t object_count;
  };

  /**
   * Page granularity statistics. For each page the statistics record the
   * allocated memory size and overall used memory size for the page.
   */
  struct PageStatistics {
    /** Overall committed amount of memory for the page. */
    size_t committed_size_bytes = 0;
    /** Resident amount of memory held by the page. */
    size_t resident_size_bytes = 0;
    /** Amount of memory actually used on the page. */
    size_t used_size_bytes = 0;
    /** Statistics for object allocated on the page. Filled only when
     * NameProvider::SupportsCppClassNamesAsObjectNames() is true. */
    std::vector<ObjectStatsEntry> object_statistics;
  };

  /**
   * Statistics of the freelist (used only in non-large object spaces). For
   * each bucket in the freelist the statistics record the bucket size, the
   * number of freelist entries in the bucket, and the overall allocated memory
   * consumed by these freelist entries.
   */
  struct FreeListStatistics {
    /** bucket sizes in the freelist. */
    std::vector<size_t> bucket_size;
    /** number of freelist entries per bucket. */
    std::vector<size_t> free_count;
    /** memory size consumed by freelist entries per size. */
    std::vector<size_t> free_size;
  };

  /**
   * Space granularity statistics. For each space the statistics record the
   * space name, the amount of allocated memory and overall used memory for the
   * space. The statistics also contain statistics for each of the space's
   * pages, its freelist and the objects allocated on the space.
   */
  struct SpaceStatistics {
    /** The space name */
    std::string name;
    /** Overall committed amount of memory for the heap. */
    size_t committed_size_bytes = 0;
    /** Resident amount of memory held by the heap. */
    size_t resident_size_bytes = 0;
    /** Amount of memory actually used on the space. */
    size_t used_size_bytes = 0;
    /** Statistics for each of the pages in the space. */
    std::vector<PageStatistics> page_stats;
    /** Statistics for the freelist of the space. */
    FreeListStatistics free_list_stats;
  };

  /** Overall committed amount of memory for the heap. */
  size_t committed_size_bytes = 0;
  /** Resident amount of memory held by the heap. */
  size_t resident_size_bytes = 0;
  /** Amount of memory actually used on the heap. */
  size_t used_size_bytes = 0;
  /** Memory retained in the page pool, not used directly by the heap. */
  size_t pooled_memory_size_bytes = 0;
  /** Detail level of this HeapStatistics. */
  DetailLevel detail_level;

  /** Statistics for each of the spaces in the heap. Filled only when
   * `detail_level` is `DetailLevel::kDetailed`. */
  std::vector<SpaceStatistics> space_stats;

  /**
   * Vector of `cppgc::GarbageCollected` type names.
   */
  std::vector<std::string> type_names;
};

}  // namespace cppgc

#endif  // INCLUDE_CPPGC_HEAP_STATISTICS_H_