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

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

Issue 2558043007: Fix free memory calculation. (Closed)
Patch Set: Fix integer overflow in unittest. Created 3 years, 9 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
« no previous file with comments | « base/process/process_metrics_ios.cc ('k') | base/process/process_metrics_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 <dirent.h> 7 #include <dirent.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 const size_t kDiskWrites = 7; 525 const size_t kDiskWrites = 7;
526 const size_t kDiskWritesMerged = 8; 526 const size_t kDiskWritesMerged = 8;
527 const size_t kDiskSectorsWritten = 9; 527 const size_t kDiskSectorsWritten = 9;
528 const size_t kDiskWriteTime = 10; 528 const size_t kDiskWriteTime = 10;
529 const size_t kDiskIO = 11; 529 const size_t kDiskIO = 11;
530 const size_t kDiskIOTime = 12; 530 const size_t kDiskIOTime = 12;
531 const size_t kDiskWeightedIOTime = 13; 531 const size_t kDiskWeightedIOTime = 13;
532 532
533 } // namespace 533 } // namespace
534 534
535 SystemMemoryInfoKB::SystemMemoryInfoKB() {
536 total = 0;
537 free = 0;
538 #if defined(OS_LINUX)
539 available = 0;
540 #endif
541 buffers = 0;
542 cached = 0;
543 active_anon = 0;
544 inactive_anon = 0;
545 active_file = 0;
546 inactive_file = 0;
547 swap_total = 0;
548 swap_free = 0;
549 dirty = 0;
550
551 pswpin = 0;
552 pswpout = 0;
553 pgmajfault = 0;
554
555 #ifdef OS_CHROMEOS
556 shmem = 0;
557 slab = 0;
558 gem_objects = -1;
559 gem_size = -1;
560 #endif
561 }
562
563 SystemMemoryInfoKB::SystemMemoryInfoKB(const SystemMemoryInfoKB& other) =
564 default;
565
566 std::unique_ptr<Value> SystemMemoryInfoKB::ToValue() const { 535 std::unique_ptr<Value> SystemMemoryInfoKB::ToValue() const {
567 std::unique_ptr<DictionaryValue> res(new DictionaryValue()); 536 std::unique_ptr<DictionaryValue> res(new DictionaryValue());
568 537
569 res->SetInteger("total", total); 538 res->SetInteger("total", total);
570 res->SetInteger("free", free); 539 res->SetInteger("free", free);
571 #if defined(OS_LINUX)
572 res->SetInteger("available", available); 540 res->SetInteger("available", available);
573 #endif
574 res->SetInteger("buffers", buffers); 541 res->SetInteger("buffers", buffers);
575 res->SetInteger("cached", cached); 542 res->SetInteger("cached", cached);
576 res->SetInteger("active_anon", active_anon); 543 res->SetInteger("active_anon", active_anon);
577 res->SetInteger("inactive_anon", inactive_anon); 544 res->SetInteger("inactive_anon", inactive_anon);
578 res->SetInteger("active_file", active_file); 545 res->SetInteger("active_file", active_file);
579 res->SetInteger("inactive_file", inactive_file); 546 res->SetInteger("inactive_file", inactive_file);
580 res->SetInteger("swap_total", swap_total); 547 res->SetInteger("swap_total", swap_total);
581 res->SetInteger("swap_free", swap_free); 548 res->SetInteger("swap_free", swap_free);
582 res->SetInteger("swap_used", swap_total - swap_free); 549 res->SetInteger("swap_used", swap_total - swap_free);
583 res->SetInteger("dirty", dirty); 550 res->SetInteger("dirty", dirty);
551 res->SetInteger("reclaimable", reclaimable);
584 res->SetInteger("pswpin", pswpin); 552 res->SetInteger("pswpin", pswpin);
585 res->SetInteger("pswpout", pswpout); 553 res->SetInteger("pswpout", pswpout);
586 res->SetInteger("pgmajfault", pgmajfault); 554 res->SetInteger("pgmajfault", pgmajfault);
587 #ifdef OS_CHROMEOS 555 #ifdef OS_CHROMEOS
588 res->SetInteger("shmem", shmem); 556 res->SetInteger("shmem", shmem);
589 res->SetInteger("slab", slab); 557 res->SetInteger("slab", slab);
590 res->SetInteger("gem_objects", gem_objects); 558 res->SetInteger("gem_objects", gem_objects);
591 res->SetInteger("gem_size", gem_size); 559 res->SetInteger("gem_size", gem_size);
592 #endif 560 #endif
593 561
(...skipping 27 matching lines...) Expand all
621 DLOG(WARNING) << "meminfo: tokens: " << tokens.size() 589 DLOG(WARNING) << "meminfo: tokens: " << tokens.size()
622 << " malformed line: " << line.as_string(); 590 << " malformed line: " << line.as_string();
623 continue; 591 continue;
624 } 592 }
625 593
626 int* target = NULL; 594 int* target = NULL;
627 if (tokens[0] == "MemTotal:") 595 if (tokens[0] == "MemTotal:")
628 target = &meminfo->total; 596 target = &meminfo->total;
629 else if (tokens[0] == "MemFree:") 597 else if (tokens[0] == "MemFree:")
630 target = &meminfo->free; 598 target = &meminfo->free;
631 #if defined(OS_LINUX)
632 else if (tokens[0] == "MemAvailable:") 599 else if (tokens[0] == "MemAvailable:")
633 target = &meminfo->available; 600 target = &meminfo->available;
634 #endif
635 else if (tokens[0] == "Buffers:") 601 else if (tokens[0] == "Buffers:")
636 target = &meminfo->buffers; 602 target = &meminfo->buffers;
637 else if (tokens[0] == "Cached:") 603 else if (tokens[0] == "Cached:")
638 target = &meminfo->cached; 604 target = &meminfo->cached;
639 else if (tokens[0] == "Active(anon):") 605 else if (tokens[0] == "Active(anon):")
640 target = &meminfo->active_anon; 606 target = &meminfo->active_anon;
641 else if (tokens[0] == "Inactive(anon):") 607 else if (tokens[0] == "Inactive(anon):")
642 target = &meminfo->inactive_anon; 608 target = &meminfo->inactive_anon;
643 else if (tokens[0] == "Active(file):") 609 else if (tokens[0] == "Active(file):")
644 target = &meminfo->active_file; 610 target = &meminfo->active_file;
645 else if (tokens[0] == "Inactive(file):") 611 else if (tokens[0] == "Inactive(file):")
646 target = &meminfo->inactive_file; 612 target = &meminfo->inactive_file;
647 else if (tokens[0] == "SwapTotal:") 613 else if (tokens[0] == "SwapTotal:")
648 target = &meminfo->swap_total; 614 target = &meminfo->swap_total;
649 else if (tokens[0] == "SwapFree:") 615 else if (tokens[0] == "SwapFree:")
650 target = &meminfo->swap_free; 616 target = &meminfo->swap_free;
651 else if (tokens[0] == "Dirty:") 617 else if (tokens[0] == "Dirty:")
652 target = &meminfo->dirty; 618 target = &meminfo->dirty;
619 else if (tokens[0] == "SReclaimable:")
620 target = &meminfo->reclaimable;
653 #if defined(OS_CHROMEOS) 621 #if defined(OS_CHROMEOS)
654 // Chrome OS has a tweaked kernel that allows us to query Shmem, which is 622 // Chrome OS has a tweaked kernel that allows us to query Shmem, which is
655 // usually video memory otherwise invisible to the OS. 623 // usually video memory otherwise invisible to the OS.
656 else if (tokens[0] == "Shmem:") 624 else if (tokens[0] == "Shmem:")
657 target = &meminfo->shmem; 625 target = &meminfo->shmem;
658 else if (tokens[0] == "Slab:") 626 else if (tokens[0] == "Slab:")
659 target = &meminfo->slab; 627 target = &meminfo->slab;
660 #endif 628 #endif
661 if (target) 629 if (target)
662 StringToInt(tokens[1], target); 630 StringToInt(tokens[1], target);
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 #if defined(OS_LINUX) 934 #if defined(OS_LINUX)
967 int ProcessMetrics::GetIdleWakeupsPerSecond() { 935 int ProcessMetrics::GetIdleWakeupsPerSecond() {
968 uint64_t wake_ups; 936 uint64_t wake_ups;
969 const char kWakeupStat[] = "se.statistics.nr_wakeups"; 937 const char kWakeupStat[] = "se.statistics.nr_wakeups";
970 return ReadProcSchedAndGetFieldAsUint64(process_, kWakeupStat, &wake_ups) ? 938 return ReadProcSchedAndGetFieldAsUint64(process_, kWakeupStat, &wake_ups) ?
971 CalculateIdleWakeupsPerSecond(wake_ups) : 0; 939 CalculateIdleWakeupsPerSecond(wake_ups) : 0;
972 } 940 }
973 #endif // defined(OS_LINUX) 941 #endif // defined(OS_LINUX)
974 942
975 } // namespace base 943 } // namespace base
OLDNEW
« no previous file with comments | « base/process/process_metrics_ios.cc ('k') | base/process/process_metrics_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698