everything: Changes.
This commit is contained in:
parent
0ff9d44b39
commit
a597212e9f
13
NEWS
13
NEWS
|
@ -1,3 +1,16 @@
|
|||
============
|
||||
Evisum 0.3.4
|
||||
============
|
||||
|
||||
* Offer kvm_openfiles means of obtaining PID list on
|
||||
FreeBSD-based platforms. This requires specific
|
||||
permissions (s+g kmem). We fallback if that fails.
|
||||
* Get rid of the horrible entry-based process list and
|
||||
use a genlist (meh).
|
||||
* Save settings upon exit (kb/mb/gb) and sorting.
|
||||
* UI Changes (Too many labels and progress bars).
|
||||
* Other stuff.
|
||||
|
||||
============
|
||||
Evisum 0.3.2
|
||||
============
|
||||
|
|
|
@ -12,7 +12,7 @@ host_os = host_machine.system()
|
|||
deps = dependency('elementary', version: efl_version)
|
||||
|
||||
deps_os = declare_dependency(link_args : [] )
|
||||
if host_os == 'openbsd'
|
||||
if host_os == 'openbsd' or host_os == 'freebsd' or host_os == 'dragonfly'
|
||||
deps_os = declare_dependency(link_args : [ '-lkvm' ])
|
||||
endif
|
||||
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
#include "config.h"
|
||||
#include "configuration.h"
|
||||
#include <Eina.h>
|
||||
#include <Ecore_File.h>
|
||||
#include <Efreet.h>
|
||||
|
||||
static const char *
|
||||
_config_file_path(void)
|
||||
{
|
||||
const char *path = eina_slstr_printf("%s/evisum", efreet_config_home_get());
|
||||
|
||||
if (!ecore_file_exists(path))
|
||||
ecore_file_mkpath(path);
|
||||
|
||||
path = eina_slstr_printf("%s/evisum/evisum.cfg", efreet_config_home_get());
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
void
|
||||
config_init(void)
|
||||
{
|
||||
efreet_init();
|
||||
}
|
||||
|
||||
void
|
||||
config_shutdown(void)
|
||||
{
|
||||
efreet_shutdown();
|
||||
}
|
||||
|
||||
Evisum_Config *
|
||||
config_load(void)
|
||||
{
|
||||
Eet_File *f;
|
||||
int size;
|
||||
Evisum_Config *cfg = NULL;
|
||||
|
||||
const char *path = _config_file_path();
|
||||
if (!ecore_file_exists(path))
|
||||
{
|
||||
cfg = calloc(1, sizeof(Evisum_Config));
|
||||
cfg->version = CONFIG_VERSION;
|
||||
f = eet_open(path, EET_FILE_MODE_WRITE);
|
||||
eet_write(f, "Config", cfg, sizeof(Evisum_Config), 0);
|
||||
eet_close(f);
|
||||
}
|
||||
else
|
||||
{
|
||||
f = eet_open(path, EET_FILE_MODE_READ);
|
||||
if (!f) exit(127);
|
||||
cfg = eet_read(f, "Config", &size);
|
||||
eet_close(f);
|
||||
}
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
config_save(Evisum_Config *cfg)
|
||||
{
|
||||
Eet_File *f;
|
||||
const char *path = _config_file_path();
|
||||
f = eet_open(path, EET_FILE_MODE_WRITE);
|
||||
if (!f) exit(127);
|
||||
eet_write(f, "Config", cfg, sizeof(Evisum_Config), 0);
|
||||
eet_close(f);
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef __CONFIGURATION_H__
|
||||
#define __CONFIGURATION_H__
|
||||
|
||||
#include "ui.h"
|
||||
|
||||
#define CONFIG_VERSION 0x0001
|
||||
|
||||
typedef struct _Evisum_Config
|
||||
{
|
||||
int version;
|
||||
int sort_type;
|
||||
Eina_Bool sort_reverse;
|
||||
int data_unit;
|
||||
} Evisum_Config;
|
||||
|
||||
void config_init(void);
|
||||
void config_shutdown(void);
|
||||
Evisum_Config *config_load(void);
|
||||
Eina_Bool config_save(Evisum_Config *);
|
||||
|
||||
#endif
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "configuration.h"
|
||||
#include "ui.h"
|
||||
|
||||
static void
|
||||
|
@ -47,6 +48,7 @@ main(int argc, char **argv)
|
|||
|
||||
eina_init();
|
||||
ecore_init();
|
||||
config_init();
|
||||
elm_init(argc, argv);
|
||||
|
||||
ui = _win_add();
|
||||
|
@ -57,6 +59,7 @@ main(int argc, char **argv)
|
|||
}
|
||||
|
||||
elm_shutdown();
|
||||
config_shutdown();
|
||||
ecore_shutdown();
|
||||
eina_shutdown();
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
inc = include_directories('.', '../..')
|
||||
|
||||
executable('evisum', [
|
||||
'configuration.c',
|
||||
'configuration.h',
|
||||
'disks.c',
|
||||
'disks.h',
|
||||
'process.c',
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
# include <sys/proc.h>
|
||||
#endif
|
||||
|
||||
#if defined(__OpenBSD__)
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__)
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <kvm.h>
|
||||
# include <limits.h>
|
||||
# include <sys/proc.h>
|
||||
|
@ -34,6 +36,10 @@
|
|||
#include <Ecore.h>
|
||||
#include <Ecore_File.h>
|
||||
|
||||
#if defined(__linux__) && !defined(PF_KTHREAD)
|
||||
# define PF_KTHREAD 0x00200000
|
||||
#endif
|
||||
|
||||
static const char *
|
||||
_process_state_name(char state)
|
||||
{
|
||||
|
@ -142,7 +148,7 @@ _process_list_linux_get(void)
|
|||
FILE *f;
|
||||
char *name, *link, state, line[4096], program_name[1024];
|
||||
int pid, res, utime, stime, cutime, cstime, uid, psr, pri, nice, numthreads;
|
||||
unsigned int mem_size, mem_rss;
|
||||
unsigned int mem_size, mem_rss, flags;
|
||||
int pagesize = getpagesize();
|
||||
|
||||
list = NULL;
|
||||
|
@ -165,9 +171,8 @@ _process_list_linux_get(void)
|
|||
end = strchr(line, ')');
|
||||
strncpy(program_name, start, end - start);
|
||||
program_name[end - start] = '\0';
|
||||
|
||||
res = sscanf(end + 2, "%c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u %d %d %d %d %d %d %d %d %d",
|
||||
&state, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &utime, &stime, &cutime, &cstime,
|
||||
&state, &dummy, &dummy, &dummy, &dummy, &dummy, &flags, &dummy, &dummy, &dummy, &dummy, &utime, &stime, &cutime, &cstime,
|
||||
&pri, &nice, &numthreads, &dummy, &dummy, &mem_size, &mem_rss, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy,
|
||||
&dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &psr, &dummy, &dummy, &dummy, &dummy, &dummy);
|
||||
}
|
||||
|
@ -176,6 +181,8 @@ _process_list_linux_get(void)
|
|||
|
||||
if (res != 42) continue;
|
||||
|
||||
if (flags & PF_KTHREAD) continue;
|
||||
|
||||
f = fopen(eina_slstr_printf("/proc/%d/status", pid), "r");
|
||||
if (!f) continue;
|
||||
|
||||
|
@ -210,6 +217,9 @@ _process_list_linux_get(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
char *end = strchr(program_name, ' ');
|
||||
if (end) *end = '\0';
|
||||
Proc_Stats *p = calloc(1, sizeof(Proc_Stats));
|
||||
if (!p) return NULL;
|
||||
|
||||
|
@ -489,7 +499,7 @@ proc_info_by_pid(int pid)
|
|||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
static Eina_List *
|
||||
_process_list_freebsd_get(void)
|
||||
_process_list_freebsd_fallback_get(void)
|
||||
{
|
||||
Eina_List *list;
|
||||
struct rusage *usage;
|
||||
|
@ -546,6 +556,36 @@ _process_list_freebsd_get(void)
|
|||
return list;
|
||||
}
|
||||
|
||||
static Eina_List *
|
||||
_process_list_freebsd_get(void)
|
||||
{
|
||||
kvm_t *kern;
|
||||
Eina_List *list = NULL;
|
||||
struct kinfo_proc *kp;
|
||||
char errbuf[_POSIX2_LINE_MAX];
|
||||
int pid_count;
|
||||
|
||||
kern = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
|
||||
if (!kern)
|
||||
return _process_list_freebsd_fallback_get();
|
||||
|
||||
kp = kvm_getprocs(kern, KERN_PROC_PROC, 0, &pid_count);
|
||||
if (!kp) return _process_list_freebsd_fallback_get();
|
||||
|
||||
for (int i = 0; i < pid_count; i++)
|
||||
{
|
||||
if (kp[i].ki_flag & P_KPROC)
|
||||
continue;
|
||||
|
||||
Proc_Stats *p = proc_info_by_pid(kp[i].ki_pid);
|
||||
if (!p) continue;
|
||||
|
||||
list = eina_list_append(list, p);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
Proc_Stats *
|
||||
proc_info_by_pid(int pid)
|
||||
{
|
||||
|
|
|
@ -38,7 +38,11 @@
|
|||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/sysctl.h>
|
||||
#if defined(__linux__)
|
||||
# define BORING_USER 1
|
||||
#else
|
||||
# include <sys/sysctl.h>
|
||||
#endif
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
|
@ -1271,14 +1275,16 @@ _network_transfer_get_thread_cb(void *arg)
|
|||
return (void *)0;
|
||||
}
|
||||
|
||||
void
|
||||
system_stats_get(results_t *results)
|
||||
results_t *
|
||||
system_stats_get(void)
|
||||
{
|
||||
results_t *results;
|
||||
void *ret;
|
||||
pthread_t tid;
|
||||
int error;
|
||||
|
||||
memset(results, 0, sizeof(results_t));
|
||||
results = calloc(1, sizeof(results_t));
|
||||
if (!results) return NULL;
|
||||
|
||||
results->cores = _cpu_cores_state_get(&results->cpu_count);
|
||||
|
||||
|
@ -1298,5 +1304,7 @@ system_stats_get(results_t *results)
|
|||
ret = NULL;
|
||||
pthread_join(tid, ret);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,8 +61,8 @@ struct results_t
|
|||
int temperature;
|
||||
};
|
||||
|
||||
void
|
||||
system_stats_get(results_t *results);
|
||||
results_t *
|
||||
system_stats_get(void);
|
||||
|
||||
int
|
||||
system_cpu_memory_get(double *percent_cpu, long *memory_total, long *memory_used);
|
||||
|
|
831
src/bin/ui.c
831
src/bin/ui.c
File diff suppressed because it is too large
Load Diff
28
src/bin/ui.h
28
src/bin/ui.h
|
@ -1,11 +1,12 @@
|
|||
#ifndef __UI_H__
|
||||
#ifndef __UI_H__
|
||||
#define __UI_H__
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "process.h"
|
||||
#include "configuration.h"
|
||||
|
||||
#define EVISUM_SIZE_WIDTH 500
|
||||
#define EVISUM_SIZE_HEIGHT 600
|
||||
#define EVISUM_SIZE_WIDTH 600
|
||||
#define EVISUM_SIZE_HEIGHT 520
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
@ -90,14 +91,6 @@ typedef struct Ui
|
|||
Evas_Object *progress_mem_shared;
|
||||
Evas_Object *progress_mem_swap;
|
||||
|
||||
Evas_Object *entry_pid;
|
||||
Evas_Object *entry_uid;
|
||||
Evas_Object *entry_size;
|
||||
Evas_Object *entry_rss;
|
||||
Evas_Object *entry_cmd;
|
||||
Evas_Object *entry_state;
|
||||
Evas_Object *entry_cpu_usage;
|
||||
|
||||
Evas_Object *btn_pid;
|
||||
Evas_Object *btn_uid;
|
||||
Evas_Object *btn_size;
|
||||
|
@ -105,7 +98,16 @@ typedef struct Ui
|
|||
Evas_Object *btn_cmd;
|
||||
Evas_Object *btn_state;
|
||||
Evas_Object *btn_cpu_usage;
|
||||
Evas_Object *btn_expand;
|
||||
|
||||
char *long_pid;
|
||||
char *long_uid;
|
||||
char *long_size;
|
||||
char *long_rss;
|
||||
char *long_cmd;
|
||||
char *long_state;
|
||||
char *long_cpu;
|
||||
|
||||
Evas_Object *genlist_procs;
|
||||
|
||||
Evas_Object *entry_pid_cmd;
|
||||
Evas_Object *entry_pid_user;
|
||||
|
@ -135,6 +137,7 @@ typedef struct Ui
|
|||
Evas_Object *list_pid;
|
||||
|
||||
Eina_Bool skip_wait;
|
||||
Eina_Bool ready;
|
||||
|
||||
Eina_List *cpu_times;
|
||||
int64_t pid_cpu_time;
|
||||
|
@ -146,6 +149,7 @@ typedef struct Ui
|
|||
Eina_Bool panel_visible;
|
||||
Eina_Bool shutting_down;
|
||||
Eina_Bool searching;
|
||||
Eina_Bool show_self;
|
||||
|
||||
uint64_t incoming_max;
|
||||
uint64_t outgoing_max;
|
||||
|
|
Loading…
Reference in New Issue