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 "include/v8-sampler.h" |
7 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
8 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
9 #include "src/frames-inl.h" | 10 #include "src/frames-inl.h" |
10 #include "src/locked-queue-inl.h" | 11 #include "src/locked-queue-inl.h" |
11 #include "src/log-inl.h" | 12 #include "src/log-inl.h" |
12 #include "src/profiler/cpu-profiler-inl.h" | 13 #include "src/profiler/cpu-profiler-inl.h" |
13 #include "src/vm-state-inl.h" | 14 #include "src/vm-state-inl.h" |
14 | 15 |
15 #include "include/v8-profiler.h" | 16 #include "include/v8-profiler.h" |
16 | 17 |
17 namespace v8 { | 18 namespace v8 { |
18 namespace internal { | 19 namespace internal { |
19 | 20 |
20 static const int kProfilerStackSize = 64 * KB; | 21 static const int kProfilerStackSize = 64 * KB; |
21 | 22 |
22 | 23 |
23 ProfilerEventsProcessor::ProfilerEventsProcessor(ProfileGenerator* generator, | 24 ProfilerEventsProcessor::ProfilerEventsProcessor(ProfileGenerator* generator, |
24 Sampler* sampler, | 25 V8Sampler* sampler, |
25 base::TimeDelta period) | 26 base::TimeDelta period) |
26 : Thread(Thread::Options("v8:ProfEvntProc", kProfilerStackSize)), | 27 : Thread(Thread::Options("v8:ProfEvntProc", kProfilerStackSize)), |
27 generator_(generator), | 28 generator_(generator), |
28 sampler_(sampler), | 29 sampler_(sampler), |
29 running_(1), | 30 running_(1), |
30 period_(period), | 31 period_(period), |
31 last_code_event_id_(0), | 32 last_code_event_id_(0), |
32 last_processed_code_event_id_(0) {} | 33 last_processed_code_event_id_(0) {} |
33 | 34 |
34 | 35 |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 void CpuProfiler::StartProcessorIfNotStarted() { | 452 void CpuProfiler::StartProcessorIfNotStarted() { |
452 if (processor_ != NULL) { | 453 if (processor_ != NULL) { |
453 processor_->AddCurrentStack(isolate_); | 454 processor_->AddCurrentStack(isolate_); |
454 return; | 455 return; |
455 } | 456 } |
456 Logger* logger = isolate_->logger(); | 457 Logger* logger = isolate_->logger(); |
457 // Disable logging when using the new implementation. | 458 // Disable logging when using the new implementation. |
458 saved_is_logging_ = logger->is_logging_; | 459 saved_is_logging_ = logger->is_logging_; |
459 logger->is_logging_ = false; | 460 logger->is_logging_ = false; |
460 generator_ = new ProfileGenerator(profiles_); | 461 generator_ = new ProfileGenerator(profiles_); |
461 Sampler* sampler = logger->sampler(); | 462 // Sampler* sampler = logger->sampler(); |
| 463 V8Sampler* sampler = logger->sampler(); |
462 processor_ = new ProfilerEventsProcessor( | 464 processor_ = new ProfilerEventsProcessor( |
463 generator_, sampler, sampling_interval_); | 465 generator_, sampler, sampling_interval_); |
464 is_profiling_ = true; | 466 is_profiling_ = true; |
465 // Enumerate stuff we already have in the heap. | 467 // Enumerate stuff we already have in the heap. |
466 DCHECK(isolate_->heap()->HasBeenSetUp()); | 468 DCHECK(isolate_->heap()->HasBeenSetUp()); |
467 if (!FLAG_prof_browser_mode) { | 469 if (!FLAG_prof_browser_mode) { |
468 logger->LogCodeObjects(); | 470 logger->LogCodeObjects(); |
469 } | 471 } |
470 logger->LogCompiledFunctions(); | 472 logger->LogCompiledFunctions(); |
471 logger->LogAccessorCallbacks(); | 473 logger->LogAccessorCallbacks(); |
(...skipping 25 matching lines...) Expand all Loading... |
497 } | 499 } |
498 | 500 |
499 | 501 |
500 void CpuProfiler::StopProcessorIfLastProfile(const char* title) { | 502 void CpuProfiler::StopProcessorIfLastProfile(const char* title) { |
501 if (profiles_->IsLastProfile(title)) StopProcessor(); | 503 if (profiles_->IsLastProfile(title)) StopProcessor(); |
502 } | 504 } |
503 | 505 |
504 | 506 |
505 void CpuProfiler::StopProcessor() { | 507 void CpuProfiler::StopProcessor() { |
506 Logger* logger = isolate_->logger(); | 508 Logger* logger = isolate_->logger(); |
507 Sampler* sampler = reinterpret_cast<Sampler*>(logger->ticker_); | 509 // Sampler* sampler = reinterpret_cast<Sampler*>(logger->ticker_); |
| 510 V8Sampler* sampler = reinterpret_cast<V8Sampler*>(logger->ticker_); |
508 is_profiling_ = false; | 511 is_profiling_ = false; |
509 processor_->StopSynchronously(); | 512 processor_->StopSynchronously(); |
510 delete processor_; | 513 delete processor_; |
511 delete generator_; | 514 delete generator_; |
512 processor_ = NULL; | 515 processor_ = NULL; |
513 generator_ = NULL; | 516 generator_ = NULL; |
514 sampler->SetHasProcessingThread(false); | 517 sampler->SetHasProcessingThread(false); |
515 sampler->DecreaseProfilingDepth(); | 518 sampler->DecreaseProfilingDepth(); |
516 logger->is_logging_ = saved_is_logging_; | 519 logger->is_logging_ = saved_is_logging_; |
517 } | 520 } |
518 | 521 |
519 | 522 |
520 void CpuProfiler::LogBuiltins() { | 523 void CpuProfiler::LogBuiltins() { |
521 Builtins* builtins = isolate_->builtins(); | 524 Builtins* builtins = isolate_->builtins(); |
522 DCHECK(builtins->is_initialized()); | 525 DCHECK(builtins->is_initialized()); |
523 for (int i = 0; i < Builtins::builtin_count; i++) { | 526 for (int i = 0; i < Builtins::builtin_count; i++) { |
524 CodeEventsContainer evt_rec(CodeEventRecord::REPORT_BUILTIN); | 527 CodeEventsContainer evt_rec(CodeEventRecord::REPORT_BUILTIN); |
525 ReportBuiltinEventRecord* rec = &evt_rec.ReportBuiltinEventRecord_; | 528 ReportBuiltinEventRecord* rec = &evt_rec.ReportBuiltinEventRecord_; |
526 Builtins::Name id = static_cast<Builtins::Name>(i); | 529 Builtins::Name id = static_cast<Builtins::Name>(i); |
527 rec->start = builtins->builtin(id)->address(); | 530 rec->start = builtins->builtin(id)->address(); |
528 rec->builtin_id = id; | 531 rec->builtin_id = id; |
529 processor_->Enqueue(evt_rec); | 532 processor_->Enqueue(evt_rec); |
530 } | 533 } |
531 } | 534 } |
532 | 535 |
533 | 536 |
534 } // namespace internal | 537 } // namespace internal |
535 } // namespace v8 | 538 } // namespace v8 |
OLD | NEW |