Index: runtime/vm/profiler_service.cc |
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc |
index 3b8a8cd05a036356a07e8be1691edfbaa0ffa329..f7b877d32314c9425e926c7d15b076243d5a3691 100644 |
--- a/runtime/vm/profiler_service.cc |
+++ b/runtime/vm/profiler_service.cc |
@@ -1217,12 +1217,14 @@ class ProfileBuilder : public ValueObject { |
ProfileBuilder(Thread* thread, |
SampleFilter* filter, |
+ SampleBuffer* sample_buffer, |
Profile::TagOrder tag_order, |
intptr_t extra_tags, |
Profile* profile) |
: thread_(thread), |
vm_isolate_(Dart::vm_isolate()), |
filter_(filter), |
+ sample_buffer_(sample_buffer), |
tag_order_(tag_order), |
extra_tags_(extra_tags), |
profile_(profile), |
@@ -1233,6 +1235,8 @@ class ProfileBuilder : public ValueObject { |
inclusive_tree_(false), |
samples_(NULL), |
info_kind_(kNone) { |
+ ASSERT((sample_buffer_ == Profiler::sample_buffer()) || |
+ (sample_buffer_ == Profiler::allocation_sample_buffer())); |
ASSERT(profile_ != NULL); |
} |
@@ -1284,11 +1288,8 @@ class ProfileBuilder : public ValueObject { |
bool FilterSamples() { |
ScopeTimer sw("ProfileBuilder::FilterSamples", FLAG_trace_profiler); |
- SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
- if (sample_buffer == NULL) { |
- return false; |
- } |
- samples_ = sample_buffer->BuildProcessedSampleBuffer(filter_); |
+ ASSERT(sample_buffer_ != NULL); |
+ samples_ = sample_buffer_->BuildProcessedSampleBuffer(filter_); |
profile_->samples_ = samples_; |
profile_->sample_count_ = samples_->length(); |
return true; |
@@ -2330,6 +2331,7 @@ class ProfileBuilder : public ValueObject { |
Thread* thread_; |
Isolate* vm_isolate_; |
SampleFilter* filter_; |
+ SampleBuffer* sample_buffer_; |
Profile::TagOrder tag_order_; |
intptr_t extra_tags_; |
Profile* profile_; |
@@ -2365,9 +2367,11 @@ Profile::Profile(Isolate* isolate) |
void Profile::Build(Thread* thread, |
SampleFilter* filter, |
+ SampleBuffer* sample_buffer, |
TagOrder tag_order, |
intptr_t extra_tags) { |
- ProfileBuilder builder(thread, filter, tag_order, extra_tags, this); |
+ ProfileBuilder builder(thread, filter, sample_buffer, tag_order, extra_tags, |
+ this); |
builder.Build(); |
} |
@@ -2748,12 +2752,12 @@ void ProfilerService::PrintJSONImpl(Thread* thread, |
Profile::TagOrder tag_order, |
intptr_t extra_tags, |
SampleFilter* filter, |
+ SampleBuffer* sample_buffer, |
bool as_timeline) { |
Isolate* isolate = thread->isolate(); |
// Disable thread interrupts while processing the buffer. |
DisableThreadInterruptsScope dtis(thread); |
- SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
if (sample_buffer == NULL) { |
stream->PrintError(kFeatureDisabled, NULL); |
return; |
@@ -2763,7 +2767,7 @@ void ProfilerService::PrintJSONImpl(Thread* thread, |
StackZone zone(thread); |
HANDLESCOPE(thread); |
Profile profile(isolate); |
- profile.Build(thread, filter, tag_order, extra_tags); |
+ profile.Build(thread, filter, sample_buffer, tag_order, extra_tags); |
if (as_timeline) { |
profile.PrintTimelineJSON(stream); |
} else { |
@@ -2784,10 +2788,7 @@ class NoAllocationSampleFilter : public SampleFilter { |
time_origin_micros, |
time_extent_micros) {} |
- bool FilterSample(Sample* sample) { |
- return !sample->is_allocation_sample() && |
- !sample->is_native_allocation_sample(); |
- } |
+ bool FilterSample(Sample* sample) { return !sample->is_allocation_sample(); } |
}; |
@@ -2801,7 +2802,8 @@ void ProfilerService::PrintJSON(JSONStream* stream, |
NoAllocationSampleFilter filter(isolate->main_port(), Thread::kMutatorTask, |
time_origin_micros, time_extent_micros); |
const bool as_timeline = false; |
- PrintJSONImpl(thread, stream, tag_order, extra_tags, &filter, as_timeline); |
+ PrintJSONImpl(thread, stream, tag_order, extra_tags, &filter, |
+ Profiler::sample_buffer(), as_timeline); |
} |
@@ -2841,7 +2843,8 @@ void ProfilerService::PrintAllocationJSON(JSONStream* stream, |
Thread::kMutatorTask, time_origin_micros, |
time_extent_micros); |
const bool as_timeline = false; |
- PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline); |
+ PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, |
+ Profiler::sample_buffer(), as_timeline); |
} |
@@ -2852,7 +2855,8 @@ void ProfilerService::PrintNativeAllocationJSON(JSONStream* stream, |
Thread* thread = Thread::Current(); |
NativeAllocationSampleFilter filter(time_origin_micros, time_extent_micros); |
const bool as_timeline = false; |
- PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline); |
+ PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, |
+ Profiler::allocation_sample_buffer(), as_timeline); |
} |
@@ -2868,7 +2872,8 @@ void ProfilerService::PrintTimelineJSON(JSONStream* stream, |
NoAllocationSampleFilter filter(isolate->main_port(), thread_task_mask, |
time_origin_micros, time_extent_micros); |
const bool as_timeline = true; |
- PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline); |
+ PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, |
+ Profiler::sample_buffer(), as_timeline); |
} |