- Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy pathcompilationMemStatInternals.inline.hpp
95 lines (84 loc) · 3.18 KB
/
compilationMemStatInternals.inline.hpp
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
/*
* Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2024, 2025, Red Hat, Inc. and/or its affiliates.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#ifndef SHARE_COMPILATIONMEMSTATINTERNALS_INLINE_HPP
#defineSHARE_COMPILATIONMEMSTATINTERNALS_INLINE_HPP
#include"compiler/compilationMemStatInternals.hpp"
inlinePhaseInfoStack::PhaseInfoStack() : _depth(0) {}
inlinevoidPhaseInfoStack::push(PhaseInfo info) {
#ifdef ASSERT
check_phase_trace_id(info.id);
if (_depth == 0) {
assert(info.id == phase_trc_id_none, "first entry must be none");
} else {
assert(info.id != phase_trc_id_none, "subsequent entries must not be none");
}
assert(_depth < max_depth, "Sanity");
#endif// ASSERT
_stack[_depth] = info;
if (_depth < max_depth) {
_depth++;
}
}
inlinevoidPhaseInfoStack::pop() {
#ifdef ASSERT
assert(!empty(), "Sanity ");
const PhaseInfo to_be_popped = top();
if (_depth == 1) {
assert(to_be_popped.id == phase_trc_id_none, "first entry must be none");
} else {
assert(to_be_popped.id != phase_trc_id_none, "subsequent entries must not be none");
}
#endif// ASSERT
if (_depth > 0) {
_depth--;
}
}
inlineconst PhaseInfo& PhaseInfoStack::top() const {
assert(!empty(), "Sanity");
return _stack[_depth - 1];
}
inlinesize_tArenaCounterTable::at(int phase_trc_id, int arena_tag) const {
check_phase_trace_id(phase_trc_id);
check_arena_tag(arena_tag);
return _v[phase_trc_id][arena_tag];
}
inlinevoidArenaCounterTable::add(size_t size, int phase_trc_id, int arena_tag) {
check_arena_tag(arena_tag);
constsize_t old = at(phase_trc_id, arena_tag);
_v[phase_trc_id][arena_tag] += size;
assert(at(phase_trc_id, arena_tag) >= old, "Overflow");
}
inlinevoidArenaCounterTable::sub(size_t size, int phase_trc_id, int arena_tag) {
check_arena_tag(arena_tag);
assert(at(phase_trc_id, arena_tag) >= size, "Underflow (%zu %zu)", at(phase_trc_id, arena_tag), size);
_v[phase_trc_id][arena_tag] -= size;
}
inlinevoidFootprintTimeline::on_footprint_change(size_t cur_abs, unsigned cur_nodes) {
assert(!_inbetween_phases, "no phase started?");
Entry& e = _fifo.current();
e._bytes.update(cur_abs);
e._live_nodes.update(cur_nodes);
}
#endif// SHARE_COMPILATIONMEMSTATINTERNALS_INLINE_HPP