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 |