Index: base/trace_event/winheap_dump_provider_win_unittest.cc |
diff --git a/base/trace_event/winheap_dump_provider_win_unittest.cc b/base/trace_event/winheap_dump_provider_win_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..44d9c1b2be8724ab5af96d32f316a13e7b7551af |
--- /dev/null |
+++ b/base/trace_event/winheap_dump_provider_win_unittest.cc |
@@ -0,0 +1,79 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/trace_event/winheap_dump_provider_win.h" |
+ |
+#include <windows.h> |
+ |
+#include "base/trace_event/memory_dump_session_state.h" |
+#include "base/trace_event/process_memory_dump.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace base { |
+namespace trace_event { |
+ |
+class WinHeapDumpProviderTest : public testing::Test { |
+ public: |
+ bool GetHeapInformation(WinHeapDumpProvider* provider, |
+ WinHeapInfo* heap_info, |
+ const std::set<void*>& block_to_skip) { |
+ return provider->GetHeapInformation(heap_info, block_to_skip); |
+ } |
+}; |
+ |
+TEST_F(WinHeapDumpProviderTest, DumpInto) { |
+ ProcessMemoryDump pmd(make_scoped_refptr(new MemoryDumpSessionState())); |
+ |
+ WinHeapDumpProvider* winheap_dump_provider = |
+ WinHeapDumpProvider::GetInstance(); |
+ ASSERT_NE(reinterpret_cast<WinHeapDumpProvider*>(nullptr), |
+ winheap_dump_provider); |
+ |
+ ASSERT_TRUE(winheap_dump_provider->DumpInto(&pmd)); |
+} |
+ |
+TEST_F(WinHeapDumpProviderTest, GetHeapInformation) { |
+ ProcessMemoryDump pmd(make_scoped_refptr(new MemoryDumpSessionState())); |
+ |
+ WinHeapDumpProvider* winheap_dump_provider = |
+ WinHeapDumpProvider::GetInstance(); |
+ ASSERT_NE(reinterpret_cast<WinHeapDumpProvider*>(nullptr), |
+ winheap_dump_provider); |
+ |
+ HANDLE heap = ::HeapCreate(NULL, 0, 0); |
+ ASSERT_NE(nullptr, heap); |
+ |
+ const size_t kAllocSize = 42; |
+ void* alloc = ::HeapAlloc(heap, 0, kAllocSize); |
+ ASSERT_NE(nullptr, alloc); |
+ |
+ WinHeapInfo heap_info = {0}; |
+ heap_info.heap_id = heap; |
+ std::set<void*> block_to_skip; |
+ |
+ // Put the allocation into the skip list and make sure that the provider |
+ // ignores it. |
+ block_to_skip.insert(alloc); |
+ ASSERT_TRUE( |
+ GetHeapInformation(winheap_dump_provider, &heap_info, block_to_skip)); |
+ EXPECT_EQ(0U, heap_info.block_count); |
+ EXPECT_EQ(0U, heap_info.allocated_size); |
+ // We can't check the committed size here, as it can depend on the version of |
+ // kernel32.dll. |
+ |
+ // Remove the allocation from the skip list and check if it's analysed |
+ // properlyly. |
+ block_to_skip.erase(alloc); |
+ ASSERT_TRUE( |
+ GetHeapInformation(winheap_dump_provider, &heap_info, block_to_skip)); |
+ EXPECT_EQ(1, heap_info.block_count); |
+ EXPECT_EQ(kAllocSize, heap_info.allocated_size); |
+ EXPECT_LT(kAllocSize, heap_info.committed_size); |
+ |
+ EXPECT_TRUE(::HeapFree(heap, 0, alloc)); |
+ EXPECT_EQ(TRUE, ::HeapDestroy(heap)); |
+} |
+ |
+} // namespace trace_event |
+} // namespace base |