src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp
branchJEP-349-branch
changeset 58158 369ebc2a11c2
parent 58157 9dca61a7df19
child 58251 c4067538a0f2
equal deleted inserted replaced
58157:9dca61a7df19 58158:369ebc2a11c2
   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 }