src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp
branchJEP-349-branch
changeset 57870 00860d9caf4d
parent 57360 5d043a159d5c
child 57878 bffba8d6611a
equal deleted inserted replaced
57862:84ef29ccac56 57870:00860d9caf4d
   303   size_t _elements;
   303   size_t _elements;
   304   bool _class_unload;
   304   bool _class_unload;
   305   bool _flushpoint;
   305   bool _flushpoint;
   306  public:
   306  public:
   307   explicit TypeSetSerialization(bool class_unload, bool flushpoint) : _elements(0), _class_unload(class_unload), _flushpoint(flushpoint) {}
   307   explicit TypeSetSerialization(bool class_unload, bool flushpoint) : _elements(0), _class_unload(class_unload), _flushpoint(flushpoint) {}
   308   void write(JfrCheckpointWriter& writer, JfrCheckpointWriter* leakp_writer) {
   308   void write(JfrCheckpointWriter& writer) {
   309     MutexLocker cld_lock(SafepointSynchronize::is_at_safepoint() ? NULL : ClassLoaderDataGraph_lock);
   309     MutexLocker cld_lock(SafepointSynchronize::is_at_safepoint() ? NULL : ClassLoaderDataGraph_lock);
   310     MutexLocker lock(SafepointSynchronize::is_at_safepoint() ? NULL : Module_lock);
   310     MutexLocker lock(SafepointSynchronize::is_at_safepoint() ? NULL : Module_lock);
   311     _elements = JfrTypeSet::serialize(&writer, leakp_writer, _class_unload, _flushpoint);
   311     _elements = JfrTypeSet::serialize(&writer, _class_unload, _flushpoint);
   312   }
   312   }
   313   size_t elements() const {
   313   size_t elements() const {
   314     return _elements;
   314     return _elements;
   315   }
   315   }
   316 };
   316 };
   317 
   317 
   318 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) {
   318 void ClassUnloadTypeSet::serialize(JfrCheckpointWriter& writer) {
   319   TypeSetSerialization type_set(true, false);
   319   TypeSetSerialization type_set(true, false);
       
   320   type_set.write(writer);
   320   if (LeakProfiler::is_running()) {
   321   if (LeakProfiler::is_running()) {
   321     JfrCheckpointWriter leakp_writer(false, true, Thread::current());
   322     ObjectSampleCheckpoint::on_type_set_unload(writer);
   322     type_set.write(writer, &leakp_writer);
       
   323     ObjectSampleCheckpoint::install(leakp_writer, true, true);
       
   324     return;
   323     return;
   325   }
   324   }
   326   type_set.write(writer, NULL);
       
   327 };
   325 };
   328 
   326 
   329 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) {
   327 void FlushTypeSet::serialize(JfrCheckpointWriter& writer) {
   330   assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
   328   assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
   331   TypeSetSerialization type_set(false, true);
   329   TypeSetSerialization type_set(false, true);
   332   type_set.write(writer, NULL);
   330   type_set.write(writer);
   333   _elements = type_set.elements();
   331   _elements = type_set.elements();
   334 }
   332 }
   335 
   333 
   336 size_t FlushTypeSet::elements() const {
   334 size_t FlushTypeSet::elements() const {
   337   return _elements;
   335   return _elements;
   338 }
   336 }
   339 
   337 
   340 void TypeSet::serialize(JfrCheckpointWriter& writer) {
   338 void TypeSet::serialize(JfrCheckpointWriter& writer) {
   341   TypeSetSerialization type_set(false, false);
   339   TypeSetSerialization type_set(false, false);
   342   if (LeakProfiler::is_suspended()) {
   340   type_set.write(writer);
   343     JfrCheckpointWriter leakp_writer(false, true, Thread::current());
       
   344     type_set.write(writer, &leakp_writer);
       
   345     ObjectSampleCheckpoint::install(leakp_writer, false, true);
       
   346     return;
       
   347   }
       
   348   type_set.write(writer, NULL);
       
   349 };
   341 };
   350 
   342 
   351 void ThreadStateConstant::serialize(JfrCheckpointWriter& writer) {
   343 void ThreadStateConstant::serialize(JfrCheckpointWriter& writer) {
   352   JfrThreadState::serialize(writer);
   344   JfrThreadState::serialize(writer);
   353 }
   345 }