268 |
268 |
269 class TypeSetSerialization { |
269 class TypeSetSerialization { |
270 private: |
270 private: |
271 JfrCheckpointWriter* _leakp_writer; |
271 JfrCheckpointWriter* _leakp_writer; |
272 size_t _elements; |
272 size_t _elements; |
273 bool _class_unload; |
|
274 bool _flushpoint; |
|
275 public: |
273 public: |
276 TypeSetSerialization(bool class_unload, bool flushpoint, JfrCheckpointWriter* leakp_writer = NULL) : |
274 TypeSetSerialization(JfrCheckpointWriter* leakp_writer = NULL) : |
277 _leakp_writer(leakp_writer), _elements(0), _class_unload(class_unload), _flushpoint(flushpoint) {} |
275 _leakp_writer(leakp_writer), _elements(0) {} |
278 void write(JfrCheckpointWriter& writer) { |
276 void write(JfrCheckpointWriter& writer, bool class_unload, bool flushpoint) { |
279 _elements = JfrTypeSet::serialize(&writer, _leakp_writer, _class_unload, _flushpoint); |
277 assert_locked_or_safepoint(ClassLoaderDataGraph_lock); |
|
278 assert_locked_or_safepoint(Module_lock); |
|
279 _elements = JfrTypeSet::serialize(&writer, _leakp_writer, class_unload, flushpoint); |
280 } |
280 } |
281 size_t elements() const { |
281 size_t elements() const { |
282 return _elements; |
282 return _elements; |
283 } |
283 } |
284 }; |
284 }; |
285 |
285 |
286 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) { |
286 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) { |
287 TypeSetSerialization type_set(true, false); |
287 TypeSetSerialization type_set; |
288 type_set.write(writer); |
288 type_set.write(writer, true, false); |
289 }; |
289 }; |
290 |
|
291 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
|
292 |
290 |
293 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) { |
291 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) { |
294 assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); |
292 assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); |
295 TypeSetSerialization type_set(false); |
293 MutexLocker cld_lock(ClassLoaderDataGraph_lock); |
296 type_set.write(writer, &leakp_writer); |
294 MutexLocker module_lock(Module_lock); |
|
295 TypeSetSerialization type_set; |
|
296 type_set.write(writer, false, true); |
297 _elements = type_set.elements(); |
297 _elements = type_set.elements(); |
298 } |
298 } |
299 |
299 |
300 size_t FlushTypeSet::elements() const { |
300 size_t FlushTypeSet::elements() const { |
301 return; |
301 return _elements; |
|
302 } |
302 |
303 |
303 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
304 TypeSet::TypeSet(JfrCheckpointWriter* leakp_writer) : _leakp_writer(leakp_writer) {} |
304 |
305 |
305 void TypeSet::serialize(JfrCheckpointWriter& writer) { |
306 void TypeSet::serialize(JfrCheckpointWriter& writer) { |
306 TypeSetSerialization type_set(false, false, _leakp_writer); |
307 assert(!SafepointSynchronize::is_at_safepoint(), "invariant"); |
307 type_set.write(writer); |
308 MutexLocker cld_lock(ClassLoaderDataGraph_lock); |
|
309 MutexLocker module_lock(Module_lock); |
|
310 TypeSetSerialization type_set(_leakp_writer); |
|
311 type_set.write(writer, false, false); |
308 }; |
312 }; |
309 |
313 |
310 void ThreadStateConstant::serialize(JfrCheckpointWriter& writer) { |
314 void ThreadStateConstant::serialize(JfrCheckpointWriter& writer) { |
311 JfrThreadState::serialize(writer); |
315 JfrThreadState::serialize(writer); |
312 } |
316 } |