OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/sampler.h" | 5 #include "src/profiler/sampler.h" |
6 | 6 |
7 #if V8_OS_POSIX && !V8_OS_CYGWIN | 7 #if V8_OS_POSIX && !V8_OS_CYGWIN |
8 | 8 |
9 #define USE_SIGNALS | 9 #define USE_SIGNALS |
10 | 10 |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 | 650 |
651 base::Mutex* SamplerThread::mutex_ = NULL; | 651 base::Mutex* SamplerThread::mutex_ = NULL; |
652 SamplerThread* SamplerThread::instance_ = NULL; | 652 SamplerThread* SamplerThread::instance_ = NULL; |
653 | 653 |
654 | 654 |
655 // | 655 // |
656 // StackTracer implementation | 656 // StackTracer implementation |
657 // | 657 // |
658 DISABLE_ASAN void TickSample::Init(Isolate* isolate, | 658 DISABLE_ASAN void TickSample::Init(Isolate* isolate, |
659 const v8::RegisterState& regs, | 659 const v8::RegisterState& regs, |
660 RecordCEntryFrame record_c_entry_frame) { | 660 RecordCEntryFrame record_c_entry_frame, |
| 661 bool update_stats) { |
661 timestamp = base::TimeTicks::HighResolutionNow(); | 662 timestamp = base::TimeTicks::HighResolutionNow(); |
662 pc = reinterpret_cast<Address>(regs.pc); | 663 pc = reinterpret_cast<Address>(regs.pc); |
663 state = isolate->current_vm_state(); | 664 state = isolate->current_vm_state(); |
| 665 this->update_stats = update_stats; |
664 | 666 |
665 // Avoid collecting traces while doing GC. | 667 // Avoid collecting traces while doing GC. |
666 if (state == GC) return; | 668 if (state == GC) return; |
667 | 669 |
668 Address js_entry_sp = isolate->js_entry_sp(); | 670 Address js_entry_sp = isolate->js_entry_sp(); |
669 if (js_entry_sp == 0) return; // Not executing JS now. | 671 if (js_entry_sp == 0) return; // Not executing JS now. |
670 | 672 |
671 if (pc && IsNoFrameRegion(pc)) { | 673 if (pc && IsNoFrameRegion(pc)) { |
672 pc = 0; | 674 pc = 0; |
673 return; | 675 return; |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 SignalHandler::DecreaseSamplerCount(); | 791 SignalHandler::DecreaseSamplerCount(); |
790 #endif | 792 #endif |
791 base::NoBarrier_AtomicIncrement(&profiling_, -1); | 793 base::NoBarrier_AtomicIncrement(&profiling_, -1); |
792 } | 794 } |
793 | 795 |
794 | 796 |
795 void Sampler::SampleStack(const v8::RegisterState& state) { | 797 void Sampler::SampleStack(const v8::RegisterState& state) { |
796 TickSample* sample = isolate_->cpu_profiler()->StartTickSample(); | 798 TickSample* sample = isolate_->cpu_profiler()->StartTickSample(); |
797 TickSample sample_obj; | 799 TickSample sample_obj; |
798 if (sample == NULL) sample = &sample_obj; | 800 if (sample == NULL) sample = &sample_obj; |
799 sample->Init(isolate_, state, TickSample::kIncludeCEntryFrame); | 801 sample->Init(isolate_, state, TickSample::kIncludeCEntryFrame, true); |
800 if (is_counting_samples_) { | 802 if (is_counting_samples_) { |
801 if (sample->state == JS || sample->state == EXTERNAL) { | 803 if (sample->state == JS || sample->state == EXTERNAL) { |
802 ++js_and_external_sample_count_; | 804 ++js_and_external_sample_count_; |
803 } | 805 } |
804 } | 806 } |
805 Tick(sample); | 807 Tick(sample); |
806 if (sample != &sample_obj) { | 808 if (sample != &sample_obj) { |
807 isolate_->cpu_profiler()->FinishTickSample(); | 809 isolate_->cpu_profiler()->FinishTickSample(); |
808 } | 810 } |
809 } | 811 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 SampleStack(state); | 854 SampleStack(state); |
853 } | 855 } |
854 ResumeThread(profiled_thread); | 856 ResumeThread(profiled_thread); |
855 } | 857 } |
856 | 858 |
857 #endif // USE_SIGNALS | 859 #endif // USE_SIGNALS |
858 | 860 |
859 | 861 |
860 } // namespace internal | 862 } // namespace internal |
861 } // namespace v8 | 863 } // namespace v8 |
OLD | NEW |