OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/tracing/process_metrics_memory_dump_provider.h" | 5 #include "components/tracing/process_metrics_memory_dump_provider.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
| 9 #include <memory> |
| 10 |
9 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
10 #include "base/trace_event/process_memory_dump.h" | 12 #include "base/trace_event/process_memory_dump.h" |
11 #include "base/trace_event/process_memory_maps.h" | 13 #include "base/trace_event/process_memory_maps.h" |
12 #include "base/trace_event/process_memory_totals.h" | 14 #include "base/trace_event/process_memory_totals.h" |
13 #include "base/trace_event/trace_event_argument.h" | 15 #include "base/trace_event/trace_event_argument.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 | 17 |
16 namespace tracing { | 18 namespace tracing { |
17 | 19 |
18 #if defined(OS_LINUX) || defined(OS_ANDROID) | 20 #if defined(OS_LINUX) || defined(OS_ANDROID) |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 ASSERT_TRUE(base::WriteFileDescriptor(fileno(temp_file), smaps_string, | 117 ASSERT_TRUE(base::WriteFileDescriptor(fileno(temp_file), smaps_string, |
116 strlen(smaps_string))); | 118 strlen(smaps_string))); |
117 } | 119 } |
118 | 120 |
119 } // namespace | 121 } // namespace |
120 #endif // defined(OS_LINUX) || defined(OS_ANDROID) | 122 #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
121 | 123 |
122 TEST(ProcessMetricsMemoryDumpProviderTest, DumpRSS) { | 124 TEST(ProcessMetricsMemoryDumpProviderTest, DumpRSS) { |
123 const base::trace_event::MemoryDumpArgs high_detail_args = { | 125 const base::trace_event::MemoryDumpArgs high_detail_args = { |
124 base::trace_event::MemoryDumpLevelOfDetail::DETAILED}; | 126 base::trace_event::MemoryDumpLevelOfDetail::DETAILED}; |
125 scoped_ptr<ProcessMetricsMemoryDumpProvider> pmtdp( | 127 std::unique_ptr<ProcessMetricsMemoryDumpProvider> pmtdp( |
126 new ProcessMetricsMemoryDumpProvider(base::kNullProcessId)); | 128 new ProcessMetricsMemoryDumpProvider(base::kNullProcessId)); |
127 scoped_ptr<base::trace_event::ProcessMemoryDump> pmd_before( | 129 std::unique_ptr<base::trace_event::ProcessMemoryDump> pmd_before( |
128 new base::trace_event::ProcessMemoryDump(nullptr)); | 130 new base::trace_event::ProcessMemoryDump(nullptr)); |
129 scoped_ptr<base::trace_event::ProcessMemoryDump> pmd_after( | 131 std::unique_ptr<base::trace_event::ProcessMemoryDump> pmd_after( |
130 new base::trace_event::ProcessMemoryDump(nullptr)); | 132 new base::trace_event::ProcessMemoryDump(nullptr)); |
131 | 133 |
132 ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing = 1024; | 134 ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing = 1024; |
133 pmtdp->OnMemoryDump(high_detail_args, pmd_before.get()); | 135 pmtdp->OnMemoryDump(high_detail_args, pmd_before.get()); |
134 | 136 |
135 // Pretend that the RSS of the process increased of +1M. | 137 // Pretend that the RSS of the process increased of +1M. |
136 const size_t kAllocSize = 1048576; | 138 const size_t kAllocSize = 1048576; |
137 ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing += kAllocSize; | 139 ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing += kAllocSize; |
138 | 140 |
139 pmtdp->OnMemoryDump(high_detail_args, pmd_after.get()); | 141 pmtdp->OnMemoryDump(high_detail_args, pmd_after.get()); |
(...skipping 17 matching lines...) Expand all Loading... |
157 TEST(ProcessMetricsMemoryDumpProviderTest, ParseProcSmaps) { | 159 TEST(ProcessMetricsMemoryDumpProviderTest, ParseProcSmaps) { |
158 const uint32_t kProtR = | 160 const uint32_t kProtR = |
159 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsRead; | 161 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsRead; |
160 const uint32_t kProtW = | 162 const uint32_t kProtW = |
161 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsWrite; | 163 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsWrite; |
162 const uint32_t kProtX = | 164 const uint32_t kProtX = |
163 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsExec; | 165 base::trace_event::ProcessMemoryMaps::VMRegion::kProtectionFlagsExec; |
164 const base::trace_event::MemoryDumpArgs dump_args = { | 166 const base::trace_event::MemoryDumpArgs dump_args = { |
165 base::trace_event::MemoryDumpLevelOfDetail::DETAILED}; | 167 base::trace_event::MemoryDumpLevelOfDetail::DETAILED}; |
166 | 168 |
167 scoped_ptr<ProcessMetricsMemoryDumpProvider> pmmdp( | 169 std::unique_ptr<ProcessMetricsMemoryDumpProvider> pmmdp( |
168 new ProcessMetricsMemoryDumpProvider(base::kNullProcessId)); | 170 new ProcessMetricsMemoryDumpProvider(base::kNullProcessId)); |
169 | 171 |
170 // Emulate an empty /proc/self/smaps. | 172 // Emulate an empty /proc/self/smaps. |
171 base::trace_event::ProcessMemoryDump pmd_invalid(nullptr /* session_state */); | 173 base::trace_event::ProcessMemoryDump pmd_invalid(nullptr /* session_state */); |
172 base::ScopedFILE empty_file(OpenFile(base::FilePath("/dev/null"), "r")); | 174 base::ScopedFILE empty_file(OpenFile(base::FilePath("/dev/null"), "r")); |
173 ASSERT_TRUE(empty_file.get()); | 175 ASSERT_TRUE(empty_file.get()); |
174 ProcessMetricsMemoryDumpProvider::proc_smaps_for_testing = empty_file.get(); | 176 ProcessMetricsMemoryDumpProvider::proc_smaps_for_testing = empty_file.get(); |
175 pmmdp->OnMemoryDump(dump_args, &pmd_invalid); | 177 pmmdp->OnMemoryDump(dump_args, &pmd_invalid); |
176 ASSERT_FALSE(pmd_invalid.has_process_mmaps()); | 178 ASSERT_FALSE(pmd_invalid.has_process_mmaps()); |
177 | 179 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 EXPECT_EQ(32 * 1024UL, regions_2[0].byte_stats_proportional_resident); | 225 EXPECT_EQ(32 * 1024UL, regions_2[0].byte_stats_proportional_resident); |
224 EXPECT_EQ(16 * 1024UL, regions_2[0].byte_stats_shared_clean_resident); | 226 EXPECT_EQ(16 * 1024UL, regions_2[0].byte_stats_shared_clean_resident); |
225 EXPECT_EQ(12 * 1024UL, regions_2[0].byte_stats_shared_dirty_resident); | 227 EXPECT_EQ(12 * 1024UL, regions_2[0].byte_stats_shared_dirty_resident); |
226 EXPECT_EQ(8 * 1024UL, regions_2[0].byte_stats_private_clean_resident); | 228 EXPECT_EQ(8 * 1024UL, regions_2[0].byte_stats_private_clean_resident); |
227 EXPECT_EQ(4 * 1024UL, regions_2[0].byte_stats_private_dirty_resident); | 229 EXPECT_EQ(4 * 1024UL, regions_2[0].byte_stats_private_dirty_resident); |
228 EXPECT_EQ(0 * 1024UL, regions_2[0].byte_stats_swapped); | 230 EXPECT_EQ(0 * 1024UL, regions_2[0].byte_stats_swapped); |
229 } | 231 } |
230 #endif // defined(OS_LINUX) || defined(OS_ANDROID) | 232 #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
231 | 233 |
232 } // namespace tracing | 234 } // namespace tracing |
OLD | NEW |