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

Side by Side Diff: src/log.cc

Issue 10870108: Revert "Add a new API V8::SetJitCodeEventHandler to push code name and location to users such as pr… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 3 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 | « src/log.h ('k') | src/runtime.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 // 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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 : ticker_(NULL), 519 : ticker_(NULL),
520 profiler_(NULL), 520 profiler_(NULL),
521 sliding_state_window_(NULL), 521 sliding_state_window_(NULL),
522 log_events_(NULL), 522 log_events_(NULL),
523 logging_nesting_(0), 523 logging_nesting_(0),
524 cpu_profiler_nesting_(0), 524 cpu_profiler_nesting_(0),
525 log_(new Log(this)), 525 log_(new Log(this)),
526 name_buffer_(new NameBuffer), 526 name_buffer_(new NameBuffer),
527 address_to_name_map_(NULL), 527 address_to_name_map_(NULL),
528 is_initialized_(false), 528 is_initialized_(false),
529 code_event_handler_(NULL),
530 last_address_(NULL), 529 last_address_(NULL),
531 prev_sp_(NULL), 530 prev_sp_(NULL),
532 prev_function_(NULL), 531 prev_function_(NULL),
533 prev_to_(NULL), 532 prev_to_(NULL),
534 prev_code_(NULL) { 533 prev_code_(NULL) {
535 } 534 }
536 535
537 536
538 Logger::~Logger() { 537 Logger::~Logger() {
539 delete address_to_name_map_; 538 delete address_to_name_map_;
540 delete name_buffer_; 539 delete name_buffer_;
541 delete log_; 540 delete log_;
542 } 541 }
543 542
544 543
545 void Logger::IssueCodeAddedEvent(Code* code,
546 const char* name,
547 size_t name_len) {
548 JitCodeEvent event;
549 event.type = JitCodeEvent::CODE_ADDED;
550 event.code_start = code->instruction_start();
551 event.code_len = code->instruction_size();
552 event.name.str = name;
553 event.name.len = name_len;
554
555 code_event_handler_(&event);
556 }
557
558
559 void Logger::IssueCodeMovedEvent(Address from, Address to) {
560 Code* from_code = Code::cast(HeapObject::FromAddress(from));
561
562 JitCodeEvent event;
563 event.type = JitCodeEvent::CODE_MOVED;
564 event.code_start = from_code->instruction_start();
565 event.code_len = from_code->instruction_size();
566
567 // Calculate the header size.
568 const size_t header_size =
569 from_code->instruction_start() - reinterpret_cast<byte*>(from_code);
570
571 event.new_code_start = to + header_size;
572
573 code_event_handler_(&event);
574 }
575
576
577 void Logger::IssueCodeRemovedEvent(Address from) {
578 Code* from_code = Code::cast(HeapObject::FromAddress(from));
579
580 JitCodeEvent event;
581 event.type = JitCodeEvent::CODE_REMOVED;
582 event.code_start = from_code->instruction_start();
583 event.code_len = from_code->instruction_size();
584
585 code_event_handler_(&event);
586 }
587
588
589 #define DECLARE_EVENT(ignore1, name) name, 544 #define DECLARE_EVENT(ignore1, name) name,
590 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { 545 static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
591 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT) 546 LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT)
592 }; 547 };
593 #undef DECLARE_EVENT 548 #undef DECLARE_EVENT
594 549
595 550
596 void Logger::ProfilerBeginEvent() { 551 void Logger::ProfilerBeginEvent() {
597 if (!log_->IsEnabled()) return; 552 if (!log_->IsEnabled()) return;
598 LogMessageBuilder msg(this); 553 LogMessageBuilder msg(this);
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 if (!log_->IsEnabled() || !FLAG_log_code) return; 857 if (!log_->IsEnabled() || !FLAG_log_code) return;
903 SmartArrayPointer<char> str = 858 SmartArrayPointer<char> str =
904 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 859 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
905 CallbackEventInternal("set ", *str, entry_point); 860 CallbackEventInternal("set ", *str, entry_point);
906 } 861 }
907 862
908 863
909 void Logger::CodeCreateEvent(LogEventsAndTags tag, 864 void Logger::CodeCreateEvent(LogEventsAndTags tag,
910 Code* code, 865 Code* code,
911 const char* comment) { 866 const char* comment) {
912 if (!is_logging_code_events()) return; 867 if (!log_->IsEnabled()) return;
913 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 868 if (FLAG_ll_prof || Serializer::enabled()) {
914 name_buffer_->Reset(); 869 name_buffer_->Reset();
915 name_buffer_->AppendBytes(kLogEventsNames[tag]); 870 name_buffer_->AppendBytes(kLogEventsNames[tag]);
916 name_buffer_->AppendByte(':'); 871 name_buffer_->AppendByte(':');
917 name_buffer_->AppendBytes(comment); 872 name_buffer_->AppendBytes(comment);
918 } 873 }
919 if (code_event_handler_ != NULL) {
920 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
921 }
922 if (!log_->IsEnabled()) return;
923 if (FLAG_ll_prof) { 874 if (FLAG_ll_prof) {
924 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 875 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
925 } 876 }
926 if (Serializer::enabled()) { 877 if (Serializer::enabled()) {
927 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 878 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
928 } 879 }
929 if (!FLAG_log_code) return; 880 if (!FLAG_log_code) return;
930 LogMessageBuilder msg(this); 881 LogMessageBuilder msg(this);
931 msg.Append("%s,%s,", 882 msg.Append("%s,%s,",
932 kLogEventsNames[CODE_CREATION_EVENT], 883 kLogEventsNames[CODE_CREATION_EVENT],
933 kLogEventsNames[tag]); 884 kLogEventsNames[tag]);
934 msg.AppendAddress(code->address()); 885 msg.AppendAddress(code->address());
935 msg.Append(",%d,\"", code->ExecutableSize()); 886 msg.Append(",%d,\"", code->ExecutableSize());
936 for (const char* p = comment; *p != '\0'; p++) { 887 for (const char* p = comment; *p != '\0'; p++) {
937 if (*p == '"') { 888 if (*p == '"') {
938 msg.Append('\\'); 889 msg.Append('\\');
939 } 890 }
940 msg.Append(*p); 891 msg.Append(*p);
941 } 892 }
942 msg.Append('"'); 893 msg.Append('"');
943 msg.Append('\n'); 894 msg.Append('\n');
944 msg.WriteToLogFile(); 895 msg.WriteToLogFile();
945 } 896 }
946 897
947 898
948 void Logger::CodeCreateEvent(LogEventsAndTags tag, 899 void Logger::CodeCreateEvent(LogEventsAndTags tag,
949 Code* code, 900 Code* code,
950 String* name) { 901 String* name) {
951 if (!is_logging_code_events()) return; 902 if (!log_->IsEnabled()) return;
952 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 903 if (FLAG_ll_prof || Serializer::enabled()) {
953 name_buffer_->Reset(); 904 name_buffer_->Reset();
954 name_buffer_->AppendBytes(kLogEventsNames[tag]); 905 name_buffer_->AppendBytes(kLogEventsNames[tag]);
955 name_buffer_->AppendByte(':'); 906 name_buffer_->AppendByte(':');
956 name_buffer_->AppendString(name); 907 name_buffer_->AppendString(name);
957 } 908 }
958 if (code_event_handler_ != NULL) {
959 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
960 }
961 if (!log_->IsEnabled()) return;
962 if (FLAG_ll_prof) { 909 if (FLAG_ll_prof) {
963 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 910 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
964 } 911 }
965 if (Serializer::enabled()) { 912 if (Serializer::enabled()) {
966 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 913 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
967 } 914 }
968 if (!FLAG_log_code) return; 915 if (!FLAG_log_code) return;
969 LogMessageBuilder msg(this); 916 LogMessageBuilder msg(this);
970 msg.Append("%s,%s,", 917 msg.Append("%s,%s,",
971 kLogEventsNames[CODE_CREATION_EVENT], 918 kLogEventsNames[CODE_CREATION_EVENT],
(...skipping 14 matching lines...) Expand all
986 case Code::OPTIMIZED_FUNCTION: return "*"; 933 case Code::OPTIMIZED_FUNCTION: return "*";
987 default: return ""; 934 default: return "";
988 } 935 }
989 } 936 }
990 937
991 938
992 void Logger::CodeCreateEvent(LogEventsAndTags tag, 939 void Logger::CodeCreateEvent(LogEventsAndTags tag,
993 Code* code, 940 Code* code,
994 SharedFunctionInfo* shared, 941 SharedFunctionInfo* shared,
995 String* name) { 942 String* name) {
996 if (!is_logging_code_events()) return; 943 if (!log_->IsEnabled()) return;
997 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 944 if (FLAG_ll_prof || Serializer::enabled()) {
998 name_buffer_->Reset(); 945 name_buffer_->Reset();
999 name_buffer_->AppendBytes(kLogEventsNames[tag]); 946 name_buffer_->AppendBytes(kLogEventsNames[tag]);
1000 name_buffer_->AppendByte(':'); 947 name_buffer_->AppendByte(':');
1001 name_buffer_->AppendBytes(ComputeMarker(code)); 948 name_buffer_->AppendBytes(ComputeMarker(code));
1002 name_buffer_->AppendString(name); 949 name_buffer_->AppendString(name);
1003 } 950 }
1004 if (code_event_handler_ != NULL) {
1005 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
1006 }
1007 if (!log_->IsEnabled()) return;
1008 if (FLAG_ll_prof) { 951 if (FLAG_ll_prof) {
1009 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 952 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1010 } 953 }
1011 if (Serializer::enabled()) { 954 if (Serializer::enabled()) {
1012 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 955 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1013 } 956 }
1014 if (!FLAG_log_code) return; 957 if (!FLAG_log_code) return;
1015 if (code == Isolate::Current()->builtins()->builtin( 958 if (code == Isolate::Current()->builtins()->builtin(
1016 Builtins::kLazyCompile)) 959 Builtins::kLazyCompile))
1017 return; 960 return;
(...skipping 13 matching lines...) Expand all
1031 } 974 }
1032 975
1033 976
1034 // Although, it is possible to extract source and line from 977 // Although, it is possible to extract source and line from
1035 // the SharedFunctionInfo object, we left it to caller 978 // the SharedFunctionInfo object, we left it to caller
1036 // to leave logging functions free from heap allocations. 979 // to leave logging functions free from heap allocations.
1037 void Logger::CodeCreateEvent(LogEventsAndTags tag, 980 void Logger::CodeCreateEvent(LogEventsAndTags tag,
1038 Code* code, 981 Code* code,
1039 SharedFunctionInfo* shared, 982 SharedFunctionInfo* shared,
1040 String* source, int line) { 983 String* source, int line) {
1041 if (!is_logging_code_events()) return; 984 if (!log_->IsEnabled()) return;
1042 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 985 if (FLAG_ll_prof || Serializer::enabled()) {
1043 name_buffer_->Reset(); 986 name_buffer_->Reset();
1044 name_buffer_->AppendBytes(kLogEventsNames[tag]); 987 name_buffer_->AppendBytes(kLogEventsNames[tag]);
1045 name_buffer_->AppendByte(':'); 988 name_buffer_->AppendByte(':');
1046 name_buffer_->AppendBytes(ComputeMarker(code)); 989 name_buffer_->AppendBytes(ComputeMarker(code));
1047 name_buffer_->AppendString(shared->DebugName()); 990 name_buffer_->AppendString(shared->DebugName());
1048 name_buffer_->AppendByte(' '); 991 name_buffer_->AppendByte(' ');
1049 name_buffer_->AppendString(source); 992 name_buffer_->AppendString(source);
1050 name_buffer_->AppendByte(':'); 993 name_buffer_->AppendByte(':');
1051 name_buffer_->AppendInt(line); 994 name_buffer_->AppendInt(line);
1052 } 995 }
1053 if (code_event_handler_ != NULL) {
1054 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
1055 }
1056 if (!log_->IsEnabled()) return;
1057 if (FLAG_ll_prof) { 996 if (FLAG_ll_prof) {
1058 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 997 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1059 } 998 }
1060 if (Serializer::enabled()) { 999 if (Serializer::enabled()) {
1061 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1000 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1062 } 1001 }
1063 if (!FLAG_log_code) return; 1002 if (!FLAG_log_code) return;
1064 LogMessageBuilder msg(this); 1003 LogMessageBuilder msg(this);
1065 SmartArrayPointer<char> name = 1004 SmartArrayPointer<char> name =
1066 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 1005 shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
1067 SmartArrayPointer<char> sourcestr = 1006 SmartArrayPointer<char> sourcestr =
1068 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 1007 source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
1069 msg.Append("%s,%s,", 1008 msg.Append("%s,%s,",
1070 kLogEventsNames[CODE_CREATION_EVENT], 1009 kLogEventsNames[CODE_CREATION_EVENT],
1071 kLogEventsNames[tag]); 1010 kLogEventsNames[tag]);
1072 msg.AppendAddress(code->address()); 1011 msg.AppendAddress(code->address());
1073 msg.Append(",%d,\"%s %s:%d\",", 1012 msg.Append(",%d,\"%s %s:%d\",",
1074 code->ExecutableSize(), 1013 code->ExecutableSize(),
1075 *name, 1014 *name,
1076 *sourcestr, 1015 *sourcestr,
1077 line); 1016 line);
1078 msg.AppendAddress(shared->address()); 1017 msg.AppendAddress(shared->address());
1079 msg.Append(",%s", ComputeMarker(code)); 1018 msg.Append(",%s", ComputeMarker(code));
1080 msg.Append('\n'); 1019 msg.Append('\n');
1081 msg.WriteToLogFile(); 1020 msg.WriteToLogFile();
1082 } 1021 }
1083 1022
1084 1023
1085 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) { 1024 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
1086 if (!is_logging_code_events()) return; 1025 if (!log_->IsEnabled()) return;
1087 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 1026 if (FLAG_ll_prof || Serializer::enabled()) {
1088 name_buffer_->Reset(); 1027 name_buffer_->Reset();
1089 name_buffer_->AppendBytes(kLogEventsNames[tag]); 1028 name_buffer_->AppendBytes(kLogEventsNames[tag]);
1090 name_buffer_->AppendByte(':'); 1029 name_buffer_->AppendByte(':');
1091 name_buffer_->AppendInt(args_count); 1030 name_buffer_->AppendInt(args_count);
1092 } 1031 }
1093 if (code_event_handler_ != NULL) {
1094 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
1095 }
1096 if (!log_->IsEnabled()) return;
1097 if (FLAG_ll_prof) { 1032 if (FLAG_ll_prof) {
1098 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1033 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1099 } 1034 }
1100 if (Serializer::enabled()) { 1035 if (Serializer::enabled()) {
1101 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1036 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1102 } 1037 }
1103 if (!FLAG_log_code) return; 1038 if (!FLAG_log_code) return;
1104 LogMessageBuilder msg(this); 1039 LogMessageBuilder msg(this);
1105 msg.Append("%s,%s,", 1040 msg.Append("%s,%s,",
1106 kLogEventsNames[CODE_CREATION_EVENT], 1041 kLogEventsNames[CODE_CREATION_EVENT],
1107 kLogEventsNames[tag]); 1042 kLogEventsNames[tag]);
1108 msg.AppendAddress(code->address()); 1043 msg.AppendAddress(code->address());
1109 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count); 1044 msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
1110 msg.Append('\n'); 1045 msg.Append('\n');
1111 msg.WriteToLogFile(); 1046 msg.WriteToLogFile();
1112 } 1047 }
1113 1048
1114 1049
1115 void Logger::CodeMovingGCEvent() { 1050 void Logger::CodeMovingGCEvent() {
1116 if (!log_->IsEnabled() || !FLAG_ll_prof) return; 1051 if (!log_->IsEnabled() || !FLAG_ll_prof) return;
1117 LowLevelLogWriteBytes(&kCodeMovingGCTag, sizeof(kCodeMovingGCTag)); 1052 LowLevelLogWriteBytes(&kCodeMovingGCTag, sizeof(kCodeMovingGCTag));
1118 OS::SignalCodeMovingGC(); 1053 OS::SignalCodeMovingGC();
1119 } 1054 }
1120 1055
1121 1056
1122 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 1057 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
1123 if (!is_logging_code_events()) return; 1058 if (!log_->IsEnabled()) return;
1124 if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) { 1059 if (FLAG_ll_prof || Serializer::enabled()) {
1125 name_buffer_->Reset(); 1060 name_buffer_->Reset();
1126 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]); 1061 name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]);
1127 name_buffer_->AppendByte(':'); 1062 name_buffer_->AppendByte(':');
1128 name_buffer_->AppendString(source); 1063 name_buffer_->AppendString(source);
1129 } 1064 }
1130 if (code_event_handler_ != NULL) {
1131 IssueCodeAddedEvent(code, name_buffer_->get(), name_buffer_->size());
1132 }
1133 if (!log_->IsEnabled()) return;
1134 if (FLAG_ll_prof) { 1065 if (FLAG_ll_prof) {
1135 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size()); 1066 LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
1136 } 1067 }
1137 if (Serializer::enabled()) { 1068 if (Serializer::enabled()) {
1138 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size()); 1069 RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
1139 } 1070 }
1140 if (!FLAG_log_code) return; 1071 if (!FLAG_log_code) return;
1141 LogMessageBuilder msg(this); 1072 LogMessageBuilder msg(this);
1142 msg.Append("%s,%s,", 1073 msg.Append("%s,%s,",
1143 kLogEventsNames[CODE_CREATION_EVENT], 1074 kLogEventsNames[CODE_CREATION_EVENT],
1144 kLogEventsNames[REG_EXP_TAG]); 1075 kLogEventsNames[REG_EXP_TAG]);
1145 msg.AppendAddress(code->address()); 1076 msg.AppendAddress(code->address());
1146 msg.Append(",%d,\"", code->ExecutableSize()); 1077 msg.Append(",%d,\"", code->ExecutableSize());
1147 msg.AppendDetailed(source, false); 1078 msg.AppendDetailed(source, false);
1148 msg.Append('\"'); 1079 msg.Append('\"');
1149 msg.Append('\n'); 1080 msg.Append('\n');
1150 msg.WriteToLogFile(); 1081 msg.WriteToLogFile();
1151 } 1082 }
1152 1083
1153 1084
1154 void Logger::CodeMoveEvent(Address from, Address to) { 1085 void Logger::CodeMoveEvent(Address from, Address to) {
1155 if (code_event_handler_ != NULL) IssueCodeMovedEvent(from, to);
1156 if (!log_->IsEnabled()) return; 1086 if (!log_->IsEnabled()) return;
1157 if (FLAG_ll_prof) LowLevelCodeMoveEvent(from, to); 1087 if (FLAG_ll_prof) LowLevelCodeMoveEvent(from, to);
1158 if (Serializer::enabled() && address_to_name_map_ != NULL) { 1088 if (Serializer::enabled() && address_to_name_map_ != NULL) {
1159 address_to_name_map_->Move(from, to); 1089 address_to_name_map_->Move(from, to);
1160 } 1090 }
1161 MoveEventInternal(CODE_MOVE_EVENT, from, to); 1091 MoveEventInternal(CODE_MOVE_EVENT, from, to);
1162 } 1092 }
1163 1093
1164 1094
1165 void Logger::CodeDeleteEvent(Address from) { 1095 void Logger::CodeDeleteEvent(Address from) {
1166 if (code_event_handler_ != NULL) IssueCodeRemovedEvent(from);
1167 if (!log_->IsEnabled()) return; 1096 if (!log_->IsEnabled()) return;
1168 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from); 1097 if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from);
1169 if (Serializer::enabled() && address_to_name_map_ != NULL) { 1098 if (Serializer::enabled() && address_to_name_map_ != NULL) {
1170 address_to_name_map_->Remove(from); 1099 address_to_name_map_->Remove(from);
1171 } 1100 }
1172 DeleteEventInternal(CODE_DELETE_EVENT, from); 1101 DeleteEventInternal(CODE_DELETE_EVENT, from);
1173 } 1102 }
1174 1103
1175 1104
1176 void Logger::SnapshotPositionEvent(Address addr, int pos) { 1105 void Logger::SnapshotPositionEvent(Address addr, int pos) {
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 EnumerateOptimizedFunctionsVisitor visitor(sfis, 1385 EnumerateOptimizedFunctionsVisitor visitor(sfis,
1457 code_objects, 1386 code_objects,
1458 &compiled_funcs_count); 1387 &compiled_funcs_count);
1459 Deoptimizer::VisitAllOptimizedFunctions(&visitor); 1388 Deoptimizer::VisitAllOptimizedFunctions(&visitor);
1460 1389
1461 return compiled_funcs_count; 1390 return compiled_funcs_count;
1462 } 1391 }
1463 1392
1464 1393
1465 void Logger::LogCodeObject(Object* object) { 1394 void Logger::LogCodeObject(Object* object) {
1466 if (FLAG_log_code || FLAG_ll_prof || is_logging_code_events()) { 1395 if (FLAG_log_code || FLAG_ll_prof) {
1467 Code* code_object = Code::cast(object); 1396 Code* code_object = Code::cast(object);
1468 LogEventsAndTags tag = Logger::STUB_TAG; 1397 LogEventsAndTags tag = Logger::STUB_TAG;
1469 const char* description = "Unknown code from the snapshot"; 1398 const char* description = "Unknown code from the snapshot";
1470 switch (code_object->kind()) { 1399 switch (code_object->kind()) {
1471 case Code::FUNCTION: 1400 case Code::FUNCTION:
1472 case Code::OPTIMIZED_FUNCTION: 1401 case Code::OPTIMIZED_FUNCTION:
1473 return; // We log this later using LogCompiledFunctions. 1402 return; // We log this later using LogCompiledFunctions.
1474 case Code::UNARY_OP_IC: // fall through 1403 case Code::UNARY_OP_IC: // fall through
1475 case Code::BINARY_OP_IC: // fall through 1404 case Code::BINARY_OP_IC: // fall through
1476 case Code::COMPARE_IC: // fall through 1405 case Code::COMPARE_IC: // fall through
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1740 } 1669 }
1741 if (!FLAG_prof_lazy) { 1670 if (!FLAG_prof_lazy) {
1742 profiler_->Engage(); 1671 profiler_->Engage();
1743 } 1672 }
1744 } 1673 }
1745 1674
1746 return true; 1675 return true;
1747 } 1676 }
1748 1677
1749 1678
1750 void Logger::SetCodeEventHandler(uint32_t options,
1751 JitCodeEventHandler event_handler) {
1752 code_event_handler_ = event_handler;
1753
1754 if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) {
1755 HandleScope scope;
1756 LogCodeObjects();
1757 LogCompiledFunctions();
1758 }
1759 }
1760
1761
1762 Sampler* Logger::sampler() { 1679 Sampler* Logger::sampler() {
1763 return ticker_; 1680 return ticker_;
1764 } 1681 }
1765 1682
1766 1683
1767 void Logger::EnsureTickerStarted() { 1684 void Logger::EnsureTickerStarted() {
1768 ASSERT(ticker_ != NULL); 1685 ASSERT(ticker_ != NULL);
1769 if (!ticker_->IsActive()) ticker_->Start(); 1686 if (!ticker_->IsActive()) ticker_->Start();
1770 } 1687 }
1771 1688
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1866 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) { 1783 void SamplerRegistry::RemoveActiveSampler(Sampler* sampler) {
1867 ASSERT(sampler->IsActive()); 1784 ASSERT(sampler->IsActive());
1868 ScopedLock lock(active_samplers_mutex); 1785 ScopedLock lock(active_samplers_mutex);
1869 ASSERT(active_samplers_ != NULL); 1786 ASSERT(active_samplers_ != NULL);
1870 bool removed = active_samplers_->RemoveElement(sampler); 1787 bool removed = active_samplers_->RemoveElement(sampler);
1871 ASSERT(removed); 1788 ASSERT(removed);
1872 USE(removed); 1789 USE(removed);
1873 } 1790 }
1874 1791
1875 } } // namespace v8::internal 1792 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/log.h ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698