Index: runtime/vm/profiler_service.cc |
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc |
index 5290e0697d0be85c47e5d1afba05d6069c55d92d..8b9bee9489e861ece363d122e87e3e01413d9711 100644 |
--- a/runtime/vm/profiler_service.cc |
+++ b/runtime/vm/profiler_service.cc |
@@ -2670,16 +2670,19 @@ void ProfilerService::PrintJSONImpl(Thread* thread, |
class NoAllocationSampleFilter : public SampleFilter { |
public: |
- NoAllocationSampleFilter(Isolate* isolate, |
+ NoAllocationSampleFilter(Dart_Port port, |
intptr_t thread_task_mask, |
int64_t time_origin_micros, |
int64_t time_extent_micros) |
- : SampleFilter(isolate, |
+ : SampleFilter(port, |
thread_task_mask, |
time_origin_micros, |
time_extent_micros) {} |
- bool FilterSample(Sample* sample) { return !sample->is_allocation_sample(); } |
+ bool FilterSample(Sample* sample) { |
+ return !sample->is_allocation_sample() && |
+ !sample->is_native_allocation_sample(); |
+ } |
}; |
@@ -2690,7 +2693,7 @@ void ProfilerService::PrintJSON(JSONStream* stream, |
int64_t time_extent_micros) { |
Thread* thread = Thread::Current(); |
Isolate* isolate = thread->isolate(); |
- NoAllocationSampleFilter filter(isolate, Thread::kMutatorTask, |
+ 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); |
@@ -2699,12 +2702,12 @@ void ProfilerService::PrintJSON(JSONStream* stream, |
class ClassAllocationSampleFilter : public SampleFilter { |
public: |
- ClassAllocationSampleFilter(Isolate* isolate, |
+ ClassAllocationSampleFilter(Dart_Port port, |
const Class& cls, |
intptr_t thread_task_mask, |
int64_t time_origin_micros, |
int64_t time_extent_micros) |
- : SampleFilter(isolate, |
+ : SampleFilter(port, |
thread_task_mask, |
time_origin_micros, |
time_extent_micros), |
@@ -2722,6 +2725,21 @@ class ClassAllocationSampleFilter : public SampleFilter { |
}; |
+class NativeAllocationSampleFilter : public SampleFilter { |
+ public: |
+ NativeAllocationSampleFilter(intptr_t thread_task_mask, |
+ int64_t time_origin_micros, |
+ int64_t time_extent_micros) |
+ : SampleFilter(ILLEGAL_PORT, |
+ thread_task_mask, |
+ time_origin_micros, |
+ time_extent_micros) {} |
+ bool FilterSample(Sample* sample) { |
+ return sample->is_native_allocation_sample(); |
+ } |
+}; |
+ |
+ |
void ProfilerService::PrintAllocationJSON(JSONStream* stream, |
Profile::TagOrder tag_order, |
const Class& cls, |
@@ -2729,8 +2747,24 @@ void ProfilerService::PrintAllocationJSON(JSONStream* stream, |
int64_t time_extent_micros) { |
Thread* thread = Thread::Current(); |
Isolate* isolate = thread->isolate(); |
- ClassAllocationSampleFilter filter(isolate, cls, Thread::kMutatorTask, |
- time_origin_micros, time_extent_micros); |
+ ClassAllocationSampleFilter filter(isolate->main_port(), cls, |
+ Thread::kMutatorTask, time_origin_micros, |
+ time_extent_micros); |
+ const bool as_timeline = false; |
+ PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline); |
+} |
+ |
+ |
+void ProfilerService::PrintNativeAllocationJSON(JSONStream* stream, |
+ Profile::TagOrder tag_order, |
+ int64_t time_origin_micros, |
+ int64_t time_extent_micros) { |
+ Thread* thread = Thread::Current(); |
+ const intptr_t thread_task_mask = Thread::kMutatorTask | |
+ Thread::kCompilerTask | |
+ Thread::kSweeperTask | Thread::kMarkerTask; |
+ NativeAllocationSampleFilter filter(thread_task_mask, time_origin_micros, |
+ time_extent_micros); |
const bool as_timeline = false; |
PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline); |
} |
@@ -2745,8 +2779,8 @@ void ProfilerService::PrintTimelineJSON(JSONStream* stream, |
const intptr_t thread_task_mask = Thread::kMutatorTask | |
Thread::kCompilerTask | |
Thread::kSweeperTask | Thread::kMarkerTask; |
- NoAllocationSampleFilter filter(isolate, thread_task_mask, time_origin_micros, |
- time_extent_micros); |
+ 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); |
} |