1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker // This file contains internal routines that are called by other files in 6*635a8641SAndroid Build Coastguard Worker // base/process/. 7*635a8641SAndroid Build Coastguard Worker 8*635a8641SAndroid Build Coastguard Worker #ifndef BASE_PROCESS_INTERNAL_AIX_H_ 9*635a8641SAndroid Build Coastguard Worker #define BASE_PROCESS_INTERNAL_AIX_H_ 10*635a8641SAndroid Build Coastguard Worker 11*635a8641SAndroid Build Coastguard Worker #include <stddef.h> 12*635a8641SAndroid Build Coastguard Worker #include <stdint.h> 13*635a8641SAndroid Build Coastguard Worker #include <unistd.h> 14*635a8641SAndroid Build Coastguard Worker 15*635a8641SAndroid Build Coastguard Worker #include "base/files/file_path.h" 16*635a8641SAndroid Build Coastguard Worker 17*635a8641SAndroid Build Coastguard Worker namespace base { 18*635a8641SAndroid Build Coastguard Worker 19*635a8641SAndroid Build Coastguard Worker namespace internalAIX { 20*635a8641SAndroid Build Coastguard Worker 21*635a8641SAndroid Build Coastguard Worker // "/proc" 22*635a8641SAndroid Build Coastguard Worker extern const char kProcDir[]; 23*635a8641SAndroid Build Coastguard Worker 24*635a8641SAndroid Build Coastguard Worker // "psinfo" 25*635a8641SAndroid Build Coastguard Worker extern const char kStatFile[]; 26*635a8641SAndroid Build Coastguard Worker 27*635a8641SAndroid Build Coastguard Worker // Returns a FilePath to "/proc/pid". 28*635a8641SAndroid Build Coastguard Worker base::FilePath GetProcPidDir(pid_t pid); 29*635a8641SAndroid Build Coastguard Worker 30*635a8641SAndroid Build Coastguard Worker // Take a /proc directory entry named |d_name|, and if it is the directory for 31*635a8641SAndroid Build Coastguard Worker // a process, convert it to a pid_t. 32*635a8641SAndroid Build Coastguard Worker // Returns 0 on failure. 33*635a8641SAndroid Build Coastguard Worker // e.g. /proc/self/ will return 0, whereas /proc/1234 will return 1234. 34*635a8641SAndroid Build Coastguard Worker pid_t ProcDirSlotToPid(const char* d_name); 35*635a8641SAndroid Build Coastguard Worker 36*635a8641SAndroid Build Coastguard Worker // Reads /proc/<pid>/stat into |buffer|. Returns true if the file can be read 37*635a8641SAndroid Build Coastguard Worker // and is non-empty. 38*635a8641SAndroid Build Coastguard Worker bool ReadProcStats(pid_t pid, std::string* buffer); 39*635a8641SAndroid Build Coastguard Worker 40*635a8641SAndroid Build Coastguard Worker // Takes |stats_data| and populates |proc_stats| with the values split by 41*635a8641SAndroid Build Coastguard Worker // spaces. Taking into account the 2nd field may, in itself, contain spaces. 42*635a8641SAndroid Build Coastguard Worker // Returns true if successful. 43*635a8641SAndroid Build Coastguard Worker bool ParseProcStats(const std::string& stats_data, 44*635a8641SAndroid Build Coastguard Worker std::vector<std::string>* proc_stats); 45*635a8641SAndroid Build Coastguard Worker 46*635a8641SAndroid Build Coastguard Worker // Fields from /proc/<pid>/psinfo. 47*635a8641SAndroid Build Coastguard Worker // If the ordering ever changes, carefully review functions that use these 48*635a8641SAndroid Build Coastguard Worker // values. 49*635a8641SAndroid Build Coastguard Worker // For AIX this is the bare minimum that we need. Most of the commented out 50*635a8641SAndroid Build Coastguard Worker // fields can still be extracted but currently none of these are required. 51*635a8641SAndroid Build Coastguard Worker enum ProcStatsFields { 52*635a8641SAndroid Build Coastguard Worker VM_COMM = 1, // Filename of executable, without parentheses. 53*635a8641SAndroid Build Coastguard Worker // VM_STATE = 2, // Letter indicating the state of the process. 54*635a8641SAndroid Build Coastguard Worker VM_PPID = 3, // PID of the parent. 55*635a8641SAndroid Build Coastguard Worker VM_PGRP = 4, // Process group id. 56*635a8641SAndroid Build Coastguard Worker // VM_UTIME = 13, // Time scheduled in user mode in clock ticks. 57*635a8641SAndroid Build Coastguard Worker // VM_STIME = 14, // Time scheduled in kernel mode in clock ticks. 58*635a8641SAndroid Build Coastguard Worker // VM_NUMTHREADS = 19, // Number of threads. 59*635a8641SAndroid Build Coastguard Worker // VM_STARTTIME = 21, // The time the process started in clock ticks. 60*635a8641SAndroid Build Coastguard Worker // VM_VSIZE = 22, // Virtual memory size in bytes. 61*635a8641SAndroid Build Coastguard Worker // VM_RSS = 23, // Resident Set Size in pages. 62*635a8641SAndroid Build Coastguard Worker }; 63*635a8641SAndroid Build Coastguard Worker 64*635a8641SAndroid Build Coastguard Worker // Reads the |field_num|th field from |proc_stats|. Returns 0 on failure. 65*635a8641SAndroid Build Coastguard Worker // This version does not handle the first 3 values, since the first value is 66*635a8641SAndroid Build Coastguard Worker // simply |pid|, and the next two values are strings. 67*635a8641SAndroid Build Coastguard Worker int64_t GetProcStatsFieldAsInt64(const std::vector<std::string>& proc_stats, 68*635a8641SAndroid Build Coastguard Worker ProcStatsFields field_num); 69*635a8641SAndroid Build Coastguard Worker 70*635a8641SAndroid Build Coastguard Worker // Same as GetProcStatsFieldAsInt64(), but for size_t values. 71*635a8641SAndroid Build Coastguard Worker size_t GetProcStatsFieldAsSizeT(const std::vector<std::string>& proc_stats, 72*635a8641SAndroid Build Coastguard Worker ProcStatsFields field_num); 73*635a8641SAndroid Build Coastguard Worker 74*635a8641SAndroid Build Coastguard Worker // Convenience wrapper around GetProcStatsFieldAsInt64(), ParseProcStats() and 75*635a8641SAndroid Build Coastguard Worker // ReadProcStats(). See GetProcStatsFieldAsInt64() for details. 76*635a8641SAndroid Build Coastguard Worker int64_t ReadProcStatsAndGetFieldAsInt64(pid_t pid, ProcStatsFields field_num); 77*635a8641SAndroid Build Coastguard Worker 78*635a8641SAndroid Build Coastguard Worker // Same as ReadProcStatsAndGetFieldAsInt64() but for size_t values. 79*635a8641SAndroid Build Coastguard Worker size_t ReadProcStatsAndGetFieldAsSizeT(pid_t pid, ProcStatsFields field_num); 80*635a8641SAndroid Build Coastguard Worker 81*635a8641SAndroid Build Coastguard Worker } // namespace internal 82*635a8641SAndroid Build Coastguard Worker } // namespace base 83*635a8641SAndroid Build Coastguard Worker 84*635a8641SAndroid Build Coastguard Worker #endif // BASE_PROCESS_INTERNAL_AIX_H_ 85