OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 | 673 |
674 private: | 674 private: |
675 LogRecordCompressor compressor_; | 675 LogRecordCompressor compressor_; |
676 int repeat_count_; | 676 int repeat_count_; |
677 EmbeddedVector<char, 20> prefix_; | 677 EmbeddedVector<char, 20> prefix_; |
678 }; | 678 }; |
679 | 679 |
680 #endif // ENABLE_LOGGING_AND_PROFILING | 680 #endif // ENABLE_LOGGING_AND_PROFILING |
681 | 681 |
682 | 682 |
683 void Logger::CallbackEvent(String* name, Address entry_point) { | |
684 #ifdef ENABLE_LOGGING_AND_PROFILING | 683 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 684 void Logger::CallbackEventInternal(const char* prefix, const char* name, |
| 685 Address entry_point) { |
685 if (!Log::IsEnabled() || !FLAG_log_code) return; | 686 if (!Log::IsEnabled() || !FLAG_log_code) return; |
686 LogMessageBuilder msg; | 687 LogMessageBuilder msg; |
687 msg.Append("%s,%s,", | 688 msg.Append("%s,%s,", |
688 log_events_[CODE_CREATION_EVENT], log_events_[CALLBACK_TAG]); | 689 log_events_[CODE_CREATION_EVENT], log_events_[CALLBACK_TAG]); |
689 msg.AppendAddress(entry_point); | 690 msg.AppendAddress(entry_point); |
690 SmartPointer<char> str = | 691 msg.Append(",1,\"%s%s\"", prefix, name); |
691 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | |
692 msg.Append(",1,\"%s\"", *str); | |
693 if (FLAG_compress_log) { | 692 if (FLAG_compress_log) { |
694 ASSERT(compression_helper_ != NULL); | 693 ASSERT(compression_helper_ != NULL); |
695 if (!compression_helper_->HandleMessage(&msg)) return; | 694 if (!compression_helper_->HandleMessage(&msg)) return; |
696 } | 695 } |
697 msg.Append('\n'); | 696 msg.Append('\n'); |
698 msg.WriteToLogFile(); | 697 msg.WriteToLogFile(); |
| 698 } |
| 699 #endif |
| 700 |
| 701 |
| 702 void Logger::CallbackEvent(String* name, Address entry_point) { |
| 703 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 704 if (!Log::IsEnabled() || !FLAG_log_code) return; |
| 705 SmartPointer<char> str = |
| 706 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 707 CallbackEventInternal("", *str, entry_point); |
699 #endif | 708 #endif |
700 } | 709 } |
701 | 710 |
| 711 |
| 712 void Logger::GetterCallbackEvent(String* name, Address entry_point) { |
| 713 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 714 if (!Log::IsEnabled() || !FLAG_log_code) return; |
| 715 SmartPointer<char> str = |
| 716 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 717 CallbackEventInternal("get ", *str, entry_point); |
| 718 #endif |
| 719 } |
| 720 |
| 721 |
| 722 void Logger::SetterCallbackEvent(String* name, Address entry_point) { |
| 723 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 724 if (!Log::IsEnabled() || !FLAG_log_code) return; |
| 725 SmartPointer<char> str = |
| 726 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 727 CallbackEventInternal("set ", *str, entry_point); |
| 728 #endif |
| 729 } |
| 730 |
702 | 731 |
703 void Logger::CodeCreateEvent(LogEventsAndTags tag, | 732 void Logger::CodeCreateEvent(LogEventsAndTags tag, |
704 Code* code, | 733 Code* code, |
705 const char* comment) { | 734 const char* comment) { |
706 #ifdef ENABLE_LOGGING_AND_PROFILING | 735 #ifdef ENABLE_LOGGING_AND_PROFILING |
707 if (!Log::IsEnabled() || !FLAG_log_code) return; | 736 if (!Log::IsEnabled() || !FLAG_log_code) return; |
708 LogMessageBuilder msg; | 737 LogMessageBuilder msg; |
709 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); | 738 msg.Append("%s,%s,", log_events_[CODE_CREATION_EVENT], log_events_[tag]); |
710 msg.AppendAddress(code->address()); | 739 msg.AppendAddress(code->address()); |
711 msg.Append(",%d,\"", code->ExecutableSize()); | 740 msg.Append(",%d,\"", code->ExecutableSize()); |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 const int modules_to_enable = ~GetActiveProfilerModules() & flags; | 1120 const int modules_to_enable = ~GetActiveProfilerModules() & flags; |
1092 if (modules_to_enable != PROFILER_MODULE_NONE) { | 1121 if (modules_to_enable != PROFILER_MODULE_NONE) { |
1093 is_logging_ = true; | 1122 is_logging_ = true; |
1094 } | 1123 } |
1095 if (modules_to_enable & PROFILER_MODULE_CPU) { | 1124 if (modules_to_enable & PROFILER_MODULE_CPU) { |
1096 if (FLAG_prof_lazy) { | 1125 if (FLAG_prof_lazy) { |
1097 profiler_->Engage(); | 1126 profiler_->Engage(); |
1098 LOG(UncheckedStringEvent("profiler", "resume")); | 1127 LOG(UncheckedStringEvent("profiler", "resume")); |
1099 FLAG_log_code = true; | 1128 FLAG_log_code = true; |
1100 LogCompiledFunctions(); | 1129 LogCompiledFunctions(); |
| 1130 LogAccessorCallbacks(); |
1101 if (!FLAG_sliding_state_window) ticker_->Start(); | 1131 if (!FLAG_sliding_state_window) ticker_->Start(); |
1102 } | 1132 } |
1103 profiler_->resume(); | 1133 profiler_->resume(); |
1104 } | 1134 } |
1105 if (modules_to_enable & | 1135 if (modules_to_enable & |
1106 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { | 1136 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { |
1107 FLAG_log_gc = true; | 1137 FLAG_log_gc = true; |
1108 } | 1138 } |
1109 } | 1139 } |
1110 | 1140 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1235 } | 1265 } |
1236 } else { | 1266 } else { |
1237 LOG(CodeCreateEvent( | 1267 LOG(CodeCreateEvent( |
1238 Logger::LAZY_COMPILE_TAG, shared->code(), *func_name)); | 1268 Logger::LAZY_COMPILE_TAG, shared->code(), *func_name)); |
1239 } | 1269 } |
1240 } | 1270 } |
1241 | 1271 |
1242 DeleteArray(sfis); | 1272 DeleteArray(sfis); |
1243 } | 1273 } |
1244 | 1274 |
| 1275 |
| 1276 void Logger::LogAccessorCallbacks() { |
| 1277 AssertNoAllocation no_alloc; |
| 1278 HeapIterator iterator; |
| 1279 while (iterator.has_next()) { |
| 1280 HeapObject* obj = iterator.next(); |
| 1281 ASSERT(obj != NULL); |
| 1282 if (!obj->IsAccessorInfo()) continue; |
| 1283 AccessorInfo* ai = AccessorInfo::cast(obj); |
| 1284 if (!ai->name()->IsString()) continue; |
| 1285 String* name = String::cast(ai->name()); |
| 1286 Address getter_entry = v8::ToCData<Address>(ai->getter()); |
| 1287 if (getter_entry != 0) { |
| 1288 LOG(GetterCallbackEvent(name, getter_entry)); |
| 1289 } |
| 1290 Address setter_entry = v8::ToCData<Address>(ai->setter()); |
| 1291 if (setter_entry != 0) { |
| 1292 LOG(SetterCallbackEvent(name, setter_entry)); |
| 1293 } |
| 1294 } |
| 1295 } |
| 1296 |
1245 #endif | 1297 #endif |
1246 | 1298 |
1247 | 1299 |
1248 bool Logger::Setup() { | 1300 bool Logger::Setup() { |
1249 #ifdef ENABLE_LOGGING_AND_PROFILING | 1301 #ifdef ENABLE_LOGGING_AND_PROFILING |
1250 // --log-all enables all the log flags. | 1302 // --log-all enables all the log flags. |
1251 if (FLAG_log_all) { | 1303 if (FLAG_log_all) { |
1252 FLAG_log_runtime = true; | 1304 FLAG_log_runtime = true; |
1253 FLAG_log_api = true; | 1305 FLAG_log_api = true; |
1254 FLAG_log_code = true; | 1306 FLAG_log_code = true; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 // Otherwise, if the sliding state window computation has not been | 1448 // Otherwise, if the sliding state window computation has not been |
1397 // started we do it now. | 1449 // started we do it now. |
1398 if (sliding_state_window_ == NULL) { | 1450 if (sliding_state_window_ == NULL) { |
1399 sliding_state_window_ = new SlidingStateWindow(); | 1451 sliding_state_window_ = new SlidingStateWindow(); |
1400 } | 1452 } |
1401 #endif | 1453 #endif |
1402 } | 1454 } |
1403 | 1455 |
1404 | 1456 |
1405 } } // namespace v8::internal | 1457 } } // namespace v8::internal |
OLD | NEW |