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 } |