Index: runtime/vm/profiler_test.cc |
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc |
index dffcebfaa1addf786c720cf5f7e47ac0db1d5035..08d3980cb74327a8544f11615c85330e43ec050d 100644 |
--- a/runtime/vm/profiler_test.cc |
+++ b/runtime/vm/profiler_test.cc |
@@ -316,217 +316,6 @@ TEST_CASE(Profiler_TrivialRecordAllocation) { |
} |
} |
-#if defined(DART_USE_TCMALLOC) && !defined(PRODUCT) && \ |
- !defined(TARGET_ARCH_DBC) && !defined(HOST_OS_FUCHSIA) |
- |
-DART_NOINLINE static void NativeAllocationSampleHelper(char** result) { |
- ASSERT(result != NULL); |
- *result = static_cast<char*>(malloc(sizeof(char) * 1024)); |
-} |
- |
- |
-ISOLATE_UNIT_TEST_CASE(Profiler_NativeAllocation) { |
- bool enable_malloc_hooks_saved = FLAG_enable_malloc_hooks; |
- FLAG_enable_malloc_hooks = true; |
- |
- MallocHooks::InitOnce(); |
- MallocHooks::ResetStats(); |
- bool stack_trace_collection_enabled = |
- MallocHooks::stack_trace_collection_enabled(); |
- MallocHooks::set_stack_trace_collection_enabled(true); |
- |
- char* result = NULL; |
- const int64_t before_allocations_micros = Dart_TimelineGetMicros(); |
- NativeAllocationSampleHelper(&result); |
- |
- // Disable stack allocation stack trace collection to avoid muddying up |
- // results. |
- MallocHooks::set_stack_trace_collection_enabled(false); |
- const int64_t after_allocations_micros = Dart_TimelineGetMicros(); |
- const int64_t allocation_extent_micros = |
- after_allocations_micros - before_allocations_micros; |
- |
- // Walk the trie and do a sanity check of the allocation values associated |
- // with each node. |
- { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- StackZone zone(thread); |
- HANDLESCOPE(thread); |
- Profile profile(isolate); |
- |
- // Filter for the class in the time range. |
- NativeAllocationSampleFilter filter(before_allocations_micros, |
- allocation_extent_micros); |
- profile.Build(thread, &filter, Profile::kNoTags); |
- // We should have 1 allocation sample. |
- EXPECT_EQ(1, profile.sample_count()); |
- ProfileTrieWalker walker(&profile); |
- |
- // Exclusive code: NativeAllocationSampleHelper -> main. |
- walker.Reset(Profile::kExclusiveCode); |
- // Move down from the root. |
- EXPECT(walker.Down()); |
- EXPECT_SUBSTRING("[Native]", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 1024); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::Dart_TestProfiler_NativeAllocation()", |
- walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCase::Run()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunTest()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunAll()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("main", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(!walker.Down()); |
- |
- // Inclusive code: main -> NativeAllocationSampleHelper. |
- walker.Reset(Profile::kInclusiveCode); |
- // Move down from the root. |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("main", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunAll()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunTest()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCase::Run()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::Dart_TestProfiler_NativeAllocation()", |
- walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_SUBSTRING("[Native]", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 1024); |
- EXPECT(!walker.Down()); |
- |
- // Exclusive function: NativeAllocationSampleHelper -> main. |
- walker.Reset(Profile::kExclusiveFunction); |
- // Move down from the root. |
- EXPECT(walker.Down()); |
- EXPECT_SUBSTRING("[Native]", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 1024); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::Dart_TestProfiler_NativeAllocation()", |
- walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCase::Run()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunTest()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunAll()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("main", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(!walker.Down()); |
- |
- // Inclusive function: main -> NativeAllocationSampleHelper. |
- walker.Reset(Profile::kInclusiveFunction); |
- // Move down from the root. |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("main", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunAll()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCaseBase::RunTest()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::TestCase::Run()", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_STREQ("dart::Dart_TestProfiler_NativeAllocation()", |
- walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 0); |
- EXPECT(walker.Down()); |
- EXPECT_SUBSTRING("[Native]", walker.CurrentName()); |
- EXPECT_EQ(walker.CurrentInclusiveAllocations(), 1024); |
- EXPECT_EQ(walker.CurrentExclusiveAllocations(), 1024); |
- EXPECT(!walker.Down()); |
- } |
- |
- MallocHooks::set_stack_trace_collection_enabled(true); |
- free(result); |
- MallocHooks::set_stack_trace_collection_enabled(false); |
- |
- // Check to see that the native allocation sample associated with the memory |
- // freed above is marked as free and is no longer reported. |
- { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- StackZone zone(thread); |
- HANDLESCOPE(thread); |
- Profile profile(isolate); |
- |
- // Filter for the class in the time range. |
- NativeAllocationSampleFilter filter(before_allocations_micros, |
- allocation_extent_micros); |
- profile.Build(thread, &filter, Profile::kNoTags); |
- // We should have 0 allocation samples since we freed the memory. |
- EXPECT_EQ(0, profile.sample_count()); |
- } |
- |
- // Query with a time filter where no allocations occurred. |
- { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- StackZone zone(thread); |
- HANDLESCOPE(thread); |
- Profile profile(isolate); |
- NativeAllocationSampleFilter filter(Dart_TimelineGetMicros(), 16000); |
- profile.Build(thread, &filter, Profile::kNoTags); |
- // We should have no allocation samples because none occured within |
- // the specified time range. |
- EXPECT_EQ(0, profile.sample_count()); |
- } |
- |
- MallocHooks::set_stack_trace_collection_enabled( |
- stack_trace_collection_enabled); |
- MallocHooks::TearDown(); |
- FLAG_enable_malloc_hooks = enable_malloc_hooks_saved; |
-} |
-#endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT) && |
- // !defined(TARGET_ARCH_DBC) && !defined(HOST_OS_FUCHSIA) |
- |
TEST_CASE(Profiler_ToggleRecordAllocation) { |
DisableNativeProfileScope dnps; |