190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/process/process_metrics.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <mach/task.h> 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace base { 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace { 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool GetTaskInfo(task_basic_info_64* task_info_data) { 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) mach_msg_type_number_t count = TASK_BASIC_INFO_64_COUNT; 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kern_return_t kr = task_info(mach_task_self(), 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TASK_BASIC_INFO_64, 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) reinterpret_cast<task_info_t>(task_info_data), 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &count); 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return kr == KERN_SUCCESS; 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ProcessMetrics::ProcessMetrics(ProcessHandle process) {} 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ProcessMetrics::~ProcessMetrics() {} 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ProcessMetrics* ProcessMetrics::CreateProcessMetrics(ProcessHandle process) { 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return new ProcessMetrics(process); 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)size_t ProcessMetrics::GetPagefileUsage() const { 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) task_basic_info_64 task_info_data; 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!GetTaskInfo(&task_info_data)) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 0; 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return task_info_data.virtual_size; 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)size_t ProcessMetrics::GetWorkingSetSize() const { 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) task_basic_info_64 task_info_data; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!GetTaskInfo(&task_info_data)) 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 0; 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return task_info_data.resident_size; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochsize_t GetMaxFds() { 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static const rlim_t kSystemDefaultMaxFds = 256; 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch rlim_t max_fds; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch struct rlimit nofile; 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (getrlimit(RLIMIT_NOFILE, &nofile)) { 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Error case: Take a best guess. 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch max_fds = kSystemDefaultMaxFds; 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch max_fds = nofile.rlim_cur; 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (max_fds > INT_MAX) 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch max_fds = INT_MAX; 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return static_cast<size_t>(max_fds); 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SetFdLimit(unsigned int max_descriptors) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Unimplemented. 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace base 69