| 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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 void Profiler::Engage() { | 249 void Profiler::Engage() { |
| 250 OS::LogSharedLibraryAddresses(); | 250 OS::LogSharedLibraryAddresses(); |
| 251 | 251 |
| 252 // Start thread processing the profiler buffer. | 252 // Start thread processing the profiler buffer. |
| 253 running_ = true; | 253 running_ = true; |
| 254 Start(); | 254 Start(); |
| 255 | 255 |
| 256 // Register to get ticks. | 256 // Register to get ticks. |
| 257 Logger::ticker_->SetProfiler(this); | 257 Logger::ticker_->SetProfiler(this); |
| 258 | 258 |
| 259 LOG(UncheckedStringEvent("profiler", "begin")); | 259 Logger::ProfilerBeginEvent(); |
| 260 } | 260 } |
| 261 | 261 |
| 262 | 262 |
| 263 void Profiler::Disengage() { | 263 void Profiler::Disengage() { |
| 264 // Stop receiving ticks. | 264 // Stop receiving ticks. |
| 265 Logger::ticker_->ClearProfiler(); | 265 Logger::ticker_->ClearProfiler(); |
| 266 | 266 |
| 267 // Terminate the worker thread by setting running_ to false, | 267 // Terminate the worker thread by setting running_ to false, |
| 268 // inserting a fake element in the queue and then wait for | 268 // inserting a fake element in the queue and then wait for |
| 269 // the thread to terminate. | 269 // the thread to terminate. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 295 Profiler* Logger::profiler_ = NULL; | 295 Profiler* Logger::profiler_ = NULL; |
| 296 VMState* Logger::current_state_ = NULL; | 296 VMState* Logger::current_state_ = NULL; |
| 297 VMState Logger::bottom_state_(EXTERNAL); | 297 VMState Logger::bottom_state_(EXTERNAL); |
| 298 SlidingStateWindow* Logger::sliding_state_window_ = NULL; | 298 SlidingStateWindow* Logger::sliding_state_window_ = NULL; |
| 299 | 299 |
| 300 | 300 |
| 301 bool Logger::IsEnabled() { | 301 bool Logger::IsEnabled() { |
| 302 return Log::IsEnabled(); | 302 return Log::IsEnabled(); |
| 303 } | 303 } |
| 304 | 304 |
| 305 |
| 306 void Logger::ProfilerBeginEvent() { |
| 307 if (!Log::IsEnabled()) return; |
| 308 LogMessageBuilder msg; |
| 309 msg.Append("profiler,\"begin\",%d\n", kSamplingIntervalMs); |
| 310 msg.WriteToLogFile(); |
| 311 } |
| 312 |
| 305 #endif // ENABLE_LOGGING_AND_PROFILING | 313 #endif // ENABLE_LOGGING_AND_PROFILING |
| 306 | 314 |
| 307 | 315 |
| 308 void Logger::Preamble(const char* content) { | 316 void Logger::Preamble(const char* content) { |
| 309 #ifdef ENABLE_LOGGING_AND_PROFILING | 317 #ifdef ENABLE_LOGGING_AND_PROFILING |
| 310 if (!Log::IsEnabled() || !FLAG_log_code) return; | 318 if (!Log::IsEnabled() || !FLAG_log_code) return; |
| 311 LogMessageBuilder msg; | 319 LogMessageBuilder msg; |
| 312 msg.WriteCStringToLogFile(content); | 320 msg.WriteCStringToLogFile(content); |
| 313 #endif | 321 #endif |
| 314 } | 322 } |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 msg.WriteToLogFile(); | 810 msg.WriteToLogFile(); |
| 803 } | 811 } |
| 804 | 812 |
| 805 | 813 |
| 806 bool Logger::IsProfilerPaused() { | 814 bool Logger::IsProfilerPaused() { |
| 807 return profiler_->paused(); | 815 return profiler_->paused(); |
| 808 } | 816 } |
| 809 | 817 |
| 810 | 818 |
| 811 void Logger::PauseProfiler() { | 819 void Logger::PauseProfiler() { |
| 820 if (profiler_->paused()) { |
| 821 return; |
| 822 } |
| 812 profiler_->pause(); | 823 profiler_->pause(); |
| 813 if (FLAG_prof_lazy) { | 824 if (FLAG_prof_lazy) { |
| 814 if (!FLAG_sliding_state_window) ticker_->Stop(); | 825 if (!FLAG_sliding_state_window) ticker_->Stop(); |
| 815 FLAG_log_code = false; | 826 FLAG_log_code = false; |
| 816 // Must be the same message as Log::kDynamicBufferSeal. | 827 // Must be the same message as Log::kDynamicBufferSeal. |
| 817 LOG(UncheckedStringEvent("profiler", "pause")); | 828 LOG(UncheckedStringEvent("profiler", "pause")); |
| 818 } | 829 } |
| 819 } | 830 } |
| 820 | 831 |
| 821 | 832 |
| 822 void Logger::ResumeProfiler() { | 833 void Logger::ResumeProfiler() { |
| 823 if (!Log::IsEnabled()) return; | 834 if (!profiler_->paused() || !Log::IsEnabled()) { |
| 835 return; |
| 836 } |
| 824 if (FLAG_prof_lazy) { | 837 if (FLAG_prof_lazy) { |
| 825 LOG(UncheckedStringEvent("profiler", "resume")); | 838 LOG(UncheckedStringEvent("profiler", "resume")); |
| 826 FLAG_log_code = true; | 839 FLAG_log_code = true; |
| 827 LogCompiledFunctions(); | 840 LogCompiledFunctions(); |
| 828 if (!FLAG_sliding_state_window) ticker_->Start(); | 841 if (!FLAG_sliding_state_window) ticker_->Start(); |
| 829 } | 842 } |
| 830 profiler_->resume(); | 843 profiler_->resume(); |
| 831 } | 844 } |
| 832 | 845 |
| 833 | 846 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 985 } else { | 998 } else { |
| 986 Log::OpenFile(FLAG_logfile); | 999 Log::OpenFile(FLAG_logfile); |
| 987 } | 1000 } |
| 988 } | 1001 } |
| 989 | 1002 |
| 990 current_state_ = &bottom_state_; | 1003 current_state_ = &bottom_state_; |
| 991 | 1004 |
| 992 // as log is initialized early with V8, we can assume that JS execution | 1005 // as log is initialized early with V8, we can assume that JS execution |
| 993 // frames can never reach this point on stack | 1006 // frames can never reach this point on stack |
| 994 int stack_var; | 1007 int stack_var; |
| 995 ticker_ = new Ticker(1, reinterpret_cast<uintptr_t>(&stack_var)); | 1008 ticker_ = new Ticker( |
| 1009 kSamplingIntervalMs, reinterpret_cast<uintptr_t>(&stack_var)); |
| 996 | 1010 |
| 997 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { | 1011 if (FLAG_sliding_state_window && sliding_state_window_ == NULL) { |
| 998 sliding_state_window_ = new SlidingStateWindow(); | 1012 sliding_state_window_ = new SlidingStateWindow(); |
| 999 } | 1013 } |
| 1000 | 1014 |
| 1001 if (FLAG_prof) { | 1015 if (FLAG_prof) { |
| 1002 profiler_ = new Profiler(); | 1016 profiler_ = new Profiler(); |
| 1003 if (!FLAG_prof_auto) | 1017 if (!FLAG_prof_auto) |
| 1004 profiler_->pause(); | 1018 profiler_->pause(); |
| 1005 profiler_->Engage(); | 1019 profiler_->Engage(); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 } else if (previous_->state_ == EXTERNAL) { | 1145 } else if (previous_->state_ == EXTERNAL) { |
| 1132 // We are leaving V8. | 1146 // We are leaving V8. |
| 1133 Heap::Protect(); | 1147 Heap::Protect(); |
| 1134 } | 1148 } |
| 1135 } | 1149 } |
| 1136 #endif | 1150 #endif |
| 1137 } | 1151 } |
| 1138 #endif | 1152 #endif |
| 1139 | 1153 |
| 1140 } } // namespace v8::internal | 1154 } } // namespace v8::internal |
| OLD | NEW |