40 // to the (entire) buffer (cas identity).
41 //
42 // Stores to the buffer should uphold transactional semantics.
43 // A new _pos must be updated only after all intended stores have completed.
44 // The relation between _pos and _top must hold atomically,
45 // e.g. the delta must always be fully parsable.
46 // _top can move concurrently by other threads but is always <= _pos.
47 //
48 class JfrBuffer {
49 private:
50 JfrBuffer* _next;
51 JfrBuffer* _prev;
52 const void* volatile _identity;
53 u1* _pos;
54 mutable const u1* volatile _top;
55 u2 _flags;
56 u2 _header_size;
57 u4 _size;
58
59 const u1* stable_top() const;
60 void clear_flags();
61
62 public:
63 JfrBuffer();
64 bool initialize(size_t header_size, size_t size, const void* id = NULL);
65 void reinitialize();
66 void concurrent_reinitialization();
67 size_t discard();
68 JfrBuffer* next() const {
69 return _next;
70 }
71
72 JfrBuffer* prev() const {
73 return _prev;
74 }
75
76 void set_next(JfrBuffer* next) {
77 _next = next;
78 }
79
80 void set_prev(JfrBuffer* prev) {
133 }
134
135 size_t free_size() const {
136 return end() - pos();
137 }
138
139 size_t unflushed_size() const;
140
141 bool empty() const {
142 return pos() == start();
143 }
144
145 const void* identity() const {
146 return _identity;
147 }
148
149 void clear_identity();
150
151 void acquire(const void* id);
152 bool try_acquire(const void* id);
153 void release();
154
155 void move(JfrBuffer* const to, size_t size);
156 void concurrent_move_and_reinitialize(JfrBuffer* const to, size_t size);
157
158 bool transient() const;
159 void set_transient();
160 void clear_transient();
161
162 bool lease() const;
163 void set_lease();
164 void clear_lease();
165
166 bool retired() const;
167 void set_retired();
168 void clear_retired();
169
170 debug_only(bool acquired_by_self() const;)
171 };
172
173 class JfrAgeNode : public JfrBuffer {
174 private:
175 JfrBuffer* _retired;
176
177 public:
178 JfrAgeNode() : _retired(NULL) {}
179 void set_retired_buffer(JfrBuffer* retired) {
180 _retired = retired;
181 }
182 JfrBuffer* retired_buffer() const {
183 return _retired;
184 }
185 };
186
187 #endif // SHARE_VM_JFR_RECORDER_STORAGE_JFRBUFFER_HPP
|
40 // to the (entire) buffer (cas identity).
41 //
42 // Stores to the buffer should uphold transactional semantics.
43 // A new _pos must be updated only after all intended stores have completed.
44 // The relation between _pos and _top must hold atomically,
45 // e.g. the delta must always be fully parsable.
46 // _top can move concurrently by other threads but is always <= _pos.
47 //
48 class JfrBuffer {
49 private:
50 JfrBuffer* _next;
51 JfrBuffer* _prev;
52 const void* volatile _identity;
53 u1* _pos;
54 mutable const u1* volatile _top;
55 u2 _flags;
56 u2 _header_size;
57 u4 _size;
58
59 const u1* stable_top() const;
60
61 public:
62 JfrBuffer();
63 bool initialize(size_t header_size, size_t size, const void* id = NULL);
64 void reinitialize();
65 void concurrent_reinitialization();
66 size_t discard();
67 JfrBuffer* next() const {
68 return _next;
69 }
70
71 JfrBuffer* prev() const {
72 return _prev;
73 }
74
75 void set_next(JfrBuffer* next) {
76 _next = next;
77 }
78
79 void set_prev(JfrBuffer* prev) {
132 }
133
134 size_t free_size() const {
135 return end() - pos();
136 }
137
138 size_t unflushed_size() const;
139
140 bool empty() const {
141 return pos() == start();
142 }
143
144 const void* identity() const {
145 return _identity;
146 }
147
148 void clear_identity();
149
150 void acquire(const void* id);
151 bool try_acquire(const void* id);
152 bool acquired_by(const void* id) const;
153 bool acquired_by_self() const;
154 void release();
155
156 void move(JfrBuffer* const to, size_t size);
157 void concurrent_move_and_reinitialize(JfrBuffer* const to, size_t size);
158
159 bool transient() const;
160 void set_transient();
161 void clear_transient();
162
163 bool lease() const;
164 void set_lease();
165 void clear_lease();
166
167 bool retired() const;
168 void set_retired();
169 void clear_retired();
170 };
171
172 class JfrAgeNode : public JfrBuffer {
173 private:
174 JfrBuffer* _retired;
175
176 public:
177 JfrAgeNode() : _retired(NULL) {}
178 void set_retired_buffer(JfrBuffer* retired) {
179 _retired = retired;
180 }
181 JfrBuffer* retired_buffer() const {
182 return _retired;
183 }
184 };
185
186 #endif // SHARE_VM_JFR_RECORDER_STORAGE_JFRBUFFER_HPP
|