| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdarg.h> | 5 #include <stdarg.h> |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 | 796 |
| 797 | 797 |
| 798 bool Logger::hasCodeEventListener(CodeEventListener* listener) { | 798 bool Logger::hasCodeEventListener(CodeEventListener* listener) { |
| 799 return listeners_.Contains(listener); | 799 return listeners_.Contains(listener); |
| 800 } | 800 } |
| 801 | 801 |
| 802 | 802 |
| 803 void Logger::ProfilerBeginEvent() { | 803 void Logger::ProfilerBeginEvent() { |
| 804 if (!log_->IsEnabled()) return; | 804 if (!log_->IsEnabled()) return; |
| 805 Log::MessageBuilder msg(log_); | 805 Log::MessageBuilder msg(log_); |
| 806 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs); | 806 msg.Append("profiler,\"begin\",%d", kSamplingIntervalMs); |
| 807 msg.WriteToLogFile(); | 807 msg.WriteToLogFile(); |
| 808 } | 808 } |
| 809 | 809 |
| 810 | 810 |
| 811 void Logger::StringEvent(const char* name, const char* value) { | 811 void Logger::StringEvent(const char* name, const char* value) { |
| 812 if (FLAG_log) UncheckedStringEvent(name, value); | 812 if (FLAG_log) UncheckedStringEvent(name, value); |
| 813 } | 813 } |
| 814 | 814 |
| 815 | 815 |
| 816 void Logger::UncheckedStringEvent(const char* name, const char* value) { | 816 void Logger::UncheckedStringEvent(const char* name, const char* value) { |
| 817 if (!log_->IsEnabled()) return; | 817 if (!log_->IsEnabled()) return; |
| 818 Log::MessageBuilder msg(log_); | 818 Log::MessageBuilder msg(log_); |
| 819 msg.Append("%s,\"%s\"\n", name, value); | 819 msg.Append("%s,\"%s\"", name, value); |
| 820 msg.WriteToLogFile(); | 820 msg.WriteToLogFile(); |
| 821 } | 821 } |
| 822 | 822 |
| 823 | 823 |
| 824 void Logger::IntEvent(const char* name, int value) { | 824 void Logger::IntEvent(const char* name, int value) { |
| 825 if (FLAG_log) UncheckedIntEvent(name, value); | 825 if (FLAG_log) UncheckedIntEvent(name, value); |
| 826 } | 826 } |
| 827 | 827 |
| 828 | 828 |
| 829 void Logger::IntPtrTEvent(const char* name, intptr_t value) { | 829 void Logger::IntPtrTEvent(const char* name, intptr_t value) { |
| 830 if (FLAG_log) UncheckedIntPtrTEvent(name, value); | 830 if (FLAG_log) UncheckedIntPtrTEvent(name, value); |
| 831 } | 831 } |
| 832 | 832 |
| 833 | 833 |
| 834 void Logger::UncheckedIntEvent(const char* name, int value) { | 834 void Logger::UncheckedIntEvent(const char* name, int value) { |
| 835 if (!log_->IsEnabled()) return; | 835 if (!log_->IsEnabled()) return; |
| 836 Log::MessageBuilder msg(log_); | 836 Log::MessageBuilder msg(log_); |
| 837 msg.Append("%s,%d\n", name, value); | 837 msg.Append("%s,%d", name, value); |
| 838 msg.WriteToLogFile(); | 838 msg.WriteToLogFile(); |
| 839 } | 839 } |
| 840 | 840 |
| 841 | 841 |
| 842 void Logger::UncheckedIntPtrTEvent(const char* name, intptr_t value) { | 842 void Logger::UncheckedIntPtrTEvent(const char* name, intptr_t value) { |
| 843 if (!log_->IsEnabled()) return; | 843 if (!log_->IsEnabled()) return; |
| 844 Log::MessageBuilder msg(log_); | 844 Log::MessageBuilder msg(log_); |
| 845 msg.Append("%s,%" V8_PTR_PREFIX "d\n", name, value); | 845 msg.Append("%s,%" V8_PTR_PREFIX "d", name, value); |
| 846 msg.WriteToLogFile(); | 846 msg.WriteToLogFile(); |
| 847 } | 847 } |
| 848 | 848 |
| 849 | 849 |
| 850 void Logger::HandleEvent(const char* name, Object** location) { | 850 void Logger::HandleEvent(const char* name, Object** location) { |
| 851 if (!log_->IsEnabled() || !FLAG_log_handles) return; | 851 if (!log_->IsEnabled() || !FLAG_log_handles) return; |
| 852 Log::MessageBuilder msg(log_); | 852 Log::MessageBuilder msg(log_); |
| 853 msg.Append("%s,0x%" V8PRIxPTR "\n", name, location); | 853 msg.Append("%s,0x%" V8PRIxPTR, name, location); |
| 854 msg.WriteToLogFile(); | 854 msg.WriteToLogFile(); |
| 855 } | 855 } |
| 856 | 856 |
| 857 | 857 |
| 858 // ApiEvent is private so all the calls come from the Logger class. It is the | 858 // ApiEvent is private so all the calls come from the Logger class. It is the |
| 859 // caller's responsibility to ensure that log is enabled and that | 859 // caller's responsibility to ensure that log is enabled and that |
| 860 // FLAG_log_api is true. | 860 // FLAG_log_api is true. |
| 861 void Logger::ApiEvent(const char* format, ...) { | 861 void Logger::ApiEvent(const char* format, ...) { |
| 862 ASSERT(log_->IsEnabled() && FLAG_log_api); | 862 ASSERT(log_->IsEnabled() && FLAG_log_api); |
| 863 Log::MessageBuilder msg(log_); | 863 Log::MessageBuilder msg(log_); |
| 864 va_list ap; | 864 va_list ap; |
| 865 va_start(ap, format); | 865 va_start(ap, format); |
| 866 msg.AppendVA(format, ap); | 866 msg.AppendVA(format, ap); |
| 867 va_end(ap); | 867 va_end(ap); |
| 868 msg.WriteToLogFile(); | 868 msg.WriteToLogFile(); |
| 869 } | 869 } |
| 870 | 870 |
| 871 | 871 |
| 872 void Logger::ApiNamedSecurityCheck(Object* key) { | 872 void Logger::ApiNamedSecurityCheck(Object* key) { |
| 873 if (!log_->IsEnabled() || !FLAG_log_api) return; | 873 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 874 if (key->IsString()) { | 874 if (key->IsString()) { |
| 875 SmartArrayPointer<char> str = | 875 SmartArrayPointer<char> str = |
| 876 String::cast(key)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 876 String::cast(key)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 877 ApiEvent("api,check-security,\"%s\"\n", str.get()); | 877 ApiEvent("api,check-security,\"%s\"", str.get()); |
| 878 } else if (key->IsSymbol()) { | 878 } else if (key->IsSymbol()) { |
| 879 Symbol* symbol = Symbol::cast(key); | 879 Symbol* symbol = Symbol::cast(key); |
| 880 if (symbol->name()->IsUndefined()) { | 880 if (symbol->name()->IsUndefined()) { |
| 881 ApiEvent("api,check-security,symbol(hash %x)\n", | 881 ApiEvent("api,check-security,symbol(hash %x)", Symbol::cast(key)->Hash()); |
| 882 Symbol::cast(key)->Hash()); | |
| 883 } else { | 882 } else { |
| 884 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( | 883 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( |
| 885 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 884 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 886 ApiEvent("api,check-security,symbol(\"%s\" hash %x)\n", | 885 ApiEvent("api,check-security,symbol(\"%s\" hash %x)", str.get(), |
| 887 str.get(), | |
| 888 Symbol::cast(key)->Hash()); | 886 Symbol::cast(key)->Hash()); |
| 889 } | 887 } |
| 890 } else if (key->IsUndefined()) { | 888 } else if (key->IsUndefined()) { |
| 891 ApiEvent("api,check-security,undefined\n"); | 889 ApiEvent("api,check-security,undefined"); |
| 892 } else { | 890 } else { |
| 893 ApiEvent("api,check-security,['no-name']\n"); | 891 ApiEvent("api,check-security,['no-name']"); |
| 894 } | 892 } |
| 895 } | 893 } |
| 896 | 894 |
| 897 | 895 |
| 898 void Logger::SharedLibraryEvent(const std::string& library_path, | 896 void Logger::SharedLibraryEvent(const std::string& library_path, |
| 899 uintptr_t start, | 897 uintptr_t start, |
| 900 uintptr_t end) { | 898 uintptr_t end) { |
| 901 if (!log_->IsEnabled() || !FLAG_prof) return; | 899 if (!log_->IsEnabled() || !FLAG_prof) return; |
| 902 Log::MessageBuilder msg(log_); | 900 Log::MessageBuilder msg(log_); |
| 903 msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n", | 901 msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR, |
| 904 library_path.c_str(), | 902 library_path.c_str(), start, end); |
| 905 start, | |
| 906 end); | |
| 907 msg.WriteToLogFile(); | 903 msg.WriteToLogFile(); |
| 908 } | 904 } |
| 909 | 905 |
| 910 | 906 |
| 911 void Logger::CodeDeoptEvent(Code* code) { | 907 void Logger::CodeDeoptEvent(Code* code) { |
| 912 if (!log_->IsEnabled()) return; | 908 if (!log_->IsEnabled()) return; |
| 913 ASSERT(FLAG_log_internal_timer_events); | 909 ASSERT(FLAG_log_internal_timer_events); |
| 914 Log::MessageBuilder msg(log_); | 910 Log::MessageBuilder msg(log_); |
| 915 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); | 911 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); |
| 916 msg.Append("code-deopt,%ld,%d\n", since_epoch, code->CodeSize()); | 912 msg.Append("code-deopt,%ld,%d", since_epoch, code->CodeSize()); |
| 917 msg.WriteToLogFile(); | 913 msg.WriteToLogFile(); |
| 918 } | 914 } |
| 919 | 915 |
| 920 | 916 |
| 921 void Logger::CurrentTimeEvent() { | 917 void Logger::CurrentTimeEvent() { |
| 922 if (!log_->IsEnabled()) return; | 918 if (!log_->IsEnabled()) return; |
| 923 ASSERT(FLAG_log_internal_timer_events); | 919 ASSERT(FLAG_log_internal_timer_events); |
| 924 Log::MessageBuilder msg(log_); | 920 Log::MessageBuilder msg(log_); |
| 925 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); | 921 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); |
| 926 msg.Append("current-time,%ld\n", since_epoch); | 922 msg.Append("current-time,%ld", since_epoch); |
| 927 msg.WriteToLogFile(); | 923 msg.WriteToLogFile(); |
| 928 } | 924 } |
| 929 | 925 |
| 930 | 926 |
| 931 void Logger::TimerEvent(StartEnd se, const char* name) { | 927 void Logger::TimerEvent(StartEnd se, const char* name) { |
| 932 if (!log_->IsEnabled()) return; | 928 if (!log_->IsEnabled()) return; |
| 933 ASSERT(FLAG_log_internal_timer_events); | 929 ASSERT(FLAG_log_internal_timer_events); |
| 934 Log::MessageBuilder msg(log_); | 930 Log::MessageBuilder msg(log_); |
| 935 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); | 931 int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds()); |
| 936 const char* format = (se == START) ? "timer-event-start,\"%s\",%ld\n" | 932 const char* format = (se == START) ? "timer-event-start,\"%s\",%ld" |
| 937 : "timer-event-end,\"%s\",%ld\n"; | 933 : "timer-event-end,\"%s\",%ld"; |
| 938 msg.Append(format, name, since_epoch); | 934 msg.Append(format, name, since_epoch); |
| 939 msg.WriteToLogFile(); | 935 msg.WriteToLogFile(); |
| 940 } | 936 } |
| 941 | 937 |
| 942 | 938 |
| 943 void Logger::EnterExternal(Isolate* isolate) { | 939 void Logger::EnterExternal(Isolate* isolate) { |
| 944 LOG(isolate, TimerEvent(START, TimerEventScope::v8_external)); | 940 LOG(isolate, TimerEvent(START, TimerEventScope::v8_external)); |
| 945 ASSERT(isolate->current_vm_state() == JS); | 941 ASSERT(isolate->current_vm_state() == JS); |
| 946 isolate->set_current_vm_state(EXTERNAL); | 942 isolate->set_current_vm_state(EXTERNAL); |
| 947 } | 943 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 | 1016 |
| 1021 msg.WriteToLogFile(); | 1017 msg.WriteToLogFile(); |
| 1022 } | 1018 } |
| 1023 | 1019 |
| 1024 | 1020 |
| 1025 void Logger::RegExpCompileEvent(Handle<JSRegExp> regexp, bool in_cache) { | 1021 void Logger::RegExpCompileEvent(Handle<JSRegExp> regexp, bool in_cache) { |
| 1026 if (!log_->IsEnabled() || !FLAG_log_regexp) return; | 1022 if (!log_->IsEnabled() || !FLAG_log_regexp) return; |
| 1027 Log::MessageBuilder msg(log_); | 1023 Log::MessageBuilder msg(log_); |
| 1028 msg.Append("regexp-compile,"); | 1024 msg.Append("regexp-compile,"); |
| 1029 LogRegExpSource(regexp); | 1025 LogRegExpSource(regexp); |
| 1030 msg.Append(in_cache ? ",hit\n" : ",miss\n"); | 1026 msg.Append(in_cache ? ",hit" : ",miss"); |
| 1031 msg.WriteToLogFile(); | 1027 msg.WriteToLogFile(); |
| 1032 } | 1028 } |
| 1033 | 1029 |
| 1034 | 1030 |
| 1035 void Logger::ApiIndexedSecurityCheck(uint32_t index) { | 1031 void Logger::ApiIndexedSecurityCheck(uint32_t index) { |
| 1036 if (!log_->IsEnabled() || !FLAG_log_api) return; | 1032 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 1037 ApiEvent("api,check-security,%u\n", index); | 1033 ApiEvent("api,check-security,%u", index); |
| 1038 } | 1034 } |
| 1039 | 1035 |
| 1040 | 1036 |
| 1041 void Logger::ApiNamedPropertyAccess(const char* tag, | 1037 void Logger::ApiNamedPropertyAccess(const char* tag, |
| 1042 JSObject* holder, | 1038 JSObject* holder, |
| 1043 Object* name) { | 1039 Object* name) { |
| 1044 ASSERT(name->IsName()); | 1040 ASSERT(name->IsName()); |
| 1045 if (!log_->IsEnabled() || !FLAG_log_api) return; | 1041 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 1046 String* class_name_obj = holder->class_name(); | 1042 String* class_name_obj = holder->class_name(); |
| 1047 SmartArrayPointer<char> class_name = | 1043 SmartArrayPointer<char> class_name = |
| 1048 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1044 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1049 if (name->IsString()) { | 1045 if (name->IsString()) { |
| 1050 SmartArrayPointer<char> property_name = | 1046 SmartArrayPointer<char> property_name = |
| 1051 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1047 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1052 ApiEvent("api,%s,\"%s\",\"%s\"\n", tag, class_name.get(), | 1048 ApiEvent("api,%s,\"%s\",\"%s\"", tag, class_name.get(), |
| 1053 property_name.get()); | 1049 property_name.get()); |
| 1054 } else { | 1050 } else { |
| 1055 Symbol* symbol = Symbol::cast(name); | 1051 Symbol* symbol = Symbol::cast(name); |
| 1056 uint32_t hash = symbol->Hash(); | 1052 uint32_t hash = symbol->Hash(); |
| 1057 if (symbol->name()->IsUndefined()) { | 1053 if (symbol->name()->IsUndefined()) { |
| 1058 ApiEvent("api,%s,\"%s\",symbol(hash %x)\n", tag, class_name.get(), hash); | 1054 ApiEvent("api,%s,\"%s\",symbol(hash %x)", tag, class_name.get(), hash); |
| 1059 } else { | 1055 } else { |
| 1060 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( | 1056 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( |
| 1061 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1057 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1062 ApiEvent("api,%s,\"%s\",symbol(\"%s\" hash %x)\n", | 1058 ApiEvent("api,%s,\"%s\",symbol(\"%s\" hash %x)", tag, class_name.get(), |
| 1063 tag, class_name.get(), str.get(), hash); | 1059 str.get(), hash); |
| 1064 } | 1060 } |
| 1065 } | 1061 } |
| 1066 } | 1062 } |
| 1067 | 1063 |
| 1068 void Logger::ApiIndexedPropertyAccess(const char* tag, | 1064 void Logger::ApiIndexedPropertyAccess(const char* tag, |
| 1069 JSObject* holder, | 1065 JSObject* holder, |
| 1070 uint32_t index) { | 1066 uint32_t index) { |
| 1071 if (!log_->IsEnabled() || !FLAG_log_api) return; | 1067 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 1072 String* class_name_obj = holder->class_name(); | 1068 String* class_name_obj = holder->class_name(); |
| 1073 SmartArrayPointer<char> class_name = | 1069 SmartArrayPointer<char> class_name = |
| 1074 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1070 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1075 ApiEvent("api,%s,\"%s\",%u\n", tag, class_name.get(), index); | 1071 ApiEvent("api,%s,\"%s\",%u", tag, class_name.get(), index); |
| 1076 } | 1072 } |
| 1077 | 1073 |
| 1078 | 1074 |
| 1079 void Logger::ApiObjectAccess(const char* tag, JSObject* object) { | 1075 void Logger::ApiObjectAccess(const char* tag, JSObject* object) { |
| 1080 if (!log_->IsEnabled() || !FLAG_log_api) return; | 1076 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 1081 String* class_name_obj = object->class_name(); | 1077 String* class_name_obj = object->class_name(); |
| 1082 SmartArrayPointer<char> class_name = | 1078 SmartArrayPointer<char> class_name = |
| 1083 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1079 class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1084 ApiEvent("api,%s,\"%s\"\n", tag, class_name.get()); | 1080 ApiEvent("api,%s,\"%s\"", tag, class_name.get()); |
| 1085 } | 1081 } |
| 1086 | 1082 |
| 1087 | 1083 |
| 1088 void Logger::ApiEntryCall(const char* name) { | 1084 void Logger::ApiEntryCall(const char* name) { |
| 1089 if (!log_->IsEnabled() || !FLAG_log_api) return; | 1085 if (!log_->IsEnabled() || !FLAG_log_api) return; |
| 1090 ApiEvent("api,%s\n", name); | 1086 ApiEvent("api,%s", name); |
| 1091 } | 1087 } |
| 1092 | 1088 |
| 1093 | 1089 |
| 1094 void Logger::NewEvent(const char* name, void* object, size_t size) { | 1090 void Logger::NewEvent(const char* name, void* object, size_t size) { |
| 1095 if (!log_->IsEnabled() || !FLAG_log) return; | 1091 if (!log_->IsEnabled() || !FLAG_log) return; |
| 1096 Log::MessageBuilder msg(log_); | 1092 Log::MessageBuilder msg(log_); |
| 1097 msg.Append("new,%s,0x%" V8PRIxPTR ",%u\n", name, object, | 1093 msg.Append("new,%s,0x%" V8PRIxPTR ",%u", name, object, |
| 1098 static_cast<unsigned int>(size)); | 1094 static_cast<unsigned int>(size)); |
| 1099 msg.WriteToLogFile(); | 1095 msg.WriteToLogFile(); |
| 1100 } | 1096 } |
| 1101 | 1097 |
| 1102 | 1098 |
| 1103 void Logger::DeleteEvent(const char* name, void* object) { | 1099 void Logger::DeleteEvent(const char* name, void* object) { |
| 1104 if (!log_->IsEnabled() || !FLAG_log) return; | 1100 if (!log_->IsEnabled() || !FLAG_log) return; |
| 1105 Log::MessageBuilder msg(log_); | 1101 Log::MessageBuilder msg(log_); |
| 1106 msg.Append("delete,%s,0x%" V8PRIxPTR "\n", name, object); | 1102 msg.Append("delete,%s,0x%" V8PRIxPTR, name, object); |
| 1107 msg.WriteToLogFile(); | 1103 msg.WriteToLogFile(); |
| 1108 } | 1104 } |
| 1109 | 1105 |
| 1110 | 1106 |
| 1111 void Logger::NewEventStatic(const char* name, void* object, size_t size) { | 1107 void Logger::NewEventStatic(const char* name, void* object, size_t size) { |
| 1112 Isolate::Current()->logger()->NewEvent(name, object, size); | 1108 Isolate::Current()->logger()->NewEvent(name, object, size); |
| 1113 } | 1109 } |
| 1114 | 1110 |
| 1115 | 1111 |
| 1116 void Logger::DeleteEventStatic(const char* name, void* object) { | 1112 void Logger::DeleteEventStatic(const char* name, void* object) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1134 Symbol* symbol = Symbol::cast(name); | 1130 Symbol* symbol = Symbol::cast(name); |
| 1135 if (symbol->name()->IsUndefined()) { | 1131 if (symbol->name()->IsUndefined()) { |
| 1136 msg.Append(",1,symbol(hash %x)", prefix, symbol->Hash()); | 1132 msg.Append(",1,symbol(hash %x)", prefix, symbol->Hash()); |
| 1137 } else { | 1133 } else { |
| 1138 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( | 1134 SmartArrayPointer<char> str = String::cast(symbol->name())->ToCString( |
| 1139 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1135 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1140 msg.Append(",1,symbol(\"%s\" hash %x)", prefix, str.get(), | 1136 msg.Append(",1,symbol(\"%s\" hash %x)", prefix, str.get(), |
| 1141 symbol->Hash()); | 1137 symbol->Hash()); |
| 1142 } | 1138 } |
| 1143 } | 1139 } |
| 1144 msg.Append('\n'); | |
| 1145 msg.WriteToLogFile(); | 1140 msg.WriteToLogFile(); |
| 1146 } | 1141 } |
| 1147 | 1142 |
| 1148 | 1143 |
| 1149 void Logger::CallbackEvent(Name* name, Address entry_point) { | 1144 void Logger::CallbackEvent(Name* name, Address entry_point) { |
| 1150 PROFILER_LOG(CallbackEvent(name, entry_point)); | 1145 PROFILER_LOG(CallbackEvent(name, entry_point)); |
| 1151 CallbackEventInternal("", name, entry_point); | 1146 CallbackEventInternal("", name, entry_point); |
| 1152 } | 1147 } |
| 1153 | 1148 |
| 1154 | 1149 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1182 const char* comment) { | 1177 const char* comment) { |
| 1183 PROFILER_LOG(CodeCreateEvent(tag, code, comment)); | 1178 PROFILER_LOG(CodeCreateEvent(tag, code, comment)); |
| 1184 | 1179 |
| 1185 if (!is_logging_code_events()) return; | 1180 if (!is_logging_code_events()) return; |
| 1186 CALL_LISTENERS(CodeCreateEvent(tag, code, comment)); | 1181 CALL_LISTENERS(CodeCreateEvent(tag, code, comment)); |
| 1187 | 1182 |
| 1188 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1183 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1189 Log::MessageBuilder msg(log_); | 1184 Log::MessageBuilder msg(log_); |
| 1190 AppendCodeCreateHeader(&msg, tag, code); | 1185 AppendCodeCreateHeader(&msg, tag, code); |
| 1191 msg.AppendDoubleQuotedString(comment); | 1186 msg.AppendDoubleQuotedString(comment); |
| 1192 msg.Append('\n'); | |
| 1193 msg.WriteToLogFile(); | 1187 msg.WriteToLogFile(); |
| 1194 } | 1188 } |
| 1195 | 1189 |
| 1196 | 1190 |
| 1197 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1191 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1198 Code* code, | 1192 Code* code, |
| 1199 Name* name) { | 1193 Name* name) { |
| 1200 PROFILER_LOG(CodeCreateEvent(tag, code, name)); | 1194 PROFILER_LOG(CodeCreateEvent(tag, code, name)); |
| 1201 | 1195 |
| 1202 if (!is_logging_code_events()) return; | 1196 if (!is_logging_code_events()) return; |
| 1203 CALL_LISTENERS(CodeCreateEvent(tag, code, name)); | 1197 CALL_LISTENERS(CodeCreateEvent(tag, code, name)); |
| 1204 | 1198 |
| 1205 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1199 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1206 Log::MessageBuilder msg(log_); | 1200 Log::MessageBuilder msg(log_); |
| 1207 AppendCodeCreateHeader(&msg, tag, code); | 1201 AppendCodeCreateHeader(&msg, tag, code); |
| 1208 if (name->IsString()) { | 1202 if (name->IsString()) { |
| 1209 msg.Append('"'); | 1203 msg.Append('"'); |
| 1210 msg.AppendDetailed(String::cast(name), false); | 1204 msg.AppendDetailed(String::cast(name), false); |
| 1211 msg.Append('"'); | 1205 msg.Append('"'); |
| 1212 } else { | 1206 } else { |
| 1213 msg.AppendSymbolName(Symbol::cast(name)); | 1207 msg.AppendSymbolName(Symbol::cast(name)); |
| 1214 } | 1208 } |
| 1215 msg.Append('\n'); | |
| 1216 msg.WriteToLogFile(); | 1209 msg.WriteToLogFile(); |
| 1217 } | 1210 } |
| 1218 | 1211 |
| 1219 | 1212 |
| 1220 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1213 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1221 Code* code, | 1214 Code* code, |
| 1222 SharedFunctionInfo* shared, | 1215 SharedFunctionInfo* shared, |
| 1223 CompilationInfo* info, | 1216 CompilationInfo* info, |
| 1224 Name* name) { | 1217 Name* name) { |
| 1225 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, name)); | 1218 PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, name)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1236 if (name->IsString()) { | 1229 if (name->IsString()) { |
| 1237 SmartArrayPointer<char> str = | 1230 SmartArrayPointer<char> str = |
| 1238 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1231 String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1239 msg.Append("\"%s\"", str.get()); | 1232 msg.Append("\"%s\"", str.get()); |
| 1240 } else { | 1233 } else { |
| 1241 msg.AppendSymbolName(Symbol::cast(name)); | 1234 msg.AppendSymbolName(Symbol::cast(name)); |
| 1242 } | 1235 } |
| 1243 msg.Append(','); | 1236 msg.Append(','); |
| 1244 msg.AppendAddress(shared->address()); | 1237 msg.AppendAddress(shared->address()); |
| 1245 msg.Append(",%s", ComputeMarker(code)); | 1238 msg.Append(",%s", ComputeMarker(code)); |
| 1246 msg.Append('\n'); | |
| 1247 msg.WriteToLogFile(); | 1239 msg.WriteToLogFile(); |
| 1248 } | 1240 } |
| 1249 | 1241 |
| 1250 | 1242 |
| 1251 // Although, it is possible to extract source and line from | 1243 // Although, it is possible to extract source and line from |
| 1252 // the SharedFunctionInfo object, we left it to caller | 1244 // the SharedFunctionInfo object, we left it to caller |
| 1253 // to leave logging functions free from heap allocations. | 1245 // to leave logging functions free from heap allocations. |
| 1254 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1246 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1255 Code* code, | 1247 Code* code, |
| 1256 SharedFunctionInfo* shared, | 1248 SharedFunctionInfo* shared, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1271 if (source->IsString()) { | 1263 if (source->IsString()) { |
| 1272 SmartArrayPointer<char> sourcestr = | 1264 SmartArrayPointer<char> sourcestr = |
| 1273 String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1265 String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1274 msg.Append("%s", sourcestr.get()); | 1266 msg.Append("%s", sourcestr.get()); |
| 1275 } else { | 1267 } else { |
| 1276 msg.AppendSymbolName(Symbol::cast(source)); | 1268 msg.AppendSymbolName(Symbol::cast(source)); |
| 1277 } | 1269 } |
| 1278 msg.Append(":%d:%d\",", line, column); | 1270 msg.Append(":%d:%d\",", line, column); |
| 1279 msg.AppendAddress(shared->address()); | 1271 msg.AppendAddress(shared->address()); |
| 1280 msg.Append(",%s", ComputeMarker(code)); | 1272 msg.Append(",%s", ComputeMarker(code)); |
| 1281 msg.Append('\n'); | |
| 1282 msg.WriteToLogFile(); | 1273 msg.WriteToLogFile(); |
| 1283 } | 1274 } |
| 1284 | 1275 |
| 1285 | 1276 |
| 1286 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 1277 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
| 1287 Code* code, | 1278 Code* code, |
| 1288 int args_count) { | 1279 int args_count) { |
| 1289 PROFILER_LOG(CodeCreateEvent(tag, code, args_count)); | 1280 PROFILER_LOG(CodeCreateEvent(tag, code, args_count)); |
| 1290 | 1281 |
| 1291 if (!is_logging_code_events()) return; | 1282 if (!is_logging_code_events()) return; |
| 1292 CALL_LISTENERS(CodeCreateEvent(tag, code, args_count)); | 1283 CALL_LISTENERS(CodeCreateEvent(tag, code, args_count)); |
| 1293 | 1284 |
| 1294 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1285 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1295 Log::MessageBuilder msg(log_); | 1286 Log::MessageBuilder msg(log_); |
| 1296 AppendCodeCreateHeader(&msg, tag, code); | 1287 AppendCodeCreateHeader(&msg, tag, code); |
| 1297 msg.Append("\"args_count: %d\"", args_count); | 1288 msg.Append("\"args_count: %d\"", args_count); |
| 1298 msg.Append('\n'); | |
| 1299 msg.WriteToLogFile(); | 1289 msg.WriteToLogFile(); |
| 1300 } | 1290 } |
| 1301 | 1291 |
| 1302 | 1292 |
| 1303 void Logger::CodeDisableOptEvent(Code* code, | 1293 void Logger::CodeDisableOptEvent(Code* code, |
| 1304 SharedFunctionInfo* shared) { | 1294 SharedFunctionInfo* shared) { |
| 1305 PROFILER_LOG(CodeDisableOptEvent(code, shared)); | 1295 PROFILER_LOG(CodeDisableOptEvent(code, shared)); |
| 1306 | 1296 |
| 1307 if (!is_logging_code_events()) return; | 1297 if (!is_logging_code_events()) return; |
| 1308 CALL_LISTENERS(CodeDisableOptEvent(code, shared)); | 1298 CALL_LISTENERS(CodeDisableOptEvent(code, shared)); |
| 1309 | 1299 |
| 1310 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1300 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1311 Log::MessageBuilder msg(log_); | 1301 Log::MessageBuilder msg(log_); |
| 1312 msg.Append("%s,", kLogEventsNames[CODE_DISABLE_OPT_EVENT]); | 1302 msg.Append("%s,", kLogEventsNames[CODE_DISABLE_OPT_EVENT]); |
| 1313 SmartArrayPointer<char> name = | 1303 SmartArrayPointer<char> name = |
| 1314 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1304 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1315 msg.Append("\"%s\",", name.get()); | 1305 msg.Append("\"%s\",", name.get()); |
| 1316 msg.Append("\"%s\"\n", GetBailoutReason(shared->DisableOptimizationReason())); | 1306 msg.Append("\"%s\"", GetBailoutReason(shared->DisableOptimizationReason())); |
| 1317 msg.WriteToLogFile(); | 1307 msg.WriteToLogFile(); |
| 1318 } | 1308 } |
| 1319 | 1309 |
| 1320 | 1310 |
| 1321 void Logger::CodeMovingGCEvent() { | 1311 void Logger::CodeMovingGCEvent() { |
| 1322 PROFILER_LOG(CodeMovingGCEvent()); | 1312 PROFILER_LOG(CodeMovingGCEvent()); |
| 1323 | 1313 |
| 1324 if (!is_logging_code_events()) return; | 1314 if (!is_logging_code_events()) return; |
| 1325 if (!log_->IsEnabled() || !FLAG_ll_prof) return; | 1315 if (!log_->IsEnabled() || !FLAG_ll_prof) return; |
| 1326 CALL_LISTENERS(CodeMovingGCEvent()); | 1316 CALL_LISTENERS(CodeMovingGCEvent()); |
| 1327 base::OS::SignalCodeMovingGC(); | 1317 base::OS::SignalCodeMovingGC(); |
| 1328 } | 1318 } |
| 1329 | 1319 |
| 1330 | 1320 |
| 1331 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { | 1321 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { |
| 1332 PROFILER_LOG(RegExpCodeCreateEvent(code, source)); | 1322 PROFILER_LOG(RegExpCodeCreateEvent(code, source)); |
| 1333 | 1323 |
| 1334 if (!is_logging_code_events()) return; | 1324 if (!is_logging_code_events()) return; |
| 1335 CALL_LISTENERS(RegExpCodeCreateEvent(code, source)); | 1325 CALL_LISTENERS(RegExpCodeCreateEvent(code, source)); |
| 1336 | 1326 |
| 1337 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1327 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1338 Log::MessageBuilder msg(log_); | 1328 Log::MessageBuilder msg(log_); |
| 1339 AppendCodeCreateHeader(&msg, REG_EXP_TAG, code); | 1329 AppendCodeCreateHeader(&msg, REG_EXP_TAG, code); |
| 1340 msg.Append('"'); | 1330 msg.Append('"'); |
| 1341 msg.AppendDetailed(source, false); | 1331 msg.AppendDetailed(source, false); |
| 1342 msg.Append('"'); | 1332 msg.Append('"'); |
| 1343 msg.Append('\n'); | |
| 1344 msg.WriteToLogFile(); | 1333 msg.WriteToLogFile(); |
| 1345 } | 1334 } |
| 1346 | 1335 |
| 1347 | 1336 |
| 1348 void Logger::CodeMoveEvent(Address from, Address to) { | 1337 void Logger::CodeMoveEvent(Address from, Address to) { |
| 1349 PROFILER_LOG(CodeMoveEvent(from, to)); | 1338 PROFILER_LOG(CodeMoveEvent(from, to)); |
| 1350 | 1339 |
| 1351 if (!is_logging_code_events()) return; | 1340 if (!is_logging_code_events()) return; |
| 1352 CALL_LISTENERS(CodeMoveEvent(from, to)); | 1341 CALL_LISTENERS(CodeMoveEvent(from, to)); |
| 1353 MoveEventInternal(CODE_MOVE_EVENT, from, to); | 1342 MoveEventInternal(CODE_MOVE_EVENT, from, to); |
| 1354 } | 1343 } |
| 1355 | 1344 |
| 1356 | 1345 |
| 1357 void Logger::CodeDeleteEvent(Address from) { | 1346 void Logger::CodeDeleteEvent(Address from) { |
| 1358 PROFILER_LOG(CodeDeleteEvent(from)); | 1347 PROFILER_LOG(CodeDeleteEvent(from)); |
| 1359 | 1348 |
| 1360 if (!is_logging_code_events()) return; | 1349 if (!is_logging_code_events()) return; |
| 1361 CALL_LISTENERS(CodeDeleteEvent(from)); | 1350 CALL_LISTENERS(CodeDeleteEvent(from)); |
| 1362 | 1351 |
| 1363 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1352 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1364 Log::MessageBuilder msg(log_); | 1353 Log::MessageBuilder msg(log_); |
| 1365 msg.Append("%s,", kLogEventsNames[CODE_DELETE_EVENT]); | 1354 msg.Append("%s,", kLogEventsNames[CODE_DELETE_EVENT]); |
| 1366 msg.AppendAddress(from); | 1355 msg.AppendAddress(from); |
| 1367 msg.Append('\n'); | |
| 1368 msg.WriteToLogFile(); | 1356 msg.WriteToLogFile(); |
| 1369 } | 1357 } |
| 1370 | 1358 |
| 1371 | 1359 |
| 1372 void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data, | 1360 void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data, |
| 1373 int pc_offset, | 1361 int pc_offset, |
| 1374 int position) { | 1362 int position) { |
| 1375 JIT_LOG(AddCodeLinePosInfoEvent(jit_handler_data, | 1363 JIT_LOG(AddCodeLinePosInfoEvent(jit_handler_data, |
| 1376 pc_offset, | 1364 pc_offset, |
| 1377 position, | 1365 position, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1400 void* jit_handler_data) { | 1388 void* jit_handler_data) { |
| 1401 JIT_LOG(EndCodePosInfoEvent(code, jit_handler_data)); | 1389 JIT_LOG(EndCodePosInfoEvent(code, jit_handler_data)); |
| 1402 } | 1390 } |
| 1403 | 1391 |
| 1404 | 1392 |
| 1405 void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) { | 1393 void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) { |
| 1406 if (code_name == NULL) return; // Not a code object. | 1394 if (code_name == NULL) return; // Not a code object. |
| 1407 Log::MessageBuilder msg(log_); | 1395 Log::MessageBuilder msg(log_); |
| 1408 msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); | 1396 msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); |
| 1409 msg.AppendDoubleQuotedString(code_name); | 1397 msg.AppendDoubleQuotedString(code_name); |
| 1410 msg.Append("\n"); | |
| 1411 msg.WriteToLogFile(); | 1398 msg.WriteToLogFile(); |
| 1412 } | 1399 } |
| 1413 | 1400 |
| 1414 | 1401 |
| 1415 void Logger::SnapshotPositionEvent(Address addr, int pos) { | 1402 void Logger::SnapshotPositionEvent(Address addr, int pos) { |
| 1416 if (!log_->IsEnabled()) return; | 1403 if (!log_->IsEnabled()) return; |
| 1417 LL_LOG(SnapshotPositionEvent(addr, pos)); | 1404 LL_LOG(SnapshotPositionEvent(addr, pos)); |
| 1418 if (!FLAG_log_snapshot_positions) return; | 1405 if (!FLAG_log_snapshot_positions) return; |
| 1419 Log::MessageBuilder msg(log_); | 1406 Log::MessageBuilder msg(log_); |
| 1420 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]); | 1407 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]); |
| 1421 msg.AppendAddress(addr); | 1408 msg.AppendAddress(addr); |
| 1422 msg.Append(",%d", pos); | 1409 msg.Append(",%d", pos); |
| 1423 msg.Append('\n'); | |
| 1424 msg.WriteToLogFile(); | 1410 msg.WriteToLogFile(); |
| 1425 } | 1411 } |
| 1426 | 1412 |
| 1427 | 1413 |
| 1428 void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) { | 1414 void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) { |
| 1429 PROFILER_LOG(SharedFunctionInfoMoveEvent(from, to)); | 1415 PROFILER_LOG(SharedFunctionInfoMoveEvent(from, to)); |
| 1430 | 1416 |
| 1431 if (!is_logging_code_events()) return; | 1417 if (!is_logging_code_events()) return; |
| 1432 MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to); | 1418 MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to); |
| 1433 } | 1419 } |
| 1434 | 1420 |
| 1435 | 1421 |
| 1436 void Logger::MoveEventInternal(LogEventsAndTags event, | 1422 void Logger::MoveEventInternal(LogEventsAndTags event, |
| 1437 Address from, | 1423 Address from, |
| 1438 Address to) { | 1424 Address to) { |
| 1439 if (!FLAG_log_code || !log_->IsEnabled()) return; | 1425 if (!FLAG_log_code || !log_->IsEnabled()) return; |
| 1440 Log::MessageBuilder msg(log_); | 1426 Log::MessageBuilder msg(log_); |
| 1441 msg.Append("%s,", kLogEventsNames[event]); | 1427 msg.Append("%s,", kLogEventsNames[event]); |
| 1442 msg.AppendAddress(from); | 1428 msg.AppendAddress(from); |
| 1443 msg.Append(','); | 1429 msg.Append(','); |
| 1444 msg.AppendAddress(to); | 1430 msg.AppendAddress(to); |
| 1445 msg.Append('\n'); | |
| 1446 msg.WriteToLogFile(); | 1431 msg.WriteToLogFile(); |
| 1447 } | 1432 } |
| 1448 | 1433 |
| 1449 | 1434 |
| 1450 void Logger::ResourceEvent(const char* name, const char* tag) { | 1435 void Logger::ResourceEvent(const char* name, const char* tag) { |
| 1451 if (!log_->IsEnabled() || !FLAG_log) return; | 1436 if (!log_->IsEnabled() || !FLAG_log) return; |
| 1452 Log::MessageBuilder msg(log_); | 1437 Log::MessageBuilder msg(log_); |
| 1453 msg.Append("%s,%s,", name, tag); | 1438 msg.Append("%s,%s,", name, tag); |
| 1454 | 1439 |
| 1455 uint32_t sec, usec; | 1440 uint32_t sec, usec; |
| 1456 if (base::OS::GetUserTime(&sec, &usec) != -1) { | 1441 if (base::OS::GetUserTime(&sec, &usec) != -1) { |
| 1457 msg.Append("%d,%d,", sec, usec); | 1442 msg.Append("%d,%d,", sec, usec); |
| 1458 } | 1443 } |
| 1459 msg.Append("%.0f", base::OS::TimeCurrentMillis()); | 1444 msg.Append("%.0f", base::OS::TimeCurrentMillis()); |
| 1460 | |
| 1461 msg.Append('\n'); | |
| 1462 msg.WriteToLogFile(); | 1445 msg.WriteToLogFile(); |
| 1463 } | 1446 } |
| 1464 | 1447 |
| 1465 | 1448 |
| 1466 void Logger::SuspectReadEvent(Name* name, Object* obj) { | 1449 void Logger::SuspectReadEvent(Name* name, Object* obj) { |
| 1467 if (!log_->IsEnabled() || !FLAG_log_suspect) return; | 1450 if (!log_->IsEnabled() || !FLAG_log_suspect) return; |
| 1468 Log::MessageBuilder msg(log_); | 1451 Log::MessageBuilder msg(log_); |
| 1469 String* class_name = obj->IsJSObject() | 1452 String* class_name = obj->IsJSObject() |
| 1470 ? JSObject::cast(obj)->class_name() | 1453 ? JSObject::cast(obj)->class_name() |
| 1471 : isolate_->heap()->empty_string(); | 1454 : isolate_->heap()->empty_string(); |
| 1472 msg.Append("suspect-read,"); | 1455 msg.Append("suspect-read,"); |
| 1473 msg.Append(class_name); | 1456 msg.Append(class_name); |
| 1474 msg.Append(','); | 1457 msg.Append(','); |
| 1475 if (name->IsString()) { | 1458 if (name->IsString()) { |
| 1476 msg.Append('"'); | 1459 msg.Append('"'); |
| 1477 msg.Append(String::cast(name)); | 1460 msg.Append(String::cast(name)); |
| 1478 msg.Append('"'); | 1461 msg.Append('"'); |
| 1479 } else { | 1462 } else { |
| 1480 msg.AppendSymbolName(Symbol::cast(name)); | 1463 msg.AppendSymbolName(Symbol::cast(name)); |
| 1481 } | 1464 } |
| 1482 msg.Append('\n'); | |
| 1483 msg.WriteToLogFile(); | 1465 msg.WriteToLogFile(); |
| 1484 } | 1466 } |
| 1485 | 1467 |
| 1486 | 1468 |
| 1487 void Logger::HeapSampleBeginEvent(const char* space, const char* kind) { | 1469 void Logger::HeapSampleBeginEvent(const char* space, const char* kind) { |
| 1488 if (!log_->IsEnabled() || !FLAG_log_gc) return; | 1470 if (!log_->IsEnabled() || !FLAG_log_gc) return; |
| 1489 Log::MessageBuilder msg(log_); | 1471 Log::MessageBuilder msg(log_); |
| 1490 // Using non-relative system time in order to be able to synchronize with | 1472 // Using non-relative system time in order to be able to synchronize with |
| 1491 // external memory profiling events (e.g. DOM memory size). | 1473 // external memory profiling events (e.g. DOM memory size). |
| 1492 msg.Append("heap-sample-begin,\"%s\",\"%s\",%.0f\n", | 1474 msg.Append("heap-sample-begin,\"%s\",\"%s\",%.0f", space, kind, |
| 1493 space, kind, base::OS::TimeCurrentMillis()); | 1475 base::OS::TimeCurrentMillis()); |
| 1494 msg.WriteToLogFile(); | 1476 msg.WriteToLogFile(); |
| 1495 } | 1477 } |
| 1496 | 1478 |
| 1497 | 1479 |
| 1498 void Logger::HeapSampleEndEvent(const char* space, const char* kind) { | 1480 void Logger::HeapSampleEndEvent(const char* space, const char* kind) { |
| 1499 if (!log_->IsEnabled() || !FLAG_log_gc) return; | 1481 if (!log_->IsEnabled() || !FLAG_log_gc) return; |
| 1500 Log::MessageBuilder msg(log_); | 1482 Log::MessageBuilder msg(log_); |
| 1501 msg.Append("heap-sample-end,\"%s\",\"%s\"\n", space, kind); | 1483 msg.Append("heap-sample-end,\"%s\",\"%s\"", space, kind); |
| 1502 msg.WriteToLogFile(); | 1484 msg.WriteToLogFile(); |
| 1503 } | 1485 } |
| 1504 | 1486 |
| 1505 | 1487 |
| 1506 void Logger::HeapSampleItemEvent(const char* type, int number, int bytes) { | 1488 void Logger::HeapSampleItemEvent(const char* type, int number, int bytes) { |
| 1507 if (!log_->IsEnabled() || !FLAG_log_gc) return; | 1489 if (!log_->IsEnabled() || !FLAG_log_gc) return; |
| 1508 Log::MessageBuilder msg(log_); | 1490 Log::MessageBuilder msg(log_); |
| 1509 msg.Append("heap-sample-item,%s,%d,%d\n", type, number, bytes); | 1491 msg.Append("heap-sample-item,%s,%d,%d", type, number, bytes); |
| 1510 msg.WriteToLogFile(); | 1492 msg.WriteToLogFile(); |
| 1511 } | 1493 } |
| 1512 | 1494 |
| 1513 | 1495 |
| 1514 void Logger::DebugTag(const char* call_site_tag) { | 1496 void Logger::DebugTag(const char* call_site_tag) { |
| 1515 if (!log_->IsEnabled() || !FLAG_log) return; | 1497 if (!log_->IsEnabled() || !FLAG_log) return; |
| 1516 Log::MessageBuilder msg(log_); | 1498 Log::MessageBuilder msg(log_); |
| 1517 msg.Append("debug-tag,%s\n", call_site_tag); | 1499 msg.Append("debug-tag,%s", call_site_tag); |
| 1518 msg.WriteToLogFile(); | 1500 msg.WriteToLogFile(); |
| 1519 } | 1501 } |
| 1520 | 1502 |
| 1521 | 1503 |
| 1522 void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) { | 1504 void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) { |
| 1523 if (!log_->IsEnabled() || !FLAG_log) return; | 1505 if (!log_->IsEnabled() || !FLAG_log) return; |
| 1524 StringBuilder s(parameter.length() + 1); | 1506 StringBuilder s(parameter.length() + 1); |
| 1525 for (int i = 0; i < parameter.length(); ++i) { | 1507 for (int i = 0; i < parameter.length(); ++i) { |
| 1526 s.AddCharacter(static_cast<char>(parameter[i])); | 1508 s.AddCharacter(static_cast<char>(parameter[i])); |
| 1527 } | 1509 } |
| 1528 char* parameter_string = s.Finalize(); | 1510 char* parameter_string = s.Finalize(); |
| 1529 Log::MessageBuilder msg(log_); | 1511 Log::MessageBuilder msg(log_); |
| 1530 msg.Append("debug-queue-event,%s,%15.3f,%s\n", | 1512 msg.Append("debug-queue-event,%s,%15.3f,%s", event_type, |
| 1531 event_type, | 1513 base::OS::TimeCurrentMillis(), parameter_string); |
| 1532 base::OS::TimeCurrentMillis(), | |
| 1533 parameter_string); | |
| 1534 DeleteArray(parameter_string); | 1514 DeleteArray(parameter_string); |
| 1535 msg.WriteToLogFile(); | 1515 msg.WriteToLogFile(); |
| 1536 } | 1516 } |
| 1537 | 1517 |
| 1538 | 1518 |
| 1539 void Logger::TickEvent(TickSample* sample, bool overflow) { | 1519 void Logger::TickEvent(TickSample* sample, bool overflow) { |
| 1540 if (!log_->IsEnabled() || !FLAG_prof) return; | 1520 if (!log_->IsEnabled() || !FLAG_prof) return; |
| 1541 Log::MessageBuilder msg(log_); | 1521 Log::MessageBuilder msg(log_); |
| 1542 msg.Append("%s,", kLogEventsNames[TICK_EVENT]); | 1522 msg.Append("%s,", kLogEventsNames[TICK_EVENT]); |
| 1543 msg.AppendAddress(sample->pc); | 1523 msg.AppendAddress(sample->pc); |
| 1544 msg.Append(",%ld", static_cast<int>(timer_.Elapsed().InMicroseconds())); | 1524 msg.Append(",%ld", static_cast<int>(timer_.Elapsed().InMicroseconds())); |
| 1545 if (sample->has_external_callback) { | 1525 if (sample->has_external_callback) { |
| 1546 msg.Append(",1,"); | 1526 msg.Append(",1,"); |
| 1547 msg.AppendAddress(sample->external_callback); | 1527 msg.AppendAddress(sample->external_callback); |
| 1548 } else { | 1528 } else { |
| 1549 msg.Append(",0,"); | 1529 msg.Append(",0,"); |
| 1550 msg.AppendAddress(sample->tos); | 1530 msg.AppendAddress(sample->tos); |
| 1551 } | 1531 } |
| 1552 msg.Append(",%d", static_cast<int>(sample->state)); | 1532 msg.Append(",%d", static_cast<int>(sample->state)); |
| 1553 if (overflow) { | 1533 if (overflow) { |
| 1554 msg.Append(",overflow"); | 1534 msg.Append(",overflow"); |
| 1555 } | 1535 } |
| 1556 for (unsigned i = 0; i < sample->frames_count; ++i) { | 1536 for (unsigned i = 0; i < sample->frames_count; ++i) { |
| 1557 msg.Append(','); | 1537 msg.Append(','); |
| 1558 msg.AppendAddress(sample->stack[i]); | 1538 msg.AppendAddress(sample->stack[i]); |
| 1559 } | 1539 } |
| 1560 msg.Append('\n'); | |
| 1561 msg.WriteToLogFile(); | 1540 msg.WriteToLogFile(); |
| 1562 } | 1541 } |
| 1563 | 1542 |
| 1564 | 1543 |
| 1565 void Logger::StopProfiler() { | 1544 void Logger::StopProfiler() { |
| 1566 if (!log_->IsEnabled()) return; | 1545 if (!log_->IsEnabled()) return; |
| 1567 if (profiler_ != NULL) { | 1546 if (profiler_ != NULL) { |
| 1568 profiler_->pause(); | 1547 profiler_->pause(); |
| 1569 is_logging_ = false; | 1548 is_logging_ = false; |
| 1570 } | 1549 } |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1956 if (jit_logger_) { | 1935 if (jit_logger_) { |
| 1957 removeCodeEventListener(jit_logger_); | 1936 removeCodeEventListener(jit_logger_); |
| 1958 delete jit_logger_; | 1937 delete jit_logger_; |
| 1959 jit_logger_ = NULL; | 1938 jit_logger_ = NULL; |
| 1960 } | 1939 } |
| 1961 | 1940 |
| 1962 return log_->Close(); | 1941 return log_->Close(); |
| 1963 } | 1942 } |
| 1964 | 1943 |
| 1965 } } // namespace v8::internal | 1944 } } // namespace v8::internal |
| OLD | NEW |