OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1101 | 1101 |
1102 void Logger::ResumeProfiler() { | 1102 void Logger::ResumeProfiler() { |
1103 profiler_->resume(); | 1103 profiler_->resume(); |
1104 } | 1104 } |
1105 | 1105 |
1106 | 1106 |
1107 int Logger::GetLogLines(int from_pos, char* dest_buf, int max_size) { | 1107 int Logger::GetLogLines(int from_pos, char* dest_buf, int max_size) { |
1108 return Log::GetLogLines(from_pos, dest_buf, max_size); | 1108 return Log::GetLogLines(from_pos, dest_buf, max_size); |
1109 } | 1109 } |
1110 | 1110 |
| 1111 |
| 1112 void Logger::LogCompiledFunctions() { |
| 1113 HandleScope scope; |
| 1114 Handle<SharedFunctionInfo>* sfis = NULL; |
| 1115 int compiled_funcs_count = 0; |
| 1116 |
| 1117 { |
| 1118 AssertNoAllocation no_alloc; |
| 1119 |
| 1120 HeapIterator iterator; |
| 1121 while (iterator.has_next()) { |
| 1122 HeapObject* obj = iterator.next(); |
| 1123 ASSERT(obj != NULL); |
| 1124 if (obj->IsSharedFunctionInfo() |
| 1125 && SharedFunctionInfo::cast(obj)->is_compiled()) { |
| 1126 ++compiled_funcs_count; |
| 1127 } |
| 1128 } |
| 1129 |
| 1130 sfis = NewArray< Handle<SharedFunctionInfo> >(compiled_funcs_count); |
| 1131 iterator.reset(); |
| 1132 |
| 1133 int i = 0; |
| 1134 while (iterator.has_next()) { |
| 1135 HeapObject* obj = iterator.next(); |
| 1136 ASSERT(obj != NULL); |
| 1137 if (obj->IsSharedFunctionInfo() |
| 1138 && SharedFunctionInfo::cast(obj)->is_compiled()) { |
| 1139 sfis[i++] = Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(obj)); |
| 1140 } |
| 1141 } |
| 1142 } |
| 1143 |
| 1144 // During iteration, there can be heap allocation due to |
| 1145 // GetScriptLineNumber call. |
| 1146 for (int i = 0; i < compiled_funcs_count; ++i) { |
| 1147 Handle<SharedFunctionInfo> shared = sfis[i]; |
| 1148 Handle<String> name(String::cast(shared->name())); |
| 1149 Handle<String> func_name(name->length() > 0 ? |
| 1150 *name : shared->inferred_name()); |
| 1151 if (shared->script()->IsScript()) { |
| 1152 Handle<Script> script(Script::cast(shared->script())); |
| 1153 if (script->name()->IsString()) { |
| 1154 Handle<String> script_name(String::cast(script->name())); |
| 1155 int line_num = GetScriptLineNumber(script, shared->start_position()); |
| 1156 if (line_num > 0) { |
| 1157 line_num += script->line_offset()->value() + 1; |
| 1158 LOG(CodeCreateEvent("LazyCompile", shared->code(), *func_name, |
| 1159 *script_name, line_num)); |
| 1160 } else { |
| 1161 // Can't distinguish enum and script here, so always use Script. |
| 1162 LOG(CodeCreateEvent("Script", shared->code(), *script_name)); |
| 1163 } |
| 1164 continue; |
| 1165 } |
| 1166 } |
| 1167 // If no script or script has no name. |
| 1168 LOG(CodeCreateEvent("LazyCompile", shared->code(), *func_name)); |
| 1169 } |
| 1170 |
| 1171 DeleteArray(sfis); |
| 1172 } |
| 1173 |
1111 #endif | 1174 #endif |
1112 | 1175 |
1113 | 1176 |
1114 bool Logger::Setup() { | 1177 bool Logger::Setup() { |
1115 #ifdef ENABLE_LOGGING_AND_PROFILING | 1178 #ifdef ENABLE_LOGGING_AND_PROFILING |
1116 // --log-all enables all the log flags. | 1179 // --log-all enables all the log flags. |
1117 if (FLAG_log_all) { | 1180 if (FLAG_log_all) { |
1118 FLAG_log_runtime = true; | 1181 FLAG_log_runtime = true; |
1119 FLAG_log_api = true; | 1182 FLAG_log_api = true; |
1120 FLAG_log_code = true; | 1183 FLAG_log_code = true; |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1316 } else if (previous_->state_ == EXTERNAL) { | 1379 } else if (previous_->state_ == EXTERNAL) { |
1317 // We are leaving V8. | 1380 // We are leaving V8. |
1318 Heap::Protect(); | 1381 Heap::Protect(); |
1319 } | 1382 } |
1320 } | 1383 } |
1321 #endif | 1384 #endif |
1322 } | 1385 } |
1323 #endif | 1386 #endif |
1324 | 1387 |
1325 } } // namespace v8::internal | 1388 } } // namespace v8::internal |
OLD | NEW |