src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp
branchJEP-349-branch
changeset 58206 87436c6f681f
parent 58157 9dca61a7df19
child 58251 c4067538a0f2
equal deleted inserted replaced
58205:9a078d4cf8a4 58206:87436c6f681f
   202   assert(k != NULL, "invariant");
   202   assert(k != NULL, "invariant");
   203   KlassPtr klass = (KlassPtr)k;
   203   KlassPtr klass = (KlassPtr)k;
   204   return write_klass(writer, klass, true);
   204   return write_klass(writer, klass, true);
   205 }
   205 }
   206 
   206 
       
   207 static bool is_implied(const Klass* klass) {
       
   208   assert(klass != NULL, "invariant");
       
   209   return klass->is_subclass_of(SystemDictionary::ClassLoader_klass()) || klass == SystemDictionary::Object_klass();
       
   210 }
       
   211 
   207 static void do_implied(Klass* klass) {
   212 static void do_implied(Klass* klass) {
   208   assert(klass != NULL, "invariant");
   213   assert(klass != NULL, "invariant");
   209   if (klass->is_subclass_of(SystemDictionary::ClassLoader_klass()) || klass == SystemDictionary::Object_klass()) {
   214   if (is_implied(klass)) {
   210     if (_leakp_writer != NULL) {
   215     if (_leakp_writer != NULL) {
   211       SET_LEAKP(klass);
   216       SET_LEAKP(klass);
   212     }
   217     }
   213     _subsystem_callback->do_artifact(klass);
   218     _subsystem_callback->do_artifact(klass);
   214   }
   219   }
   256 typedef SerializePredicate<KlassPtr> KlassPredicate;
   261 typedef SerializePredicate<KlassPtr> KlassPredicate;
   257 typedef JfrPredicatedTypeWriterImplHost<KlassPtr, KlassPredicate, write__klass> KlassWriterImpl;
   262 typedef JfrPredicatedTypeWriterImplHost<KlassPtr, KlassPredicate, write__klass> KlassWriterImpl;
   258 typedef JfrTypeWriterHost<KlassWriterImpl, TYPE_CLASS> KlassWriter;
   263 typedef JfrTypeWriterHost<KlassWriterImpl, TYPE_CLASS> KlassWriter;
   259 typedef CompositeFunctor<KlassPtr, KlassWriter, KlassArtifactRegistrator> KlassWriterRegistration;
   264 typedef CompositeFunctor<KlassPtr, KlassWriter, KlassArtifactRegistrator> KlassWriterRegistration;
   260 typedef JfrArtifactCallbackHost<KlassPtr, KlassWriterRegistration> KlassCallback;
   265 typedef JfrArtifactCallbackHost<KlassPtr, KlassWriterRegistration> KlassCallback;
       
   266 
       
   267 template <>
       
   268 class LeakPredicate<const Klass*> {
       
   269 public:
       
   270   LeakPredicate(bool class_unload) {}
       
   271   bool operator()(const Klass* klass) {
       
   272     assert(klass != NULL, "invariant");
       
   273     return IS_LEAKP(klass) || is_implied(klass);
       
   274   }
       
   275 };
   261 
   276 
   262 typedef LeakPredicate<KlassPtr> LeakKlassPredicate;
   277 typedef LeakPredicate<KlassPtr> LeakKlassPredicate;
   263 typedef JfrPredicatedTypeWriterImplHost<KlassPtr, LeakKlassPredicate, write__klass__leakp> LeakKlassWriterImpl;
   278 typedef JfrPredicatedTypeWriterImplHost<KlassPtr, LeakKlassPredicate, write__klass__leakp> LeakKlassWriterImpl;
   264 typedef JfrTypeWriterHost<LeakKlassWriterImpl, TYPE_CLASS> LeakKlassWriter;
   279 typedef JfrTypeWriterHost<LeakKlassWriterImpl, TYPE_CLASS> LeakKlassWriter;
   265 
   280