Chromium Code Reviews| Index: src/log.cc |
| diff --git a/src/log.cc b/src/log.cc |
| index d21bf3f5be9dd3aa565e6d7fb2552943c146ab6b..fd55331b00e31f2d6fda3945b3e8f926aec18017 100644 |
| --- a/src/log.cc |
| +++ b/src/log.cc |
| @@ -1527,6 +1527,54 @@ void Logger::LogCodeObjects() { |
| } |
| +void Logger::LogExistingFunction(SharedFunctionInfo* shared_ptr, |
| + Code* code_ptr) { |
| + HandleScope scope; |
| + Handle<SharedFunctionInfo> shared(shared_ptr); |
| + Handle<Code> code(code_ptr); |
| + Handle<String> func_name(shared->DebugName()); |
| + if (shared->script()->IsScript()) { |
| + Handle<Script> script(Script::cast(shared->script())); |
| + if (script->name()->IsString()) { |
| + Handle<String> script_name(String::cast(script->name())); |
| + int line_num = GetScriptLineNumber(script, shared->start_position()); |
| + if (line_num > 0) { |
| + PROFILE(ISOLATE, |
| + CodeCreateEvent( |
| + Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| + *code, *shared, |
| + *script_name, line_num + 1)); |
| + } else { |
| + // Can't distinguish eval and script here, so always use Script. |
| + PROFILE(ISOLATE, |
| + CodeCreateEvent( |
| + Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
| + *code, *shared, *script_name)); |
| + } |
| + } else { |
| + PROFILE(ISOLATE, |
| + CodeCreateEvent( |
| + Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| + *code, *shared, *func_name)); |
| + } |
| + } else if (shared->IsApiFunction()) { |
| + // API function. |
| + FunctionTemplateInfo* fun_data = shared->get_api_func_data(); |
| + Object* raw_call_data = fun_data->call_code(); |
| + if (!raw_call_data->IsUndefined()) { |
| + CallHandlerInfo* call_data = CallHandlerInfo::cast(raw_call_data); |
| + Object* callback_obj = call_data->callback(); |
| + Address entry_point = v8::ToCData<Address>(callback_obj); |
| + PROFILE(ISOLATE, CallbackEvent(*func_name, entry_point)); |
| + } |
| + } else { |
| + PROFILE(ISOLATE, |
| + CodeCreateEvent( |
| + Logger::LAZY_COMPILE_TAG, *code, *shared, *func_name)); |
| + } |
| +} |
| + |
| + |
| void Logger::LogCompiledFunctions() { |
| HandleScope scope; |
| const int compiled_funcs_count = EnumerateCompiledFunctions(NULL, NULL); |
| @@ -1540,48 +1588,7 @@ void Logger::LogCompiledFunctions() { |
| if (*code_objects[i] == Isolate::Current()->builtins()->builtin( |
| Builtins::kLazyCompile)) |
| continue; |
| - Handle<SharedFunctionInfo> shared = sfis[i]; |
| - Handle<String> func_name(shared->DebugName()); |
| - if (shared->script()->IsScript()) { |
| - Handle<Script> script(Script::cast(shared->script())); |
| - if (script->name()->IsString()) { |
| - Handle<String> script_name(String::cast(script->name())); |
| - int line_num = GetScriptLineNumber(script, shared->start_position()); |
| - if (line_num > 0) { |
| - PROFILE(ISOLATE, |
| - CodeCreateEvent( |
| - Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| - *code_objects[i], *shared, |
| - *script_name, line_num + 1)); |
| - } else { |
| - // Can't distinguish eval and script here, so always use Script. |
| - PROFILE(ISOLATE, |
| - CodeCreateEvent( |
| - Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
| - *code_objects[i], *shared, *script_name)); |
| - } |
| - } else { |
| - PROFILE(ISOLATE, |
| - CodeCreateEvent( |
| - Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| - *code_objects[i], *shared, *func_name)); |
| - } |
| - } else if (shared->IsApiFunction()) { |
| - // API function. |
| - FunctionTemplateInfo* fun_data = shared->get_api_func_data(); |
| - Object* raw_call_data = fun_data->call_code(); |
| - if (!raw_call_data->IsUndefined()) { |
| - CallHandlerInfo* call_data = CallHandlerInfo::cast(raw_call_data); |
| - Object* callback_obj = call_data->callback(); |
| - Address entry_point = v8::ToCData<Address>(callback_obj); |
| - PROFILE(ISOLATE, CallbackEvent(*func_name, entry_point)); |
| - } |
| - } else { |
| - PROFILE(ISOLATE, |
| - CodeCreateEvent( |
| - Logger::LAZY_COMPILE_TAG, *code_objects[i], |
| - *shared, *func_name)); |
| - } |
| + LogExistingFunction(*sfis[i], *code_objects[i]); |
|
Erik Corry
2011/09/14 10:56:52
This is in handle code and it starts by putting it
mnaganov (inactive)
2011/09/14 11:16:07
Indeed. Fixed, thanks!
|
| } |
| } |