| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/profiler/cpu-profiler.h" | 5 #include "src/profiler/cpu-profiler.h" | 
| 6 | 6 | 
| 7 #include "src/debug/debug.h" | 7 #include "src/debug/debug.h" | 
| 8 #include "src/deoptimizer.h" | 8 #include "src/deoptimizer.h" | 
| 9 #include "src/frames-inl.h" | 9 #include "src/frames-inl.h" | 
| 10 #include "src/locked-queue-inl.h" | 10 #include "src/locked-queue-inl.h" | 
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 319     logger->LogCodeObjects(); | 319     logger->LogCodeObjects(); | 
| 320   } | 320   } | 
| 321   logger->LogCompiledFunctions(); | 321   logger->LogCompiledFunctions(); | 
| 322   logger->LogAccessorCallbacks(); | 322   logger->LogAccessorCallbacks(); | 
| 323   LogBuiltins(); | 323   LogBuiltins(); | 
| 324   // Enable stack sampling. | 324   // Enable stack sampling. | 
| 325   processor_->AddCurrentStack(isolate_); | 325   processor_->AddCurrentStack(isolate_); | 
| 326   processor_->StartSynchronously(); | 326   processor_->StartSynchronously(); | 
| 327 } | 327 } | 
| 328 | 328 | 
| 329 |  | 
| 330 CpuProfile* CpuProfiler::StopProfiling(const char* title) { | 329 CpuProfile* CpuProfiler::StopProfiling(const char* title) { | 
| 331   if (!is_profiling_) return nullptr; | 330   if (!is_profiling_) return nullptr; | 
| 332   StopProcessorIfLastProfile(title); | 331   StopProcessorIfLastProfile(title); | 
| 333   CpuProfile* result = profiles_->StopProfiling(title); | 332   return profiles_->StopProfiling(title); | 
| 334   if (result) { |  | 
| 335     result->Print(); |  | 
| 336   } |  | 
| 337   return result; |  | 
| 338 } | 333 } | 
| 339 | 334 | 
| 340 |  | 
| 341 CpuProfile* CpuProfiler::StopProfiling(String* title) { | 335 CpuProfile* CpuProfiler::StopProfiling(String* title) { | 
| 342   if (!is_profiling_) return nullptr; | 336   return StopProfiling(profiles_->GetName(title)); | 
| 343   const char* profile_title = profiles_->GetName(title); |  | 
| 344   StopProcessorIfLastProfile(profile_title); |  | 
| 345   return profiles_->StopProfiling(profile_title); |  | 
| 346 } | 337 } | 
| 347 | 338 | 
| 348 |  | 
| 349 void CpuProfiler::StopProcessorIfLastProfile(const char* title) { | 339 void CpuProfiler::StopProcessorIfLastProfile(const char* title) { | 
| 350   if (profiles_->IsLastProfile(title)) { | 340   if (!profiles_->IsLastProfile(title)) return; | 
| 351     StopProcessor(); | 341   StopProcessor(); | 
| 352   } |  | 
| 353 } | 342 } | 
| 354 | 343 | 
| 355 |  | 
| 356 void CpuProfiler::StopProcessor() { | 344 void CpuProfiler::StopProcessor() { | 
| 357   Logger* logger = isolate_->logger(); | 345   Logger* logger = isolate_->logger(); | 
| 358   is_profiling_ = false; | 346   is_profiling_ = false; | 
| 359   isolate_->set_is_profiling(false); | 347   isolate_->set_is_profiling(false); | 
| 360   ProfilerListener* profiler_listener = logger->profiler_listener(); | 348   ProfilerListener* profiler_listener = logger->profiler_listener(); | 
| 361   profiler_listener->RemoveObserver(this); | 349   profiler_listener->RemoveObserver(this); | 
| 362   processor_->StopSynchronously(); | 350   processor_->StopSynchronously(); | 
| 363   logger->TearDownProfilerListener(); | 351   logger->TearDownProfilerListener(); | 
| 364   processor_.reset(); | 352   processor_.reset(); | 
| 365   generator_.reset(); | 353   generator_.reset(); | 
| 366   logger->is_logging_ = saved_is_logging_; | 354   logger->is_logging_ = saved_is_logging_; | 
| 367 } | 355 } | 
| 368 | 356 | 
| 369 | 357 | 
| 370 void CpuProfiler::LogBuiltins() { | 358 void CpuProfiler::LogBuiltins() { | 
| 371   Builtins* builtins = isolate_->builtins(); | 359   Builtins* builtins = isolate_->builtins(); | 
| 372   DCHECK(builtins->is_initialized()); | 360   DCHECK(builtins->is_initialized()); | 
| 373   for (int i = 0; i < Builtins::builtin_count; i++) { | 361   for (int i = 0; i < Builtins::builtin_count; i++) { | 
| 374     CodeEventsContainer evt_rec(CodeEventRecord::REPORT_BUILTIN); | 362     CodeEventsContainer evt_rec(CodeEventRecord::REPORT_BUILTIN); | 
| 375     ReportBuiltinEventRecord* rec = &evt_rec.ReportBuiltinEventRecord_; | 363     ReportBuiltinEventRecord* rec = &evt_rec.ReportBuiltinEventRecord_; | 
| 376     Builtins::Name id = static_cast<Builtins::Name>(i); | 364     Builtins::Name id = static_cast<Builtins::Name>(i); | 
| 377     rec->start = builtins->builtin(id)->address(); | 365     rec->start = builtins->builtin(id)->address(); | 
| 378     rec->builtin_id = id; | 366     rec->builtin_id = id; | 
| 379     processor_->Enqueue(evt_rec); | 367     processor_->Enqueue(evt_rec); | 
| 380   } | 368   } | 
| 381 } | 369 } | 
| 382 | 370 | 
| 383 }  // namespace internal | 371 }  // namespace internal | 
| 384 }  // namespace v8 | 372 }  // namespace v8 | 
| OLD | NEW | 
|---|