OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 | 462 |
463 | 463 |
464 Logger::~Logger() { | 464 Logger::~Logger() { |
465 delete address_to_name_map_; | 465 delete address_to_name_map_; |
466 delete name_buffer_; | 466 delete name_buffer_; |
467 delete log_; | 467 delete log_; |
468 } | 468 } |
469 | 469 |
470 | 470 |
471 void Logger::IssueCodeAddedEvent(Code* code, | 471 void Logger::IssueCodeAddedEvent(Code* code, |
| 472 Script* script, |
472 const char* name, | 473 const char* name, |
473 size_t name_len) { | 474 size_t name_len) { |
474 JitCodeEvent event; | 475 JitCodeEvent event; |
| 476 memset(&event, 0, sizeof(event)); |
475 event.type = JitCodeEvent::CODE_ADDED; | 477 event.type = JitCodeEvent::CODE_ADDED; |
476 event.code_start = code->instruction_start(); | 478 event.code_start = code->instruction_start(); |
477 event.code_len = code->instruction_size(); | 479 event.code_len = code->instruction_size(); |
| 480 event.userdata = script; |
478 event.name.str = name; | 481 event.name.str = name; |
479 event.name.len = name_len; | 482 event.name.len = name_len; |
480 | 483 |
481 code_event_handler_(&event); | 484 code_event_handler_(&event); |
482 } | 485 } |
483 | 486 |
484 | 487 |
485 void Logger::IssueCodeMovedEvent(Address from, Address to) { | 488 void Logger::IssueCodeMovedEvent(Address from, Address to) { |
486 Code* from_code = Code::cast(HeapObject::FromAddress(from)); | 489 Code* from_code = Code::cast(HeapObject::FromAddress(from)); |
487 | 490 |
(...skipping 18 matching lines...) Expand all Loading... |
506 Code* from_code = Code::cast(HeapObject::FromAddress(from)); | 509 Code* from_code = Code::cast(HeapObject::FromAddress(from)); |
507 | 510 |
508 JitCodeEvent event; | 511 JitCodeEvent event; |
509 event.type = JitCodeEvent::CODE_REMOVED; | 512 event.type = JitCodeEvent::CODE_REMOVED; |
510 event.code_start = from_code->instruction_start(); | 513 event.code_start = from_code->instruction_start(); |
511 event.code_len = from_code->instruction_size(); | 514 event.code_len = from_code->instruction_size(); |
512 | 515 |
513 code_event_handler_(&event); | 516 code_event_handler_(&event); |
514 } | 517 } |
515 | 518 |
| 519 void Logger::IssueAddCodeLinePosInfoEvent(JITCodeLineInfo* lineinfo, |
| 520 int pc_offset, |
| 521 int position, |
| 522 bool is_statement) { |
| 523 JitCodeEvent event; |
| 524 event.type = JitCodeEvent::CODE_ADD_LINE_POS_INFO; |
| 525 |
| 526 event.userdata = lineinfo; |
| 527 event.line_info.offset = pc_offset; |
| 528 event.line_info.pos = position; |
| 529 event.line_info.is_statement = is_statement; |
| 530 |
| 531 code_event_handler_(&event); |
| 532 } |
| 533 |
| 534 void Logger::IssueStartCodePosInfoEvent(JITCodeLineInfo* lineinfo) { |
| 535 JitCodeEvent event; |
| 536 event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING; |
| 537 event.userdata = lineinfo; |
| 538 |
| 539 code_event_handler_(&event); |
| 540 } |
| 541 |
| 542 void Logger::IssueEndCodePosInfoEvent(Code* code, void* lineinfostruct) { |
| 543 JitCodeEvent event; |
| 544 event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING; |
| 545 |
| 546 if (code != NULL) |
| 547 event.code_start = code->instruction_start(); |
| 548 else |
| 549 event.code_start = 0; |
| 550 |
| 551 event.userdata = lineinfostruct; |
| 552 |
| 553 code_event_handler_(&event); |
| 554 } |
516 | 555 |
517 #define DECLARE_EVENT(ignore1, name) name, | 556 #define DECLARE_EVENT(ignore1, name) name, |
518 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { | 557 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
519 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) | 558 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) |
520 }; | 559 }; |
521 #undef DECLARE_EVENT | 560 #undef DECLARE_EVENT |
522 | 561 |
523 | 562 |
524 void Logger::ProfilerBeginEvent() { | 563 void Logger::ProfilerBeginEvent() { |
525 if (!log_->IsEnabled()) return; | 564 if (!log_->IsEnabled()) return; |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 Code* code, | 929 Code* code, |
891 const char* comment) { | 930 const char* comment) { |
892 if (!is_logging_code_events()) return; | 931 if (!is_logging_code_events()) return; |
893 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 932 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
894 name_buffer_->Reset(); | 933 name_buffer_->Reset(); |
895 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 934 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
896 name_buffer_->AppendByte(':'); | 935 name_buffer_->AppendByte(':'); |
897 name_buffer_->AppendBytes(comment); | 936 name_buffer_->AppendBytes(comment); |
898 } | 937 } |
899 if (code_event_handler_ != NULL) { | 938 if (code_event_handler_ != NULL) { |
900 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 939 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); |
901 } | 940 } |
902 if (!log_->IsEnabled()) return; | 941 if (!log_->IsEnabled()) return; |
903 if (FLAG_ll_prof) { | 942 if (FLAG_ll_prof) { |
904 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 943 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
905 } | 944 } |
906 if (Serializer::enabled()) { | 945 if (Serializer::enabled()) { |
907 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 946 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
908 } | 947 } |
909 if (!FLAG_log_code) return; | 948 if (!FLAG_log_code) return; |
910 LogMessageBuilder msg(this); | 949 LogMessageBuilder msg(this); |
(...skipping 19 matching lines...) Expand all Loading... |
930 Code* code, | 969 Code* code, |
931 String* name) { | 970 String* name) { |
932 if (!is_logging_code_events()) return; | 971 if (!is_logging_code_events()) return; |
933 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 972 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
934 name_buffer_->Reset(); | 973 name_buffer_->Reset(); |
935 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 974 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
936 name_buffer_->AppendByte(':'); | 975 name_buffer_->AppendByte(':'); |
937 name_buffer_->AppendString(name); | 976 name_buffer_->AppendString(name); |
938 } | 977 } |
939 if (code_event_handler_ != NULL) { | 978 if (code_event_handler_ != NULL) { |
940 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 979 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); |
941 } | 980 } |
942 if (!log_->IsEnabled()) return; | 981 if (!log_->IsEnabled()) return; |
943 if (FLAG_ll_prof) { | 982 if (FLAG_ll_prof) { |
944 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 983 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
945 } | 984 } |
946 if (Serializer::enabled()) { | 985 if (Serializer::enabled()) { |
947 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 986 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
948 } | 987 } |
949 if (!FLAG_log_code) return; | 988 if (!FLAG_log_code) return; |
950 LogMessageBuilder msg(this); | 989 LogMessageBuilder msg(this); |
(...skipping 26 matching lines...) Expand all Loading... |
977 String* name) { | 1016 String* name) { |
978 if (!is_logging_code_events()) return; | 1017 if (!is_logging_code_events()) return; |
979 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 1018 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
980 name_buffer_->Reset(); | 1019 name_buffer_->Reset(); |
981 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 1020 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
982 name_buffer_->AppendByte(':'); | 1021 name_buffer_->AppendByte(':'); |
983 name_buffer_->AppendBytes(ComputeMarker(code)); | 1022 name_buffer_->AppendBytes(ComputeMarker(code)); |
984 name_buffer_->AppendString(name); | 1023 name_buffer_->AppendString(name); |
985 } | 1024 } |
986 if (code_event_handler_ != NULL) { | 1025 if (code_event_handler_ != NULL) { |
987 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 1026 IssueCodeAddedEvent(code, shared->script()->IsScript() ? |
| 1027 Script::cast(shared->script()):NULL, |
| 1028 name_buffer_->get(), |
| 1029 name_buffer_->size()); |
988 } | 1030 } |
989 if (!log_->IsEnabled()) return; | 1031 if (!log_->IsEnabled()) return; |
990 if (FLAG_ll_prof) { | 1032 if (FLAG_ll_prof) { |
991 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 1033 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
992 } | 1034 } |
993 if (Serializer::enabled()) { | 1035 if (Serializer::enabled()) { |
994 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 1036 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
995 } | 1037 } |
996 if (!FLAG_log_code) return; | 1038 if (!FLAG_log_code) return; |
997 if (code == Isolate::Current()->builtins()->builtin( | 1039 if (code == Isolate::Current()->builtins()->builtin( |
(...skipping 29 matching lines...) Expand all Loading... |
1027 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 1069 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
1028 name_buffer_->AppendByte(':'); | 1070 name_buffer_->AppendByte(':'); |
1029 name_buffer_->AppendBytes(ComputeMarker(code)); | 1071 name_buffer_->AppendBytes(ComputeMarker(code)); |
1030 name_buffer_->AppendString(shared->DebugName()); | 1072 name_buffer_->AppendString(shared->DebugName()); |
1031 name_buffer_->AppendByte(' '); | 1073 name_buffer_->AppendByte(' '); |
1032 name_buffer_->AppendString(source); | 1074 name_buffer_->AppendString(source); |
1033 name_buffer_->AppendByte(':'); | 1075 name_buffer_->AppendByte(':'); |
1034 name_buffer_->AppendInt(line); | 1076 name_buffer_->AppendInt(line); |
1035 } | 1077 } |
1036 if (code_event_handler_ != NULL) { | 1078 if (code_event_handler_ != NULL) { |
1037 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 1079 IssueCodeAddedEvent(code, shared->script()->IsScript() ? |
| 1080 Script::cast(shared->script()):NULL, |
| 1081 name_buffer_->get(), |
| 1082 name_buffer_->size()); |
1038 } | 1083 } |
1039 if (!log_->IsEnabled()) return; | 1084 if (!log_->IsEnabled()) return; |
1040 if (FLAG_ll_prof) { | 1085 if (FLAG_ll_prof) { |
1041 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 1086 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
1042 } | 1087 } |
1043 if (Serializer::enabled()) { | 1088 if (Serializer::enabled()) { |
1044 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 1089 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
1045 } | 1090 } |
1046 if (!FLAG_log_code) return; | 1091 if (!FLAG_log_code) return; |
1047 LogMessageBuilder msg(this); | 1092 LogMessageBuilder msg(this); |
(...skipping 20 matching lines...) Expand all Loading... |
1068 | 1113 |
1069 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { | 1114 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { |
1070 if (!is_logging_code_events()) return; | 1115 if (!is_logging_code_events()) return; |
1071 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 1116 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
1072 name_buffer_->Reset(); | 1117 name_buffer_->Reset(); |
1073 name_buffer_->AppendBytes(kLogEventsNames[tag]); | 1118 name_buffer_->AppendBytes(kLogEventsNames[tag]); |
1074 name_buffer_->AppendByte(':'); | 1119 name_buffer_->AppendByte(':'); |
1075 name_buffer_->AppendInt(args_count); | 1120 name_buffer_->AppendInt(args_count); |
1076 } | 1121 } |
1077 if (code_event_handler_ != NULL) { | 1122 if (code_event_handler_ != NULL) { |
1078 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 1123 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); |
1079 } | 1124 } |
1080 if (!log_->IsEnabled()) return; | 1125 if (!log_->IsEnabled()) return; |
1081 if (FLAG_ll_prof) { | 1126 if (FLAG_ll_prof) { |
1082 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 1127 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
1083 } | 1128 } |
1084 if (Serializer::enabled()) { | 1129 if (Serializer::enabled()) { |
1085 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 1130 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
1086 } | 1131 } |
1087 if (!FLAG_log_code) return; | 1132 if (!FLAG_log_code) return; |
1088 LogMessageBuilder msg(this); | 1133 LogMessageBuilder msg(this); |
(...skipping 17 matching lines...) Expand all Loading... |
1106 | 1151 |
1107 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { | 1152 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { |
1108 if (!is_logging_code_events()) return; | 1153 if (!is_logging_code_events()) return; |
1109 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { | 1154 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { |
1110 name_buffer_->Reset(); | 1155 name_buffer_->Reset(); |
1111 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]); | 1156 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]); |
1112 name_buffer_->AppendByte(':'); | 1157 name_buffer_->AppendByte(':'); |
1113 name_buffer_->AppendString(source); | 1158 name_buffer_->AppendString(source); |
1114 } | 1159 } |
1115 if (code_event_handler_ != NULL) { | 1160 if (code_event_handler_ != NULL) { |
1116 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size()); | 1161 IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size()); |
1117 } | 1162 } |
1118 if (!log_->IsEnabled()) return; | 1163 if (!log_->IsEnabled()) return; |
1119 if (FLAG_ll_prof) { | 1164 if (FLAG_ll_prof) { |
1120 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); | 1165 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); |
1121 } | 1166 } |
1122 if (Serializer::enabled()) { | 1167 if (Serializer::enabled()) { |
1123 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); | 1168 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); |
1124 } | 1169 } |
1125 if (!FLAG_log_code) return; | 1170 if (!FLAG_log_code) return; |
1126 LogMessageBuilder msg(this); | 1171 LogMessageBuilder msg(this); |
(...skipping 23 matching lines...) Expand all Loading... |
1150 void Logger::CodeDeleteEvent(Address from) { | 1195 void Logger::CodeDeleteEvent(Address from) { |
1151 if (code_event_handler_ != NULL) IssueCodeRemovedEvent(from); | 1196 if (code_event_handler_ != NULL) IssueCodeRemovedEvent(from); |
1152 if (!log_->IsEnabled()) return; | 1197 if (!log_->IsEnabled()) return; |
1153 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from); | 1198 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from); |
1154 if (Serializer::enabled() && address_to_name_map_ != NULL) { | 1199 if (Serializer::enabled() && address_to_name_map_ != NULL) { |
1155 address_to_name_map_->Remove(from); | 1200 address_to_name_map_->Remove(from); |
1156 } | 1201 } |
1157 DeleteEventInternal(CODE_DELETE_EVENT, from); | 1202 DeleteEventInternal(CODE_DELETE_EVENT, from); |
1158 } | 1203 } |
1159 | 1204 |
| 1205 void Logger::CodeLinePosInfoAddEvent(JITCodeLineInfo* lineinfo, |
| 1206 int pc_offset, |
| 1207 int position, |
| 1208 bool is_statement) { |
| 1209 if (code_event_handler_ != NULL) |
| 1210 IssueAddCodeLinePosInfoEvent(lineinfo, pc_offset, position, is_statement); |
| 1211 } |
| 1212 |
| 1213 void Logger::CodeStartLinePosInfoRecordEvent(JITCodeLineInfo* lineinfo) { |
| 1214 if (code_event_handler_ != NULL) |
| 1215 IssueStartCodePosInfoEvent(lineinfo); |
| 1216 } |
| 1217 |
| 1218 void Logger::CodeEndLinePosInfoRecordEvent(Code* code, void* lineinfostruct) { |
| 1219 if (code_event_handler_ != NULL) |
| 1220 IssueEndCodePosInfoEvent(code, lineinfostruct); |
| 1221 } |
1160 | 1222 |
1161 void Logger::SnapshotPositionEvent(Address addr, int pos) { | 1223 void Logger::SnapshotPositionEvent(Address addr, int pos) { |
1162 if (!log_->IsEnabled()) return; | 1224 if (!log_->IsEnabled()) return; |
1163 if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos); | 1225 if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos); |
1164 if (Serializer::enabled() && address_to_name_map_ != NULL) { | 1226 if (Serializer::enabled() && address_to_name_map_ != NULL) { |
1165 const char* code_name = address_to_name_map_->Lookup(addr); | 1227 const char* code_name = address_to_name_map_->Lookup(addr); |
1166 if (code_name == NULL) return; // Not a code object. | 1228 if (code_name == NULL) return; // Not a code object. |
1167 LogMessageBuilder msg(this); | 1229 LogMessageBuilder msg(this); |
1168 msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); | 1230 msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); |
1169 for (const char* p = code_name; *p != '\0'; ++p) { | 1231 for (const char* p = code_name; *p != '\0'; ++p) { |
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1828 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { | 1890 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { |
1829 ASSERT(sampler->IsActive()); | 1891 ASSERT(sampler->IsActive()); |
1830 ScopedLock lock(active_samplers_mutex); | 1892 ScopedLock lock(active_samplers_mutex); |
1831 ASSERT(active_samplers_ != NULL); | 1893 ASSERT(active_samplers_ != NULL); |
1832 bool removed = active_samplers_->RemoveElement(sampler); | 1894 bool removed = active_samplers_->RemoveElement(sampler); |
1833 ASSERT(removed); | 1895 ASSERT(removed); |
1834 USE(removed); | 1896 USE(removed); |
1835 } | 1897 } |
1836 | 1898 |
1837 } } // namespace v8::internal | 1899 } } // namespace v8::internal |
OLD | NEW |