| Index: runtime/vm/profiler_service.cc
|
| diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
|
| index 7ea7d3b129cc138ebf54bb7b7f3494861c74cffb..507cba439aba8fbf16de262dd3754a1d498cb4e7 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;
|
| }
|
| @@ -2202,16 +2196,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;
|
| }
|
|
|
| {
|
| @@ -2221,9 +2212,6 @@ void ProfilerService::PrintJSONImpl(Thread* thread,
|
| profile.Build(thread, filter, tag_order, extra_tags);
|
| profile.PrintJSON(stream);
|
| }
|
| -
|
| - // Enable profile interrupts.
|
| - Profiler::BeginExecution(isolate);
|
| }
|
|
|
|
|
| @@ -2278,24 +2266,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
|
|
|