mirror of
https://github.com/xzeldon/htop.git
synced 2024-12-25 23:35:45 +00:00
d35db47c9a
Fetching the TTY name of a process is extremely expensive on darwin and the call to devname accounts for 95% of htop's CPU usage when there is high process turnover (this is mostly due to devname calling lstat, which is incredibly slow). This can make htop unresponsive. To mitigate this only set the process TTY name if the it is being actively displayed (PROCESS_FLAG_TTY), which by default it is not on darwin.
47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
#ifndef HEADER_DarwinProcess
|
|
#define HEADER_DarwinProcess
|
|
/*
|
|
htop - DarwinProcess.h
|
|
(C) 2015 Hisham H. Muhammad
|
|
Released under the GNU GPLv2+, see the COPYING file
|
|
in the source distribution for its full text.
|
|
*/
|
|
|
|
#include <sys/sysctl.h>
|
|
|
|
#include "Settings.h"
|
|
#include "darwin/DarwinProcessList.h"
|
|
|
|
|
|
#define PROCESS_FLAG_TTY 0x00000100
|
|
|
|
typedef struct DarwinProcess_ {
|
|
Process super;
|
|
|
|
uint64_t utime;
|
|
uint64_t stime;
|
|
bool taskAccess;
|
|
bool translated;
|
|
} DarwinProcess;
|
|
|
|
extern const ProcessClass DarwinProcess_class;
|
|
|
|
extern const ProcessFieldData Process_fields[LAST_PROCESSFIELD];
|
|
|
|
Process* DarwinProcess_new(const Settings* settings);
|
|
|
|
void Process_delete(Object* cast);
|
|
|
|
void DarwinProcess_setFromKInfoProc(Process* proc, const struct kinfo_proc* ps, bool exists);
|
|
|
|
void DarwinProcess_setFromLibprocPidinfo(DarwinProcess* proc, DarwinProcessList* dpl, double timeIntervalNS);
|
|
|
|
/*
|
|
* Scan threads for process state information.
|
|
* Based on: http://stackoverflow.com/questions/6788274/ios-mac-cpu-usage-for-thread
|
|
* and https://github.com/max-horvath/htop-osx/blob/e86692e869e30b0bc7264b3675d2a4014866ef46/ProcessList.c
|
|
*/
|
|
void DarwinProcess_scanThreads(DarwinProcess* dp);
|
|
|
|
#endif
|