123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // Copyright (c) 2013 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/process/process_metrics.h"
- #include <limits.h>
- #include <mach/task.h>
- #include <malloc/malloc.h>
- #include <stddef.h>
- #include "base/check_op.h"
- #include "base/mac/scoped_mach_port.h"
- #include "base/memory/ptr_util.h"
- #include "base/notreached.h"
- #include "base/numerics/safe_conversions.h"
- namespace base {
- ProcessMetrics::ProcessMetrics(ProcessHandle process) {}
- ProcessMetrics::~ProcessMetrics() {}
- // static
- std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
- ProcessHandle process) {
- return WrapUnique(new ProcessMetrics(process));
- }
- TimeDelta ProcessMetrics::GetCumulativeCPUUsage() {
- NOTIMPLEMENTED();
- return TimeDelta();
- }
- size_t GetMaxFds() {
- static const rlim_t kSystemDefaultMaxFds = 256;
- rlim_t max_fds;
- struct rlimit nofile;
- if (getrlimit(RLIMIT_NOFILE, &nofile)) {
- // Error case: Take a best guess.
- max_fds = kSystemDefaultMaxFds;
- } else {
- max_fds = nofile.rlim_cur;
- }
- if (max_fds > INT_MAX)
- max_fds = INT_MAX;
- return static_cast<size_t>(max_fds);
- }
- void IncreaseFdLimitTo(unsigned int max_descriptors) {
- // Unimplemented.
- }
- // Bytes committed by the system.
- size_t GetSystemCommitCharge() {
- NOTIMPLEMENTED();
- return 0;
- }
- bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo) {
- struct host_basic_info hostinfo;
- mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
- base::mac::ScopedMachSendRight host(mach_host_self());
- int result = host_info(host.get(), HOST_BASIC_INFO,
- reinterpret_cast<host_info_t>(&hostinfo), &count);
- if (result != KERN_SUCCESS)
- return false;
- DCHECK_EQ(HOST_BASIC_INFO_COUNT, count);
- meminfo->total = static_cast<int>(hostinfo.max_mem / 1024);
- vm_statistics64_data_t vm_info;
- count = HOST_VM_INFO64_COUNT;
- if (host_statistics64(host.get(), HOST_VM_INFO64,
- reinterpret_cast<host_info64_t>(&vm_info),
- &count) != KERN_SUCCESS) {
- return false;
- }
- DCHECK_EQ(HOST_VM_INFO64_COUNT, count);
- // Check that PAGE_SIZE is divisible by 1024 (2^10).
- CHECK_EQ(PAGE_SIZE, (PAGE_SIZE >> 10) << 10);
- meminfo->free = saturated_cast<int>(
- PAGE_SIZE / 1024 * (vm_info.free_count - vm_info.speculative_count));
- meminfo->speculative =
- saturated_cast<int>(PAGE_SIZE / 1024 * vm_info.speculative_count);
- meminfo->file_backed =
- saturated_cast<int>(PAGE_SIZE / 1024 * vm_info.external_page_count);
- meminfo->purgeable =
- saturated_cast<int>(PAGE_SIZE / 1024 * vm_info.purgeable_count);
- return true;
- }
- size_t ProcessMetrics::GetMallocUsage() {
- malloc_statistics_t stats;
- malloc_zone_statistics(nullptr, &stats);
- return stats.size_in_use;
- }
- } // namespace base
|