Index: src/cpu-profiler.cc |
diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc |
index 7387a4c4f88345712a68ba6a705dcda530de3272..bc53c6897aea5eba5ff8357504a9a71a58480d40 100644 |
--- a/src/cpu-profiler.cc |
+++ b/src/cpu-profiler.cc |
@@ -331,6 +331,27 @@ TickSample* CpuProfiler::TickSampleEvent(Isolate* isolate) { |
} |
+void CpuProfiler::DeleteAllProfiles() { |
+ ASSERT(Isolate::Current()->cpu_profiler() != NULL); |
+ if (is_profiling()) |
+ Isolate::Current()->cpu_profiler()->StopProcessor(); |
+ Isolate::Current()->cpu_profiler()->ResetProfiles(); |
+} |
+ |
+ |
+void CpuProfiler::DeleteProfile(CpuProfile* profile) { |
+ ASSERT(Isolate::Current()->cpu_profiler() != NULL); |
+ Isolate::Current()->cpu_profiler()->profiles_->RemoveProfile(profile); |
+ delete profile; |
+} |
+ |
+ |
+bool CpuProfiler::HasDetachedProfiles() { |
+ ASSERT(Isolate::Current()->cpu_profiler() != NULL); |
+ return Isolate::Current()->cpu_profiler()->profiles_->HasDetachedProfiles(); |
+} |
+ |
+ |
void CpuProfiler::CallbackEvent(String* name, Address entry_point) { |
Isolate::Current()->cpu_profiler()->processor_->CallbackCreateEvent( |
Logger::CALLBACK_TAG, CodeEntry::kEmptyNamePrefix, name, entry_point); |
@@ -452,6 +473,11 @@ CpuProfiler::~CpuProfiler() { |
} |
+void CpuProfiler::ResetProfiles() { |
+ delete profiles_; |
+ profiles_ = new CpuProfilesCollection(); |
+} |
+ |
void CpuProfiler::StartCollectingProfile(const char* title) { |
if (profiles_->StartProfiling(title, next_profile_uid_++)) { |
StartProcessorIfNotStarted(); |
@@ -521,22 +547,25 @@ CpuProfile* CpuProfiler::StopCollectingProfile(Object* security_token, |
void CpuProfiler::StopProcessorIfLastProfile(const char* title) { |
- if (profiles_->IsLastProfile(title)) { |
- Sampler* sampler = reinterpret_cast<Sampler*>(LOGGER->ticker_); |
- sampler->DecreaseProfilingDepth(); |
- if (need_to_stop_sampler_) { |
- sampler->Stop(); |
- need_to_stop_sampler_ = false; |
- } |
- processor_->Stop(); |
- processor_->Join(); |
- delete processor_; |
- delete generator_; |
- processor_ = NULL; |
- NoBarrier_Store(&is_profiling_, false); |
- generator_ = NULL; |
- LOGGER->logging_nesting_ = saved_logging_nesting_; |
+ if (profiles_->IsLastProfile(title)) StopProcessor(); |
+} |
+ |
+ |
+void CpuProfiler::StopProcessor() { |
+ Sampler* sampler = reinterpret_cast<Sampler*>(LOGGER->ticker_); |
+ sampler->DecreaseProfilingDepth(); |
+ if (need_to_stop_sampler_) { |
+ sampler->Stop(); |
+ need_to_stop_sampler_ = false; |
} |
+ processor_->Stop(); |
+ processor_->Join(); |
+ delete processor_; |
+ delete generator_; |
+ processor_ = NULL; |
+ NoBarrier_Store(&is_profiling_, false); |
+ generator_ = NULL; |
+ LOGGER->logging_nesting_ = saved_logging_nesting_; |
} |
} } // namespace v8::internal |