src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 8028468 Sdiff src/share/vm/ci

src/share/vm/ci/ciEnv.cpp

Print this page




1130     record_failure(reason);
1131   }
1132 }
1133 
1134 // ------------------------------------------------------------------
1135 // ciEnv::record_out_of_memory_failure()
1136 void ciEnv::record_out_of_memory_failure() {
1137   // If memory is low, we stop compiling methods.
1138   record_method_not_compilable("out of memory");
1139 }
1140 
1141 ciInstance* ciEnv::unloaded_ciinstance() {
1142   GUARDED_VM_ENTRY(return _factory->get_unloaded_object_constant();)
1143 }
1144 
1145 // ------------------------------------------------------------------
1146 // ciEnv::dump_replay_data*
1147 
1148 // Don't change thread state and acquire any locks.
1149 // Safe to call from VM error reporter.



























1150 void ciEnv::dump_replay_data_unsafe(outputStream* out) {
1151   ResourceMark rm;
1152 #if INCLUDE_JVMTI
1153   out->print_cr("JvmtiExport can_access_local_variables %d",     _jvmti_can_access_local_variables);
1154   out->print_cr("JvmtiExport can_hotswap_or_post_breakpoint %d", _jvmti_can_hotswap_or_post_breakpoint);
1155   out->print_cr("JvmtiExport can_post_on_exceptions %d",         _jvmti_can_post_on_exceptions);
1156 #endif // INCLUDE_JVMTI
1157 
1158   GrowableArray<ciMetadata*>* objects = _factory->get_ci_metadata();
1159   out->print_cr("# %d ciObject found", objects->length());
1160   for (int i = 0; i < objects->length(); i++) {
1161     objects->at(i)->dump_replay_data(out);
1162   }
1163   CompileTask* task = this->task();
1164   Method* method = task->method();
1165   int entry_bci = task->osr_bci();
1166   int comp_level = task->comp_level();
1167   // Klass holder = method->method_holder();
1168   out->print_cr("compile %s %s %s %d %d",
1169                 method->klass_name()->as_quoted_ascii(),
1170                 method->name()->as_quoted_ascii(),
1171                 method->signature()->as_quoted_ascii(),
1172                 entry_bci, comp_level);
1173   out->flush();
1174 }
1175 
1176 void ciEnv::dump_replay_data(outputStream* out) {
1177   GUARDED_VM_ENTRY(
1178     MutexLocker ml(Compile_lock);
1179     dump_replay_data_unsafe(out);
1180   )
1181 }












































1130     record_failure(reason);
1131   }
1132 }
1133 
1134 // ------------------------------------------------------------------
1135 // ciEnv::record_out_of_memory_failure()
1136 void ciEnv::record_out_of_memory_failure() {
1137   // If memory is low, we stop compiling methods.
1138   record_method_not_compilable("out of memory");
1139 }
1140 
1141 ciInstance* ciEnv::unloaded_ciinstance() {
1142   GUARDED_VM_ENTRY(return _factory->get_unloaded_object_constant();)
1143 }
1144 
1145 // ------------------------------------------------------------------
1146 // ciEnv::dump_replay_data*
1147 
1148 // Don't change thread state and acquire any locks.
1149 // Safe to call from VM error reporter.
1150 
1151 void ciEnv::dump_compile_data(outputStream* out) {
1152   CompileTask* task = this->task();
1153   Method* method = task->method();
1154   int entry_bci = task->osr_bci();
1155   int comp_level = task->comp_level();
1156   out->print("compile %s %s %s %d %d",
1157                 method->klass_name()->as_quoted_ascii(),
1158                 method->name()->as_quoted_ascii(),
1159                 method->signature()->as_quoted_ascii(),
1160                 entry_bci, comp_level);
1161   if (compiler_data() != NULL) {
1162     if (is_c2_compile(comp_level)) { // C2 or Shark
1163 #ifdef COMPILER2
1164       // Dump C2 inlining data.
1165       ((Compile*)compiler_data())->dump_inline_data(out);
1166 #endif
1167     } else if (is_c1_compile(comp_level)) { // C1
1168 #ifdef COMPILER1
1169       // Dump C1 inlining data.
1170       ((Compilation*)compiler_data())->dump_inline_data(out);
1171 #endif
1172     }
1173   }
1174   out->cr();
1175 }
1176 
1177 void ciEnv::dump_replay_data_unsafe(outputStream* out) {
1178   ResourceMark rm;
1179 #if INCLUDE_JVMTI
1180   out->print_cr("JvmtiExport can_access_local_variables %d",     _jvmti_can_access_local_variables);
1181   out->print_cr("JvmtiExport can_hotswap_or_post_breakpoint %d", _jvmti_can_hotswap_or_post_breakpoint);
1182   out->print_cr("JvmtiExport can_post_on_exceptions %d",         _jvmti_can_post_on_exceptions);
1183 #endif // INCLUDE_JVMTI
1184 
1185   GrowableArray<ciMetadata*>* objects = _factory->get_ci_metadata();
1186   out->print_cr("# %d ciObject found", objects->length());
1187   for (int i = 0; i < objects->length(); i++) {
1188     objects->at(i)->dump_replay_data(out);
1189   }
1190   dump_compile_data(out);









1191   out->flush();
1192 }
1193 
1194 void ciEnv::dump_replay_data(outputStream* out) {
1195   GUARDED_VM_ENTRY(
1196     MutexLocker ml(Compile_lock);
1197     dump_replay_data_unsafe(out);
1198   )
1199 }
1200 
1201 void ciEnv::dump_replay_data(int compile_id) {
1202   static char buffer[O_BUFLEN];
1203   int ret = jio_snprintf(buffer, O_BUFLEN, "replay_pid%p_compid%d.log", os::current_process_id(), compile_id);
1204   if (ret > 0) {
1205     int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
1206     if (fd != -1) {
1207       FILE* replay_data_file = os::open(fd, "w");
1208       if (replay_data_file != NULL) {
1209         fileStream replay_data_stream(replay_data_file, /*need_close=*/true);
1210         dump_replay_data(&replay_data_stream);
1211         tty->print("# Compiler replay data is saved as: ");
1212         tty->print_cr(buffer);
1213       } else {
1214         tty->print_cr("# Can't open file to dump replay data.");
1215       }
1216     }
1217   }
1218 }
1219 
1220 void ciEnv::dump_inline_data(int compile_id) {
1221   static char buffer[O_BUFLEN];
1222   int ret = jio_snprintf(buffer, O_BUFLEN, "inline_pid%p_compid%d.log", os::current_process_id(), compile_id);
1223   if (ret > 0) {
1224     int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
1225     if (fd != -1) {
1226       FILE* inline_data_file = os::open(fd, "w");
1227       if (inline_data_file != NULL) {
1228         fileStream replay_data_stream(inline_data_file, /*need_close=*/true);
1229         GUARDED_VM_ENTRY(
1230           MutexLocker ml(Compile_lock);
1231           dump_compile_data(&replay_data_stream);
1232         )
1233         replay_data_stream.flush();
1234         tty->print("# Compiler inline data is saved as: ");
1235         tty->print_cr(buffer);
1236       } else {
1237         tty->print_cr("# Can't open file to dump inline data.");
1238       }
1239     }
1240   }
1241 }
src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File