Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: base/process/process_metrics_unittest.cc

Issue 2558043007: Fix free memory calculation. (Closed)
Patch Set: Fix comment formatting. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/process/process_metrics.h" 5 #include "base/process/process_metrics.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <sstream> 10 #include <sstream>
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 "Inactive: 21221496 kB\n" 99 "Inactive: 21221496 kB\n"
100 "Active(anon): 5674352 kB\n" 100 "Active(anon): 5674352 kB\n"
101 "Inactive(anon): 633992 kB\n"; 101 "Inactive(anon): 633992 kB\n";
102 EXPECT_FALSE(ParseProcMeminfo(invalid_input1, &meminfo)); 102 EXPECT_FALSE(ParseProcMeminfo(invalid_input1, &meminfo));
103 EXPECT_FALSE(ParseProcMeminfo(invalid_input2, &meminfo)); 103 EXPECT_FALSE(ParseProcMeminfo(invalid_input2, &meminfo));
104 EXPECT_FALSE(ParseProcMeminfo(invalid_input3, &meminfo)); 104 EXPECT_FALSE(ParseProcMeminfo(invalid_input3, &meminfo));
105 105
106 std::string valid_input1 = 106 std::string valid_input1 =
107 "MemTotal: 3981504 kB\n" 107 "MemTotal: 3981504 kB\n"
108 "MemFree: 140764 kB\n" 108 "MemFree: 140764 kB\n"
109 "MemAvailable: 2746720 kB\n"
Primiano Tucci (use gerrit) 2017/02/15 11:18:33 since this is not avialable on all kernels we supp
Michael K. (Yandex Team) 2017/02/17 13:38:48 When MemAvailable is absent, meminfo.available is
Primiano Tucci (use gerrit) 2017/02/20 14:13:27 I want to check that when we are in kernels that d
Michael K. (Yandex Team) 2017/02/20 14:33:13 Acknowledged.
Primiano Tucci (use gerrit) 2017/03/08 12:36:41 I might be missing something but... where did this
Michael K. (Yandex Team) 2017/03/09 07:21:15 See the new SysInfoTest.AmountOfAvailablePhysicalM
Primiano Tucci (use gerrit) 2017/03/09 10:24:03 The problem of that test you wrote is that what co
Michael K. (Yandex Team) 2017/03/09 10:40:56 Not exactly. See below.
109 "Buffers: 116480 kB\n" 110 "Buffers: 116480 kB\n"
110 "Cached: 406160 kB\n" 111 "Cached: 406160 kB\n"
111 "SwapCached: 21304 kB\n" 112 "SwapCached: 21304 kB\n"
112 "Active: 3152040 kB\n" 113 "Active: 3152040 kB\n"
113 "Inactive: 472856 kB\n" 114 "Inactive: 472856 kB\n"
114 "Active(anon): 2972352 kB\n" 115 "Active(anon): 2972352 kB\n"
115 "Inactive(anon): 270108 kB\n" 116 "Inactive(anon): 270108 kB\n"
116 "Active(file): 179688 kB\n" 117 "Active(file): 179688 kB\n"
117 "Inactive(file): 202748 kB\n" 118 "Inactive(file): 202748 kB\n"
118 "Unevictable: 0 kB\n" 119 "Unevictable: 0 kB\n"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 "VmallocTotal: 3874808 kB\n" 165 "VmallocTotal: 3874808 kB\n"
165 "VmallocUsed: 1416 kB\n" 166 "VmallocUsed: 1416 kB\n"
166 "VmallocChunk: 3872908 kB\n" 167 "VmallocChunk: 3872908 kB\n"
167 "HugePages_Total: 0\n" 168 "HugePages_Total: 0\n"
168 "HugePages_Free: 0\n" 169 "HugePages_Free: 0\n"
169 "Hugepagesize: 4096 kB\n"; 170 "Hugepagesize: 4096 kB\n";
170 171
171 EXPECT_TRUE(ParseProcMeminfo(valid_input1, &meminfo)); 172 EXPECT_TRUE(ParseProcMeminfo(valid_input1, &meminfo));
172 EXPECT_EQ(meminfo.total, 3981504); 173 EXPECT_EQ(meminfo.total, 3981504);
173 EXPECT_EQ(meminfo.free, 140764); 174 EXPECT_EQ(meminfo.free, 140764);
175 EXPECT_EQ(meminfo.available, 2746720);
174 EXPECT_EQ(meminfo.buffers, 116480); 176 EXPECT_EQ(meminfo.buffers, 116480);
175 EXPECT_EQ(meminfo.cached, 406160); 177 EXPECT_EQ(meminfo.cached, 406160);
176 EXPECT_EQ(meminfo.active_anon, 2972352); 178 EXPECT_EQ(meminfo.active_anon, 2972352);
177 EXPECT_EQ(meminfo.active_file, 179688); 179 EXPECT_EQ(meminfo.active_file, 179688);
178 EXPECT_EQ(meminfo.inactive_anon, 270108); 180 EXPECT_EQ(meminfo.inactive_anon, 270108);
179 EXPECT_EQ(meminfo.inactive_file, 202748); 181 EXPECT_EQ(meminfo.inactive_file, 202748);
180 EXPECT_EQ(meminfo.swap_total, 5832280); 182 EXPECT_EQ(meminfo.swap_total, 5832280);
181 EXPECT_EQ(meminfo.swap_free, 3672368); 183 EXPECT_EQ(meminfo.swap_free, 3672368);
182 EXPECT_EQ(meminfo.dirty, 184); 184 EXPECT_EQ(meminfo.dirty, 184);
185 EXPECT_EQ(meminfo.reclaimable, 30936);
183 #if defined(OS_CHROMEOS) 186 #if defined(OS_CHROMEOS)
184 EXPECT_EQ(meminfo.shmem, 140204); 187 EXPECT_EQ(meminfo.shmem, 140204);
185 EXPECT_EQ(meminfo.slab, 54212); 188 EXPECT_EQ(meminfo.slab, 54212);
186 #endif 189 #endif
187 EXPECT_TRUE(ParseProcMeminfo(valid_input2, &meminfo)); 190 EXPECT_TRUE(ParseProcMeminfo(valid_input2, &meminfo));
188 EXPECT_EQ(meminfo.total, 255908); 191 EXPECT_EQ(meminfo.total, 255908);
189 EXPECT_EQ(meminfo.free, 69936); 192 EXPECT_EQ(meminfo.free, 69936);
190 EXPECT_EQ(meminfo.buffers, 15812); 193 EXPECT_EQ(meminfo.buffers, 15812);
191 EXPECT_EQ(meminfo.cached, 115124); 194 EXPECT_EQ(meminfo.cached, 115124);
192 EXPECT_EQ(meminfo.swap_total, 524280); 195 EXPECT_EQ(meminfo.swap_total, 524280);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 337
335 thread2.Stop(); 338 thread2.Stop();
336 EXPECT_GE(metrics->GetCPUUsage(), 0.0); 339 EXPECT_GE(metrics->GetCPUUsage(), 0.0);
337 340
338 thread3.Stop(); 341 thread3.Stop();
339 EXPECT_GE(metrics->GetCPUUsage(), 0.0); 342 EXPECT_GE(metrics->GetCPUUsage(), 0.0);
340 } 343 }
341 344
342 #endif // defined(OS_LINUX) || defined(OS_CHROMEOS) 345 #endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
343 346
344 #if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \ 347 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) || \
345 defined(OS_LINUX) || defined(OS_ANDROID) 348 defined(OS_LINUX) || defined(OS_ANDROID)
346 TEST(SystemMetrics2Test, GetSystemMemoryInfo) { 349 TEST(SystemMetrics2Test, GetSystemMemoryInfo) {
347 SystemMemoryInfoKB info; 350 SystemMemoryInfoKB info;
348 EXPECT_TRUE(GetSystemMemoryInfo(&info)); 351 EXPECT_TRUE(GetSystemMemoryInfo(&info));
349 352
350 // Ensure each field received a value. 353 // Ensure each field received a value.
351 EXPECT_GT(info.total, 0); 354 EXPECT_GT(info.total, 0);
355 #if defined(OS_WIN)
356 EXPECT_GT(info.available, 0);
357 EXPECT_GT(info.free + info.zero, 0);
358 #else
352 EXPECT_GT(info.free, 0); 359 EXPECT_GT(info.free, 0);
360 #endif
353 #if defined(OS_LINUX) || defined(OS_ANDROID) 361 #if defined(OS_LINUX) || defined(OS_ANDROID)
354 EXPECT_GT(info.buffers, 0); 362 EXPECT_GT(info.buffers, 0);
355 EXPECT_GT(info.cached, 0); 363 EXPECT_GT(info.cached, 0);
356 EXPECT_GT(info.active_anon, 0); 364 EXPECT_GT(info.active_anon, 0);
357 EXPECT_GT(info.inactive_anon, 0); 365 EXPECT_GT(info.inactive_anon, 0);
358 EXPECT_GT(info.active_file, 0); 366 EXPECT_GT(info.active_file, 0);
359 EXPECT_GT(info.inactive_file, 0); 367 EXPECT_GT(info.inactive_file, 0);
360 #endif // defined(OS_LINUX) || defined(OS_ANDROID) 368 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
361 369
362 // All the values should be less than the total amount of memory. 370 // All the values should be less than the total amount of memory.
363 EXPECT_LT(info.free, info.total); 371 EXPECT_LT(info.free, info.total);
364 #if defined(OS_LINUX) || defined(OS_ANDROID) 372 #if defined(OS_LINUX) || defined(OS_ANDROID)
365 EXPECT_LT(info.buffers, info.total); 373 EXPECT_LT(info.buffers, info.total);
366 EXPECT_LT(info.cached, info.total); 374 EXPECT_LT(info.cached, info.total);
367 EXPECT_LT(info.active_anon, info.total); 375 EXPECT_LT(info.active_anon, info.total);
368 EXPECT_LT(info.inactive_anon, info.total); 376 EXPECT_LT(info.inactive_anon, info.total);
369 EXPECT_LT(info.active_file, info.total); 377 EXPECT_LT(info.active_file, info.total);
370 EXPECT_LT(info.inactive_file, info.total); 378 EXPECT_LT(info.inactive_file, info.total);
371 #endif // defined(OS_LINUX) || defined(OS_ANDROID) 379 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
372 380
381 #if defined(OS_MACOSX) || defined(OS_IOS)
382 EXPECT_GT(info.file_backed, 0);
383 #endif
384
373 #if defined(OS_CHROMEOS) 385 #if defined(OS_CHROMEOS)
374 // Chrome OS exposes shmem. 386 // Chrome OS exposes shmem.
375 EXPECT_GT(info.shmem, 0); 387 EXPECT_GT(info.shmem, 0);
376 EXPECT_LT(info.shmem, info.total); 388 EXPECT_LT(info.shmem, info.total);
377 // Chrome unit tests are not run on actual Chrome OS hardware, so gem_objects 389 // Chrome unit tests are not run on actual Chrome OS hardware, so gem_objects
378 // and gem_size cannot be tested here. 390 // and gem_size cannot be tested here.
379 #endif 391 #endif
380 } 392 }
381 #endif // defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || 393 #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) ||
382 // defined(OS_LINUX) || defined(OS_ANDROID) 394 // defined(OS_LINUX) || defined(OS_ANDROID)
383 395
384 #if defined(OS_LINUX) || defined(OS_ANDROID) 396 #if defined(OS_LINUX) || defined(OS_ANDROID)
385 TEST(ProcessMetricsTest, ParseProcStatCPU) { 397 TEST(ProcessMetricsTest, ParseProcStatCPU) {
386 // /proc/self/stat for a process running "top". 398 // /proc/self/stat for a process running "top".
387 const char kTopStat[] = "960 (top) S 16230 960 16230 34818 960 " 399 const char kTopStat[] = "960 (top) S 16230 960 16230 34818 960 "
388 "4202496 471 0 0 0 " 400 "4202496 471 0 0 0 "
389 "12 16 0 0 " // <- These are the goods. 401 "12 16 0 0 " // <- These are the goods.
390 "20 0 1 0 121946157 15077376 314 18446744073709551615 4194304 " 402 "20 0 1 0 121946157 15077376 314 18446744073709551615 4194304 "
391 "4246868 140733983044336 18446744073709551615 140244213071219 " 403 "4246868 140733983044336 18446744073709551615 140244213071219 "
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 510
499 std::unique_ptr<ProcessMetrics> metrics( 511 std::unique_ptr<ProcessMetrics> metrics(
500 ProcessMetrics::CreateProcessMetrics(child.Handle())); 512 ProcessMetrics::CreateProcessMetrics(child.Handle()));
501 EXPECT_EQ(0, metrics->GetOpenFdCount()); 513 EXPECT_EQ(0, metrics->GetOpenFdCount());
502 ASSERT_TRUE(child.Terminate(0, true)); 514 ASSERT_TRUE(child.Terminate(0, true));
503 } 515 }
504 #endif // defined(OS_LINUX) 516 #endif // defined(OS_LINUX)
505 517
506 } // namespace debug 518 } // namespace debug
507 } // namespace base 519 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698