Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/gc/shenandoah/shenandoahAllocRequest.hpp
40960 views
1
/*
2
* Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHALLOCREQUEST_HPP
26
#define SHARE_GC_SHENANDOAH_SHENANDOAHALLOCREQUEST_HPP
27
28
#include "memory/allocation.hpp"
29
30
class ShenandoahAllocRequest : StackObj {
31
public:
32
enum Type {
33
_alloc_shared, // Allocate common, outside of TLAB
34
_alloc_shared_gc, // Allocate common, outside of GCLAB
35
_alloc_tlab, // Allocate TLAB
36
_alloc_gclab, // Allocate GCLAB
37
_ALLOC_LIMIT
38
};
39
40
static const char* alloc_type_to_string(Type type) {
41
switch (type) {
42
case _alloc_shared:
43
return "Shared";
44
case _alloc_shared_gc:
45
return "Shared GC";
46
case _alloc_tlab:
47
return "TLAB";
48
case _alloc_gclab:
49
return "GCLAB";
50
default:
51
ShouldNotReachHere();
52
return "";
53
}
54
}
55
56
private:
57
size_t _min_size;
58
size_t _requested_size;
59
size_t _actual_size;
60
Type _alloc_type;
61
#ifdef ASSERT
62
bool _actual_size_set;
63
#endif
64
65
ShenandoahAllocRequest(size_t _min_size, size_t _requested_size, Type _alloc_type) :
66
_min_size(_min_size), _requested_size(_requested_size),
67
_actual_size(0), _alloc_type(_alloc_type)
68
#ifdef ASSERT
69
, _actual_size_set(false)
70
#endif
71
{}
72
73
public:
74
static inline ShenandoahAllocRequest for_tlab(size_t min_size, size_t requested_size) {
75
return ShenandoahAllocRequest(min_size, requested_size, _alloc_tlab);
76
}
77
78
static inline ShenandoahAllocRequest for_gclab(size_t min_size, size_t requested_size) {
79
return ShenandoahAllocRequest(min_size, requested_size, _alloc_gclab);
80
}
81
82
static inline ShenandoahAllocRequest for_shared_gc(size_t requested_size) {
83
return ShenandoahAllocRequest(0, requested_size, _alloc_shared_gc);
84
}
85
86
static inline ShenandoahAllocRequest for_shared(size_t requested_size) {
87
return ShenandoahAllocRequest(0, requested_size, _alloc_shared);
88
}
89
90
inline size_t size() {
91
return _requested_size;
92
}
93
94
inline Type type() {
95
return _alloc_type;
96
}
97
98
inline const char* type_string() {
99
return alloc_type_to_string(_alloc_type);
100
}
101
102
inline size_t min_size() {
103
assert (is_lab_alloc(), "Only access for LAB allocs");
104
return _min_size;
105
}
106
107
inline size_t actual_size() {
108
assert (_actual_size_set, "Should be set");
109
return _actual_size;
110
}
111
112
inline void set_actual_size(size_t v) {
113
#ifdef ASSERT
114
assert (!_actual_size_set, "Should not be set");
115
_actual_size_set = true;
116
#endif
117
_actual_size = v;
118
}
119
120
inline bool is_mutator_alloc() {
121
switch (_alloc_type) {
122
case _alloc_tlab:
123
case _alloc_shared:
124
return true;
125
case _alloc_gclab:
126
case _alloc_shared_gc:
127
return false;
128
default:
129
ShouldNotReachHere();
130
return false;
131
}
132
}
133
134
inline bool is_gc_alloc() {
135
switch (_alloc_type) {
136
case _alloc_tlab:
137
case _alloc_shared:
138
return false;
139
case _alloc_gclab:
140
case _alloc_shared_gc:
141
return true;
142
default:
143
ShouldNotReachHere();
144
return false;
145
}
146
}
147
148
inline bool is_lab_alloc() {
149
switch (_alloc_type) {
150
case _alloc_tlab:
151
case _alloc_gclab:
152
return true;
153
case _alloc_shared:
154
case _alloc_shared_gc:
155
return false;
156
default:
157
ShouldNotReachHere();
158
return false;
159
}
160
}
161
};
162
163
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHALLOCREQUEST_HPP
164
165