< prev index next >

src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp

Print this page




 223 int _compare_mod_ptr_(ModPtr const& lhs, ModPtr const& rhs) { return lhs > rhs ? 1 : (lhs < rhs) ? -1 : 0; }
 224 typedef UniquePredicate<ModPtr, _compare_mod_ptr_> ModulePredicate;
 225 typedef JfrPredicatedArtifactWriterImplHost<ModPtr, LeakModulePredicate, write__artifact__module> LeakModuleWriterImpl;
 226 typedef JfrPredicatedArtifactWriterImplHost<ModPtr, ModulePredicate, write__artifact__module> ModuleWriterImpl;
 227 typedef JfrArtifactWriterHost<LeakModuleWriterImpl, TYPE_MODULE> LeakModuleWriter;
 228 typedef JfrArtifactWriterHost<ModuleWriterImpl, TYPE_MODULE> ModuleWriter;
 229 
 230 int write__artifact__classloader(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* c) {
 231   assert(c != NULL, "invariant");
 232   CldPtr cld = (CldPtr)c;
 233   assert(!cld->is_anonymous(), "invariant");
 234   const traceid cld_id = TRACE_ID(cld);
 235   // class loader type
 236   const Klass* class_loader_klass = cld->class_loader_klass();
 237   if (class_loader_klass == NULL) {
 238     // (primordial) boot class loader
 239     writer->write(cld_id); // class loader instance id
 240     writer->write((traceid)0);  // class loader type id (absence of)
 241     writer->write((traceid)CREATE_SYMBOL_ID(1)); // 1 maps to synthetic name -> "boot"
 242   } else {
 243     Symbol* symbol_name = cld->class_loader_name();
 244     const traceid symbol_name_id = symbol_name != NULL ? artifacts->mark(symbol_name) : 0;
 245     writer->write(cld_id); // class loader instance id
 246     writer->write(TRACE_ID(class_loader_klass)); // class loader type id
 247     writer->write(symbol_name_id == 0 ? (traceid)0 :
 248       (traceid)CREATE_SYMBOL_ID(symbol_name_id)); // class loader instance name
 249   }
 250   return 1;
 251 }
 252 
 253 typedef LeakPredicate<CldPtr> LeakCldPredicate;
 254 int _compare_cld_ptr_(CldPtr const& lhs, CldPtr const& rhs) { return lhs > rhs ? 1 : (lhs < rhs) ? -1 : 0; }
 255 typedef UniquePredicate<CldPtr, _compare_cld_ptr_> CldPredicate;
 256 typedef JfrPredicatedArtifactWriterImplHost<CldPtr, LeakCldPredicate, write__artifact__classloader> LeakCldWriterImpl;
 257 typedef JfrPredicatedArtifactWriterImplHost<CldPtr, CldPredicate, write__artifact__classloader> CldWriterImpl;
 258 typedef JfrArtifactWriterHost<LeakCldWriterImpl, TYPE_CLASSLOADER> LeakCldWriter;
 259 typedef JfrArtifactWriterHost<CldWriterImpl, TYPE_CLASSLOADER> CldWriter;
 260 
 261 typedef const JfrSymbolId::SymbolEntry* SymbolEntryPtr;
 262 
 263 static int write__artifact__symbol__entry__(JfrCheckpointWriter* writer,


 424     assert(entry != NULL, "invariant");
 425     if (_unique_predicate(entry->id())) {
 426       count += write__artifact__symbol__entry__(this->_writer, entry);
 427     }
 428   }
 429   return count;
 430 }
 431 
 432 template <template <typename> class Predicate>
 433 int KlassSymbolWriterImpl<Predicate>::class_loader_symbols(CldPtr cld) {
 434   assert(cld != NULL, "invariant");
 435   assert(!cld->is_anonymous(), "invariant");
 436   int count = 0;
 437   // class loader type
 438   const Klass* class_loader_klass = cld->class_loader_klass();
 439   if (class_loader_klass == NULL) {
 440     // (primordial) boot class loader
 441     CStringEntryPtr entry = this->_artifacts->map_cstring(0);
 442     assert(entry != NULL, "invariant");
 443     assert(strncmp(entry->literal(),
 444       boot_class_loader_name,
 445       strlen(boot_class_loader_name)) == 0, "invariant");
 446     if (_unique_predicate(entry->id())) {
 447       count += write__artifact__cstring__entry__(this->_writer, entry);
 448     }
 449   } else {
 450     const Symbol* class_loader_name = cld->class_loader_name();
 451     if (class_loader_name != NULL) {
 452       SymbolEntryPtr entry = this->_artifacts->map_symbol(class_loader_name);
 453       assert(entry != NULL, "invariant");
 454       if (_unique_predicate(entry->id())) {
 455         count += write__artifact__symbol__entry__(this->_writer, entry);
 456       }
 457     }
 458   }
 459   return count;
 460 }
 461 
 462 template <template <typename> class Predicate>
 463 int KlassSymbolWriterImpl<Predicate>::method_symbols(KlassPtr klass) {
 464   assert(_predicate(klass), "invariant");
 465   assert(_method_used_predicate(klass), "invariant");
 466   assert(METHOD_AND_CLASS_USED_ANY_EPOCH(klass), "invariant");
 467   int count = 0;
 468   const InstanceKlass* const ik = InstanceKlass::cast(klass);
 469   const int len = ik->methods()->length();
 470   for (int i = 0; i < len; ++i) {




 223 int _compare_mod_ptr_(ModPtr const& lhs, ModPtr const& rhs) { return lhs > rhs ? 1 : (lhs < rhs) ? -1 : 0; }
 224 typedef UniquePredicate<ModPtr, _compare_mod_ptr_> ModulePredicate;
 225 typedef JfrPredicatedArtifactWriterImplHost<ModPtr, LeakModulePredicate, write__artifact__module> LeakModuleWriterImpl;
 226 typedef JfrPredicatedArtifactWriterImplHost<ModPtr, ModulePredicate, write__artifact__module> ModuleWriterImpl;
 227 typedef JfrArtifactWriterHost<LeakModuleWriterImpl, TYPE_MODULE> LeakModuleWriter;
 228 typedef JfrArtifactWriterHost<ModuleWriterImpl, TYPE_MODULE> ModuleWriter;
 229 
 230 int write__artifact__classloader(JfrCheckpointWriter* writer, JfrArtifactSet* artifacts, const void* c) {
 231   assert(c != NULL, "invariant");
 232   CldPtr cld = (CldPtr)c;
 233   assert(!cld->is_anonymous(), "invariant");
 234   const traceid cld_id = TRACE_ID(cld);
 235   // class loader type
 236   const Klass* class_loader_klass = cld->class_loader_klass();
 237   if (class_loader_klass == NULL) {
 238     // (primordial) boot class loader
 239     writer->write(cld_id); // class loader instance id
 240     writer->write((traceid)0);  // class loader type id (absence of)
 241     writer->write((traceid)CREATE_SYMBOL_ID(1)); // 1 maps to synthetic name -> "boot"
 242   } else {
 243     Symbol* symbol_name = cld->name();
 244     const traceid symbol_name_id = symbol_name != NULL ? artifacts->mark(symbol_name) : 0;
 245     writer->write(cld_id); // class loader instance id
 246     writer->write(TRACE_ID(class_loader_klass)); // class loader type id
 247     writer->write(symbol_name_id == 0 ? (traceid)0 :
 248       (traceid)CREATE_SYMBOL_ID(symbol_name_id)); // class loader instance name
 249   }
 250   return 1;
 251 }
 252 
 253 typedef LeakPredicate<CldPtr> LeakCldPredicate;
 254 int _compare_cld_ptr_(CldPtr const& lhs, CldPtr const& rhs) { return lhs > rhs ? 1 : (lhs < rhs) ? -1 : 0; }
 255 typedef UniquePredicate<CldPtr, _compare_cld_ptr_> CldPredicate;
 256 typedef JfrPredicatedArtifactWriterImplHost<CldPtr, LeakCldPredicate, write__artifact__classloader> LeakCldWriterImpl;
 257 typedef JfrPredicatedArtifactWriterImplHost<CldPtr, CldPredicate, write__artifact__classloader> CldWriterImpl;
 258 typedef JfrArtifactWriterHost<LeakCldWriterImpl, TYPE_CLASSLOADER> LeakCldWriter;
 259 typedef JfrArtifactWriterHost<CldWriterImpl, TYPE_CLASSLOADER> CldWriter;
 260 
 261 typedef const JfrSymbolId::SymbolEntry* SymbolEntryPtr;
 262 
 263 static int write__artifact__symbol__entry__(JfrCheckpointWriter* writer,


 424     assert(entry != NULL, "invariant");
 425     if (_unique_predicate(entry->id())) {
 426       count += write__artifact__symbol__entry__(this->_writer, entry);
 427     }
 428   }
 429   return count;
 430 }
 431 
 432 template <template <typename> class Predicate>
 433 int KlassSymbolWriterImpl<Predicate>::class_loader_symbols(CldPtr cld) {
 434   assert(cld != NULL, "invariant");
 435   assert(!cld->is_anonymous(), "invariant");
 436   int count = 0;
 437   // class loader type
 438   const Klass* class_loader_klass = cld->class_loader_klass();
 439   if (class_loader_klass == NULL) {
 440     // (primordial) boot class loader
 441     CStringEntryPtr entry = this->_artifacts->map_cstring(0);
 442     assert(entry != NULL, "invariant");
 443     assert(strncmp(entry->literal(),
 444       BOOTSTRAP_LOADER_NAME,
 445       BOOTSTRAP_LOADER_NAME_LEN) == 0, "invariant");
 446     if (_unique_predicate(entry->id())) {
 447       count += write__artifact__cstring__entry__(this->_writer, entry);
 448     }
 449   } else {
 450     const Symbol* class_loader_name = cld->name();
 451     if (class_loader_name != NULL) {
 452       SymbolEntryPtr entry = this->_artifacts->map_symbol(class_loader_name);
 453       assert(entry != NULL, "invariant");
 454       if (_unique_predicate(entry->id())) {
 455         count += write__artifact__symbol__entry__(this->_writer, entry);
 456       }
 457     }
 458   }
 459   return count;
 460 }
 461 
 462 template <template <typename> class Predicate>
 463 int KlassSymbolWriterImpl<Predicate>::method_symbols(KlassPtr klass) {
 464   assert(_predicate(klass), "invariant");
 465   assert(_method_used_predicate(klass), "invariant");
 466   assert(METHOD_AND_CLASS_USED_ANY_EPOCH(klass), "invariant");
 467   int count = 0;
 468   const InstanceKlass* const ik = InstanceKlass::cast(klass);
 469   const int len = ik->methods()->length();
 470   for (int i = 0; i < len; ++i) {


< prev index next >