Index: base/trace_event/process_memory_dump_unittest.cc |
diff --git a/base/trace_event/process_memory_dump_unittest.cc b/base/trace_event/process_memory_dump_unittest.cc |
index 1e1fbc69cf91cab4262c4be1522e2e70705954b6..132bb475bd3a10f642ba544b3afe6df23228c928 100644 |
--- a/base/trace_event/process_memory_dump_unittest.cc |
+++ b/base/trace_event/process_memory_dump_unittest.cc |
@@ -4,7 +4,8 @@ |
#include "base/trace_event/process_memory_dump.h" |
-#include "base/memory/scoped_ptr.h" |
+#include "base/memory/aligned_memory.h" |
+#include "base/process/process_metrics.h" |
#include "base/trace_event/memory_allocator_dump_guid.h" |
#include "base/trace_event/trace_event_argument.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -154,5 +155,28 @@ TEST(ProcessMemoryDumpTest, Suballocations) { |
pmd.reset(); |
} |
+#if defined(COUNT_RESIDENT_BYTES_SUPPORTED) |
+TEST(ProcessMemoryDumpTest, CountResidentBytes) { |
+ const size_t page_size = base::GetPageSize(); |
+ |
+ // Allocate few page of dirty memory and check if it is resident. |
+ const size_t size1 = 5 * page_size; |
+ scoped_ptr<char, base::AlignedFreeDeleter> memory1( |
+ static_cast<char*>(base::AlignedAlloc(size1, page_size))); |
+ memset(memory1.get(), 0, size1); |
+ size_t res1 = ProcessMemoryDump::CountResidentBytes(memory1.get(), size1); |
+ ASSERT_EQ(res1, size1); |
+ |
+ // Allocate a large memory segment (>32Mib). |
+ const size_t kVeryLargeMemorySize = 34 * 1024 * 1024; |
+ scoped_ptr<char, base::AlignedFreeDeleter> memory2( |
+ static_cast<char*>(base::AlignedAlloc(kVeryLargeMemorySize, page_size))); |
+ memset(memory2.get(), 0, kVeryLargeMemorySize); |
+ size_t res2 = ProcessMemoryDump::CountResidentBytes(memory2.get(), |
+ kVeryLargeMemorySize); |
+ ASSERT_EQ(res2, kVeryLargeMemorySize); |
+} |
+#endif // defined(COUNT_RESIDENT_BYTES_SUPPORTED) |
+ |
} // namespace trace_event |
} // namespace base |