Chromium Code Reviews| 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 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 bool Logger::is_logging_ = false; |
| 333 int Logger::cpu_profiler_nesting_ = 0; | |
| 334 int Logger::heap_profiler_nesting_ = 0; | |
| 333 | 335 |
| 334 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, | 336 #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name, |
| 335 const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { | 337 const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
| 336 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) | 338 LOG_EVENTS_AND_TAGS_LIST(DECLARE_LONG_EVENT) |
| 337 }; | 339 }; |
| 338 #undef DECLARE_LONG_EVENT | 340 #undef DECLARE_LONG_EVENT |
| 339 | 341 |
| 340 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name, | 342 #define DECLARE_SHORT_EVENT(ignore1, ignore2, short_name) short_name, |
| 341 const char* kCompressedLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { | 343 const char* kCompressedLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = { |
| 342 LOG_EVENTS_AND_TAGS_LIST(DECLARE_SHORT_EVENT) | 344 LOG_EVENTS_AND_TAGS_LIST(DECLARE_SHORT_EVENT) |
| (...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1157 if (!profiler_->paused()) { | 1159 if (!profiler_->paused()) { |
| 1158 result |= PROFILER_MODULE_CPU; | 1160 result |= PROFILER_MODULE_CPU; |
| 1159 } | 1161 } |
| 1160 if (FLAG_log_gc) { | 1162 if (FLAG_log_gc) { |
| 1161 result |= PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS; | 1163 result |= PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS; |
| 1162 } | 1164 } |
| 1163 return result; | 1165 return result; |
| 1164 } | 1166 } |
| 1165 | 1167 |
| 1166 | 1168 |
| 1167 void Logger::PauseProfiler(int flags) { | 1169 void Logger::PauseProfiler(int flags, int tag) { |
| 1168 if (!Log::IsEnabled()) return; | 1170 if (!Log::IsEnabled()) return; |
| 1169 const int active_modules = GetActiveProfilerModules(); | 1171 if (flags & PROFILER_MODULE_CPU) { |
| 1170 const int modules_to_disable = active_modules & flags; | 1172 if (--cpu_profiler_nesting_ == 0) { |
|
Søren Thygesen Gjesse
2010/02/17 13:18:26
Maybe make a note that these counters can be both
mnaganov (inactive)
2010/02/17 13:22:50
Done.
| |
| 1171 if (modules_to_disable == PROFILER_MODULE_NONE) return; | 1173 profiler_->pause(); |
| 1172 | 1174 if (FLAG_prof_lazy) { |
| 1173 if (modules_to_disable & PROFILER_MODULE_CPU) { | 1175 if (!FLAG_sliding_state_window) ticker_->Stop(); |
| 1174 profiler_->pause(); | 1176 FLAG_log_code = false; |
| 1175 if (FLAG_prof_lazy) { | 1177 // Must be the same message as Log::kDynamicBufferSeal. |
| 1176 if (!FLAG_sliding_state_window) ticker_->Stop(); | 1178 LOG(UncheckedStringEvent("profiler", "pause")); |
| 1177 FLAG_log_code = false; | 1179 } |
| 1178 // Must be the same message as Log::kDynamicBufferSeal. | |
| 1179 LOG(UncheckedStringEvent("profiler", "pause")); | |
| 1180 } | 1180 } |
| 1181 } | 1181 } |
| 1182 if (modules_to_disable & | 1182 if (flags & |
| 1183 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { | 1183 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { |
| 1184 FLAG_log_gc = false; | 1184 if (--heap_profiler_nesting_ == 0) { |
| 1185 FLAG_log_gc = false; | |
| 1186 } | |
| 1185 } | 1187 } |
| 1186 // Turn off logging if no active modules remain. | 1188 if (tag != 0) { |
| 1187 if ((active_modules & ~flags) == PROFILER_MODULE_NONE) { | 1189 IntEvent("close-tag", tag); |
| 1190 } | |
| 1191 if (GetActiveProfilerModules() == PROFILER_MODULE_NONE) { | |
| 1188 is_logging_ = false; | 1192 is_logging_ = false; |
| 1189 } | 1193 } |
| 1190 } | 1194 } |
| 1191 | 1195 |
| 1192 | 1196 |
| 1193 void Logger::ResumeProfiler(int flags) { | 1197 void Logger::ResumeProfiler(int flags, int tag) { |
| 1194 if (!Log::IsEnabled()) return; | 1198 if (!Log::IsEnabled()) return; |
| 1195 const int modules_to_enable = ~GetActiveProfilerModules() & flags; | 1199 if (tag != 0) { |
| 1196 if (modules_to_enable != PROFILER_MODULE_NONE) { | 1200 IntEvent("open-tag", tag); |
| 1197 is_logging_ = true; | |
| 1198 } | 1201 } |
| 1199 if (modules_to_enable & PROFILER_MODULE_CPU) { | 1202 if (flags & PROFILER_MODULE_CPU) { |
| 1200 if (FLAG_prof_lazy) { | 1203 if (cpu_profiler_nesting_++ == 0) { |
| 1201 profiler_->Engage(); | 1204 is_logging_ = true; |
| 1202 LOG(UncheckedStringEvent("profiler", "resume")); | 1205 if (FLAG_prof_lazy) { |
| 1203 FLAG_log_code = true; | 1206 profiler_->Engage(); |
| 1204 LogCompiledFunctions(); | 1207 LOG(UncheckedStringEvent("profiler", "resume")); |
| 1205 LogFunctionObjects(); | 1208 FLAG_log_code = true; |
| 1206 LogAccessorCallbacks(); | 1209 LogCompiledFunctions(); |
| 1207 if (!FLAG_sliding_state_window) ticker_->Start(); | 1210 LogFunctionObjects(); |
| 1211 LogAccessorCallbacks(); | |
| 1212 if (!FLAG_sliding_state_window) ticker_->Start(); | |
| 1213 } | |
| 1214 profiler_->resume(); | |
| 1208 } | 1215 } |
| 1209 profiler_->resume(); | |
| 1210 } | 1216 } |
| 1211 if (modules_to_enable & | 1217 if (flags & |
| 1212 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { | 1218 (PROFILER_MODULE_HEAP_STATS | PROFILER_MODULE_JS_CONSTRUCTORS)) { |
| 1213 FLAG_log_gc = true; | 1219 if (heap_profiler_nesting_++ == 0) { |
| 1220 is_logging_ = true; | |
| 1221 FLAG_log_gc = true; | |
| 1222 } | |
| 1214 } | 1223 } |
| 1215 } | 1224 } |
| 1216 | 1225 |
| 1217 | 1226 |
| 1218 // This function can be called when Log's mutex is acquired, | 1227 // This function can be called when Log's mutex is acquired, |
| 1219 // either from main or Profiler's thread. | 1228 // either from main or Profiler's thread. |
| 1220 void Logger::StopLoggingAndProfiling() { | 1229 void Logger::StopLoggingAndProfiling() { |
| 1221 Log::stop(); | 1230 Log::stop(); |
| 1222 PauseProfiler(PROFILER_MODULE_CPU); | 1231 PauseProfiler(PROFILER_MODULE_CPU, 0); |
| 1223 } | 1232 } |
| 1224 | 1233 |
| 1225 | 1234 |
| 1226 bool Logger::IsProfilerSamplerActive() { | 1235 bool Logger::IsProfilerSamplerActive() { |
| 1227 return ticker_->IsActive(); | 1236 return ticker_->IsActive(); |
| 1228 } | 1237 } |
| 1229 | 1238 |
| 1230 | 1239 |
| 1231 int Logger::GetLogLines(int from_pos, char* dest_buf, int max_size) { | 1240 int Logger::GetLogLines(int from_pos, char* dest_buf, int max_size) { |
| 1232 return Log::GetLogLines(from_pos, dest_buf, max_size); | 1241 return Log::GetLogLines(from_pos, dest_buf, max_size); |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1543 // Otherwise, if the sliding state window computation has not been | 1552 // Otherwise, if the sliding state window computation has not been |
| 1544 // started we do it now. | 1553 // started we do it now. |
| 1545 if (sliding_state_window_ == NULL) { | 1554 if (sliding_state_window_ == NULL) { |
| 1546 sliding_state_window_ = new SlidingStateWindow(); | 1555 sliding_state_window_ = new SlidingStateWindow(); |
| 1547 } | 1556 } |
| 1548 #endif | 1557 #endif |
| 1549 } | 1558 } |
| 1550 | 1559 |
| 1551 | 1560 |
| 1552 } } // namespace v8::internal | 1561 } } // namespace v8::internal |
| OLD | NEW |