Index: runtime/vm/profiler_service.cc |
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc |
index 38118a60c8e405b2e025fa18f3f2e947338bb066..d59108ba3d42efafbd79e80c9c0d15c7abaa3d7f 100644 |
--- a/runtime/vm/profiler_service.cc |
+++ b/runtime/vm/profiler_service.cc |
@@ -1051,13 +1051,7 @@ class ProfileBuilder : public ValueObject { |
void FilterSamples() { |
ScopeTimer sw("ProfileBuilder::FilterSamples", FLAG_trace_profiler); |
- Isolate* isolate = thread_->isolate(); |
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex()); |
- IsolateProfilerData* profiler_data = isolate->profiler_data(); |
- if (profiler_data == NULL) { |
- return; |
- } |
- SampleBuffer* sample_buffer = profiler_data->sample_buffer(); |
+ SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
if (sample_buffer == NULL) { |
return; |
} |
@@ -2219,16 +2213,13 @@ void ProfilerService::PrintJSONImpl(Thread* thread, |
intptr_t extra_tags, |
SampleFilter* filter) { |
Isolate* isolate = thread->isolate(); |
- // Disable profile interrupts while processing the buffer. |
- Profiler::EndExecution(isolate); |
+ // Disable thread interrupts while processing the buffer. |
+ DisableThreadInterruptsScope dtis(thread); |
- { |
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex()); |
- IsolateProfilerData* profiler_data = isolate->profiler_data(); |
- if (profiler_data == NULL) { |
- stream->PrintError(kFeatureDisabled, NULL); |
- return; |
- } |
+ SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
+ if (sample_buffer == NULL) { |
+ stream->PrintError(kFeatureDisabled, NULL); |
+ return; |
} |
{ |
@@ -2238,9 +2229,6 @@ void ProfilerService::PrintJSONImpl(Thread* thread, |
profile.Build(thread, filter, tag_order, extra_tags); |
profile.PrintJSON(stream); |
} |
- |
- // Enable profile interrupts. |
- Profiler::BeginExecution(isolate); |
} |
@@ -2295,24 +2283,19 @@ void ProfilerService::PrintAllocationJSON(JSONStream* stream, |
void ProfilerService::ClearSamples() { |
- Isolate* isolate = Isolate::Current(); |
- |
- // Disable profile interrupts while processing the buffer. |
- Profiler::EndExecution(isolate); |
- |
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex()); |
- IsolateProfilerData* profiler_data = isolate->profiler_data(); |
- if (profiler_data == NULL) { |
+ SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
+ if (sample_buffer == NULL) { |
return; |
} |
- SampleBuffer* sample_buffer = profiler_data->sample_buffer(); |
- ASSERT(sample_buffer != NULL); |
+ |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
+ |
+ // Disable thread interrupts while processing the buffer. |
+ DisableThreadInterruptsScope dtis(thread); |
ClearProfileVisitor clear_profile(isolate); |
sample_buffer->VisitSamples(&clear_profile); |
- |
- // Enable profile interrupts. |
- Profiler::BeginExecution(isolate); |
} |
} // namespace dart |