blob: ff05b334dd9d5efc1a6b584367c1834d1d903e47 [file] [log] [blame]
// Copyright 2017 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.
#ifndef PROCESS_INFO_H_
#define PROCESS_INFO_H_
#include <map>
#include <memory>
#include "process_memory_stats.h"
// Reads various process stats and details from /proc/pid/.
class ProcessInfo {
public:
struct ThreadInfo {
char name[128] = {};
};
using ThreadInfoMap = std::map<int, std::unique_ptr<ThreadInfo>>;
// Returns true if |pid| is a process (|pid| == TGID), false if it's just a
// thread of another process, or if |pid| doesn't exist at all.
static bool IsProcess(int pid);
explicit ProcessInfo(int pid);
bool ReadProcessName();
bool ReadThreadNames();
bool ReadOOMStats();
bool ReadPageFaultsAndCPUTimeStats();
ProcessMemoryStats* memory() { return &memory_; }
const ProcessMemoryStats* memory() const { return &memory_; }
const ThreadInfoMap* threads() const { return &threads_; }
const char* name() const { return name_; }
const char* exe() const { return exe_; }
int oom_adj() const { return oom_adj_; }
int oom_score_adj() const { return oom_score_adj_; }
int oom_score() const { return oom_score_; }
unsigned long minflt() const { return minflt_; }
unsigned long majflt() const { return majflt_; }
unsigned long utime() const { return utime_; }
unsigned long stime() const { return stime_; }
unsigned long long start_time() const { return start_time_; }
private:
ProcessInfo(const ProcessInfo&) = delete;
void operator=(const ProcessInfo&) = delete;
ProcessMemoryStats memory_;
ThreadInfoMap threads_;
char name_[128] = {};
char exe_[128] = {};
int oom_adj_ = 0;
int oom_score_adj_ = 0;
int oom_score_ = 0;
unsigned long minflt_ = 0;
unsigned long majflt_ = 0;
unsigned long utime_ = 0; // CPU time in user mode.
unsigned long stime_ = 0; // CPU time in kernel mode.
unsigned long long start_time_ = 0; // CPU time in kernel mode.
const int pid_;
};
#endif // PROCESS_INFO_H_