| 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 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 // | 322 // |
| 323 // Logger class implementation. | 323 // Logger class implementation. |
| 324 // | 324 // |
| 325 Ticker* Logger::ticker_ = NULL; | 325 Ticker* Logger::ticker_ = NULL; |
| 326 Profiler* Logger::profiler_ = NULL; | 326 Profiler* Logger::profiler_ = NULL; |
| 327 VMState* Logger::current_state_ = NULL; | 327 VMState* Logger::current_state_ = NULL; |
| 328 VMState Logger::bottom_state_(EXTERNAL); | 328 VMState Logger::bottom_state_(EXTERNAL); |
| 329 SlidingStateWindow* Logger::sliding_state_window_ = NULL; | 329 SlidingStateWindow* Logger::sliding_state_window_ = NULL; |
| 330 const char** Logger::log_events_ = NULL; | 330 const char** Logger::log_events_ = NULL; |
| 331 CompressionHelper* Logger::compression_helper_ = NULL; | 331 CompressionHelper* Logger::compression_helper_ = NULL; |
| 332 bool Logger::is_logging_ = false; | 332 int Logger::logging_nesting_ = 0; |
| 333 int Logger::cpu_profiler_nesting_ = 0; | 333 int Logger::cpu_profiler_nesting_ = 0; |
| 334 int Logger::heap_profiler_nesting_ = 0; | 334 int Logger::heap_profiler_nesting_ = 0; |
| 335 | 335 |
| 336 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, | 336 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, |
| 337 const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { | 337 const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
| 338 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) | 338 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) |
| 339 }; | 339 }; |
| 340 #undef DECLARE_LONG_EVENT | 340 #undef DECLARE_LONG_EVENT |
| 341 | 341 |
| 342 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name, | 342 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 if (!Log::IsEnabled()) return; | 382 if (!Log::IsEnabled()) return; |
| 383 LogMessageBuilder msg; | 383 LogMessageBuilder msg; |
| 384 msg.Append("%s,\"%s\"\n", name, value); | 384 msg.Append("%s,\"%s\"\n", name, value); |
| 385 msg.WriteToLogFile(); | 385 msg.WriteToLogFile(); |
| 386 } | 386 } |
| 387 #endif | 387 #endif |
| 388 | 388 |
| 389 | 389 |
| 390 void Logger::IntEvent(const char* name, int value) { | 390 void Logger::IntEvent(const char* name, int value) { |
| 391 #ifdef ENABLE_LOGGING_AND_PROFILING | 391 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 392 if (!Log::IsEnabled() || !FLAG_log) return; | 392 if (FLAG_log) UncheckedIntEvent(name, value); |
| 393 LogMessageBuilder msg; | |
| 394 msg.Append("%s,%d\n", name, value); | |
| 395 msg.WriteToLogFile(); | |
| 396 #endif | 393 #endif |
| 397 } | 394 } |
| 398 | 395 |
| 399 | 396 |
| 397 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 398 void Logger::UncheckedIntEvent(const char* name, int value) { |
| 399 if (!Log::IsEnabled()) return; |
| 400 LogMessageBuilder msg; |
| 401 msg.Append("%s,%d\n", name, value); |
| 402 msg.WriteToLogFile(); |
| 403 } |
| 404 #endif |
| 405 |
| 406 |
| 400 void Logger::HandleEvent(const char* name, Object** location) { | 407 void Logger::HandleEvent(const char* name, Object** location) { |
| 401 #ifdef ENABLE_LOGGING_AND_PROFILING | 408 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 402 if (!Log::IsEnabled() || !FLAG_log_handles) return; | 409 if (!Log::IsEnabled() || !FLAG_log_handles) return; |
| 403 LogMessageBuilder msg; | 410 LogMessageBuilder msg; |
| 404 msg.Append("%s,0x%" V8PRIxPTR "\n", name, location); | 411 msg.Append("%s,0x%" V8PRIxPTR "\n", name, location); |
| 405 msg.WriteToLogFile(); | 412 msg.WriteToLogFile(); |
| 406 #endif | 413 #endif |
| 407 } | 414 } |
| 408 | 415 |
| 409 | 416 |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 if (flags & PROFILER_MODULE_CPU) { | 1169 if (flags & PROFILER_MODULE_CPU) { |
| 1163 // It is OK to have negative nesting. | 1170 // It is OK to have negative nesting. |
| 1164 if (--cpu_profiler_nesting_ == 0) { | 1171 if (--cpu_profiler_nesting_ == 0) { |
| 1165 profiler_->pause(); | 1172 profiler_->pause(); |
| 1166 if (FLAG_prof_lazy) { | 1173 if (FLAG_prof_lazy) { |
| 1167 if (!FLAG_sliding_state_window) ticker_->Stop(); | 1174 if (!FLAG_sliding_state_window) ticker_->Stop(); |
| 1168 FLAG_log_code = false; | 1175 FLAG_log_code = false; |
| 1169 // Must be the same message as Log::kDynamicBufferSeal. | 1176 // Must be the same message as Log::kDynamicBufferSeal. |
| 1170 LOG(UncheckedStringEvent("profiler", "pause")); | 1177 LOG(UncheckedStringEvent("profiler", "pause")); |
| 1171 } | 1178 } |
| 1179 --logging_nesting_; |
| 1172 } | 1180 } |
| 1173 } | 1181 } |
| 1174 if (flags & | 1182 if (flags & |
| 1175 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { | 1183 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { |
| 1176 if (--heap_profiler_nesting_ == 0) { | 1184 if (--heap_profiler_nesting_ == 0) { |
| 1177 FLAG_log_gc = false; | 1185 FLAG_log_gc = false; |
| 1186 --logging_nesting_; |
| 1178 } | 1187 } |
| 1179 } | 1188 } |
| 1180 if (tag != 0) { | 1189 if (tag != 0) { |
| 1181 IntEvent("close-tag", tag); | 1190 UncheckedIntEvent("close-tag", tag); |
| 1182 } | |
| 1183 if (GetActiveProfilerModules() == PROFILER_MODULE_NONE) { | |
| 1184 is_logging_ = false; | |
| 1185 } | 1191 } |
| 1186 } | 1192 } |
| 1187 | 1193 |
| 1188 | 1194 |
| 1189 void Logger::ResumeProfiler(int flags, int tag) { | 1195 void Logger::ResumeProfiler(int flags, int tag) { |
| 1190 if (!Log::IsEnabled()) return; | 1196 if (!Log::IsEnabled()) return; |
| 1191 if (tag != 0) { | 1197 if (tag != 0) { |
| 1192 IntEvent("open-tag", tag); | 1198 UncheckedIntEvent("open-tag", tag); |
| 1193 } | 1199 } |
| 1194 if (flags & PROFILER_MODULE_CPU) { | 1200 if (flags & PROFILER_MODULE_CPU) { |
| 1195 if (cpu_profiler_nesting_++ == 0) { | 1201 if (cpu_profiler_nesting_++ == 0) { |
| 1196 is_logging_ = true; | 1202 ++logging_nesting_; |
| 1197 if (FLAG_prof_lazy) { | 1203 if (FLAG_prof_lazy) { |
| 1198 profiler_->Engage(); | 1204 profiler_->Engage(); |
| 1199 LOG(UncheckedStringEvent("profiler", "resume")); | 1205 LOG(UncheckedStringEvent("profiler", "resume")); |
| 1200 FLAG_log_code = true; | 1206 FLAG_log_code = true; |
| 1201 LogCompiledFunctions(); | 1207 LogCompiledFunctions(); |
| 1202 LogFunctionObjects(); | 1208 LogFunctionObjects(); |
| 1203 LogAccessorCallbacks(); | 1209 LogAccessorCallbacks(); |
| 1204 if (!FLAG_sliding_state_window) ticker_->Start(); | 1210 if (!FLAG_sliding_state_window) ticker_->Start(); |
| 1205 } | 1211 } |
| 1206 profiler_->resume(); | 1212 profiler_->resume(); |
| 1207 } | 1213 } |
| 1208 } | 1214 } |
| 1209 if (flags & | 1215 if (flags & |
| 1210 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { | 1216 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { |
| 1211 if (heap_profiler_nesting_++ == 0) { | 1217 if (heap_profiler_nesting_++ == 0) { |
| 1212 is_logging_ = true; | 1218 ++logging_nesting_; |
| 1213 FLAG_log_gc = true; | 1219 FLAG_log_gc = true; |
| 1214 } | 1220 } |
| 1215 } | 1221 } |
| 1216 } | 1222 } |
| 1217 | 1223 |
| 1218 | 1224 |
| 1219 // This function can be called when Log's mutex is acquired, | 1225 // This function can be called when Log's mutex is acquired, |
| 1220 // either from main or Profiler's thread. | 1226 // either from main or Profiler's thread. |
| 1221 void Logger::StopLoggingAndProfiling() { | 1227 void Logger::StopLoggingAndProfiling() { |
| 1222 Log::stop(); | 1228 Log::stop(); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { | 1481 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { |
| 1476 sliding_state_window_ = new SlidingStateWindow(); | 1482 sliding_state_window_ = new SlidingStateWindow(); |
| 1477 } | 1483 } |
| 1478 | 1484 |
| 1479 log_events_ = FLAG_compress_log ? | 1485 log_events_ = FLAG_compress_log ? |
| 1480 kCompressedLogEventsNames : kLongLogEventsNames; | 1486 kCompressedLogEventsNames : kLongLogEventsNames; |
| 1481 if (FLAG_compress_log) { | 1487 if (FLAG_compress_log) { |
| 1482 compression_helper_ = new CompressionHelper(kCompressionWindowSize); | 1488 compression_helper_ = new CompressionHelper(kCompressionWindowSize); |
| 1483 } | 1489 } |
| 1484 | 1490 |
| 1485 is_logging_ = start_logging; | 1491 if (start_logging) { |
| 1492 logging_nesting_ = 1; |
| 1493 } |
| 1486 | 1494 |
| 1487 if (FLAG_prof) { | 1495 if (FLAG_prof) { |
| 1488 profiler_ = new Profiler(); | 1496 profiler_ = new Profiler(); |
| 1489 if (!FLAG_prof_auto) { | 1497 if (!FLAG_prof_auto) { |
| 1490 profiler_->pause(); | 1498 profiler_->pause(); |
| 1491 } else { | 1499 } else { |
| 1492 is_logging_ = true; | 1500 logging_nesting_ = 1; |
| 1493 } | 1501 } |
| 1494 if (!FLAG_prof_lazy) { | 1502 if (!FLAG_prof_lazy) { |
| 1495 profiler_->Engage(); | 1503 profiler_->Engage(); |
| 1496 } | 1504 } |
| 1497 } | 1505 } |
| 1498 | 1506 |
| 1499 LogMessageBuilder::set_write_failure_handler(StopLoggingAndProfiling); | 1507 LogMessageBuilder::set_write_failure_handler(StopLoggingAndProfiling); |
| 1500 | 1508 |
| 1501 return true; | 1509 return true; |
| 1502 | 1510 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1544 // Otherwise, if the sliding state window computation has not been | 1552 // Otherwise, if the sliding state window computation has not been |
| 1545 // started we do it now. | 1553 // started we do it now. |
| 1546 if (sliding_state_window_ == NULL) { | 1554 if (sliding_state_window_ == NULL) { |
| 1547 sliding_state_window_ = new SlidingStateWindow(); | 1555 sliding_state_window_ = new SlidingStateWindow(); |
| 1548 } | 1556 } |
| 1549 #endif | 1557 #endif |
| 1550 } | 1558 } |
| 1551 | 1559 |
| 1552 | 1560 |
| 1553 } } // namespace v8::internal | 1561 } } // namespace v8::internal |
| OLD | NEW |