| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 case Code::FUNCTION: return code->optimizable() ? "~" : ""; | 1018 case Code::FUNCTION: return code->optimizable() ? "~" : ""; |
| 1019 case Code::OPTIMIZED_FUNCTION: return "*"; | 1019 case Code::OPTIMIZED_FUNCTION: return "*"; |
| 1020 default: return ""; | 1020 default: return ""; |
| 1021 } | 1021 } |
| 1022 } | 1022 } |
| 1023 | 1023 |
| 1024 | 1024 |
| 1025 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1025 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1026 Code* code, | 1026 Code* code, |
| 1027 SharedFunctionInfo* shared, | 1027 SharedFunctionInfo* shared, |
| 1028 CompilationInfo* info, |
| 1028 Name* name) { | 1029 Name* name) { |
| 1029 if (!is_logging_code_events()) return; | 1030 if (!is_logging_code_events()) return; |
| 1030 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 1031 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
| 1031 name_buffer_->Reset(); | 1032 name_buffer_->Reset(); |
| 1032 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 1033 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
| 1033 name_buffer_->AppendByte(':'); | 1034 name_buffer_->AppendByte(':'); |
| 1034 name_buffer_->AppendBytes(ComputeMarker(code)); | 1035 name_buffer_->AppendBytes(ComputeMarker(code)); |
| 1035 if (name->IsString()) { | 1036 if (name->IsString()) { |
| 1036 name_buffer_->AppendString(String::cast(name)); | 1037 name_buffer_->AppendString(String::cast(name)); |
| 1037 } else { | 1038 } else { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 msg.WriteToLogFile(); | 1096 msg.WriteToLogFile(); |
| 1096 } | 1097 } |
| 1097 | 1098 |
| 1098 | 1099 |
| 1099 // Although, it is possible to extract source and line from | 1100 // Although, it is possible to extract source and line from |
| 1100 // the SharedFunctionInfo object, we left it to caller | 1101 // the SharedFunctionInfo object, we left it to caller |
| 1101 // to leave logging functions free from heap allocations. | 1102 // to leave logging functions free from heap allocations. |
| 1102 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1103 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1103 Code* code, | 1104 Code* code, |
| 1104 SharedFunctionInfo* shared, | 1105 SharedFunctionInfo* shared, |
| 1106 CompilationInfo* info, |
| 1105 Name* source, int line) { | 1107 Name* source, int line) { |
| 1106 if (!is_logging_code_events()) return; | 1108 if (!is_logging_code_events()) return; |
| 1107 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 1109 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
| 1108 name_buffer_->Reset(); | 1110 name_buffer_->Reset(); |
| 1109 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 1111 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
| 1110 name_buffer_->AppendByte(':'); | 1112 name_buffer_->AppendByte(':'); |
| 1111 name_buffer_->AppendBytes(ComputeMarker(code)); | 1113 name_buffer_->AppendBytes(ComputeMarker(code)); |
| 1112 name_buffer_->AppendString(shared->DebugName()); | 1114 name_buffer_->AppendString(shared->DebugName()); |
| 1113 name_buffer_->AppendByte(' '); | 1115 name_buffer_->AppendByte(' '); |
| 1114 if (source->IsString()) { | 1116 if (source->IsString()) { |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1737 Handle<String> func_name(shared->DebugName()); | 1739 Handle<String> func_name(shared->DebugName()); |
| 1738 if (shared->script()->IsScript()) { | 1740 if (shared->script()->IsScript()) { |
| 1739 Handle<Script> script(Script::cast(shared->script())); | 1741 Handle<Script> script(Script::cast(shared->script())); |
| 1740 if (script->name()->IsString()) { | 1742 if (script->name()->IsString()) { |
| 1741 Handle<String> script_name(String::cast(script->name())); | 1743 Handle<String> script_name(String::cast(script->name())); |
| 1742 int line_num = GetScriptLineNumber(script, shared->start_position()); | 1744 int line_num = GetScriptLineNumber(script, shared->start_position()); |
| 1743 if (line_num > 0) { | 1745 if (line_num > 0) { |
| 1744 PROFILE(isolate_, | 1746 PROFILE(isolate_, |
| 1745 CodeCreateEvent( | 1747 CodeCreateEvent( |
| 1746 Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), | 1748 Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| 1747 *code, *shared, | 1749 *code, *shared, NULL, |
| 1748 *script_name, line_num + 1)); | 1750 *script_name, line_num + 1)); |
| 1749 } else { | 1751 } else { |
| 1750 // Can't distinguish eval and script here, so always use Script. | 1752 // Can't distinguish eval and script here, so always use Script. |
| 1751 PROFILE(isolate_, | 1753 PROFILE(isolate_, |
| 1752 CodeCreateEvent( | 1754 CodeCreateEvent( |
| 1753 Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), | 1755 Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
| 1754 *code, *shared, *script_name)); | 1756 *code, *shared, NULL, *script_name)); |
| 1755 } | 1757 } |
| 1756 } else { | 1758 } else { |
| 1757 PROFILE(isolate_, | 1759 PROFILE(isolate_, |
| 1758 CodeCreateEvent( | 1760 CodeCreateEvent( |
| 1759 Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), | 1761 Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script), |
| 1760 *code, *shared, *func_name)); | 1762 *code, *shared, NULL, *func_name)); |
| 1761 } | 1763 } |
| 1762 } else if (shared->IsApiFunction()) { | 1764 } else if (shared->IsApiFunction()) { |
| 1763 // API function. | 1765 // API function. |
| 1764 FunctionTemplateInfo* fun_data = shared->get_api_func_data(); | 1766 FunctionTemplateInfo* fun_data = shared->get_api_func_data(); |
| 1765 Object* raw_call_data = fun_data->call_code(); | 1767 Object* raw_call_data = fun_data->call_code(); |
| 1766 if (!raw_call_data->IsUndefined()) { | 1768 if (!raw_call_data->IsUndefined()) { |
| 1767 CallHandlerInfo* call_data = CallHandlerInfo::cast(raw_call_data); | 1769 CallHandlerInfo* call_data = CallHandlerInfo::cast(raw_call_data); |
| 1768 Object* callback_obj = call_data->callback(); | 1770 Object* callback_obj = call_data->callback(); |
| 1769 Address entry_point = v8::ToCData<Address>(callback_obj); | 1771 Address entry_point = v8::ToCData<Address>(callback_obj); |
| 1770 PROFILE(isolate_, CallbackEvent(*func_name, entry_point)); | 1772 PROFILE(isolate_, CallbackEvent(*func_name, entry_point)); |
| 1771 } | 1773 } |
| 1772 } else { | 1774 } else { |
| 1773 PROFILE(isolate_, | 1775 PROFILE(isolate_, |
| 1774 CodeCreateEvent( | 1776 CodeCreateEvent( |
| 1775 Logger::LAZY_COMPILE_TAG, *code, *shared, *func_name)); | 1777 Logger::LAZY_COMPILE_TAG, *code, *shared, NULL, *func_name)); |
| 1776 } | 1778 } |
| 1777 } | 1779 } |
| 1778 | 1780 |
| 1779 | 1781 |
| 1780 void Logger::LogCompiledFunctions() { | 1782 void Logger::LogCompiledFunctions() { |
| 1781 Heap* heap = isolate_->heap(); | 1783 Heap* heap = isolate_->heap(); |
| 1782 heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, | 1784 heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, |
| 1783 "Logger::LogCompiledFunctions"); | 1785 "Logger::LogCompiledFunctions"); |
| 1784 HandleScope scope(isolate_); | 1786 HandleScope scope(isolate_); |
| 1785 const int compiled_funcs_count = EnumerateCompiledFunctions(heap, NULL, NULL); | 1787 const int compiled_funcs_count = EnumerateCompiledFunctions(heap, NULL, NULL); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1893 profiler_ = NULL; | 1895 profiler_ = NULL; |
| 1894 } | 1896 } |
| 1895 | 1897 |
| 1896 delete ticker_; | 1898 delete ticker_; |
| 1897 ticker_ = NULL; | 1899 ticker_ = NULL; |
| 1898 | 1900 |
| 1899 return log_->Close(); | 1901 return log_->Close(); |
| 1900 } | 1902 } |
| 1901 | 1903 |
| 1902 } } // namespace v8::internal | 1904 } } // namespace v8::internal |
| OLD | NEW |