Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(544)

Side by Side Diff: src/log.cc

Issue 390803002: Ensure that each profiling entry ends with a new line. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/log-utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | src/log-utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698