This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository evisum.
View the commit online.
commit e9721b700f9ad1f863de84138d4cc34c0ef5b688
Author: Alastair Poole <[email protected]>
AuthorDate: Fri May 22 02:36:16 2026 +0100
enigmatic: move process i/o into enigmatic.
---
NEWS | 8 +-
VERSION | 2 +-
meson.build | 2 +-
src/bin/enigmatic/enigmatic_config.c | 112 ++++++++++++++++++++++++--
src/bin/enigmatic/enigmatic_config.h | 2 +-
src/bin/enigmatic/enigmatic_main.c | 12 +--
src/bin/enigmatic/monitor/processes.c | 69 +++++++++++++---
src/bin/enigmatic/system/process.h | 5 ++
src/bin/ui/evisum_ui_process_list.c | 141 +--------------------------------
src/bin/ui/evisum_ui_process_view.c | 143 ----------------------------------
10 files changed, 184 insertions(+), 312 deletions(-)
diff --git a/NEWS b/NEWS
index 5b60ec9..0bfe073 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,10 @@
-============
+=============
+Evisum 2.0.10
+=============
+
+ * Move process i/o calculations completely into enigmatic.
+ Evisum only displays values.
+
Evisum 2.0.9
============
diff --git a/VERSION b/VERSION
index 09843e3..0a69206 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.9
+2.0.10
diff --git a/meson.build b/meson.build
index 214f90c..ece69f9 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
##### Project
project('evisum', 'c',
- version : '2.0.9',
+ version : '2.0.10',
meson_version : '>= 0.56.0')
efl_version = '>= 1.27.0'
diff --git a/src/bin/enigmatic/enigmatic_config.c b/src/bin/enigmatic/enigmatic_config.c
index 06bfd38..1ff6240 100644
--- a/src/bin/enigmatic/enigmatic_config.c
+++ b/src/bin/enigmatic/enigmatic_config.c
@@ -4,6 +4,10 @@
#include <Eina.h>
#include <Eet.h>
#include <Ecore_File.h>
+#include <dirent.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <unistd.h>
static Eet_Data_Descriptor *_enigmatic_conf_desc = NULL;
@@ -65,12 +69,108 @@ _config_defaults(void)
return config;
}
+static Eina_Bool
+_path_join(char *buf, size_t size, const char *dir, const char *name)
+{
+ int n;
+
+ n = snprintf(buf, size, "%s/%s", dir, name);
+ return ((n >= 0) && ((size_t) n < size));
+}
+
+static Eina_Bool
+_cache_entry_remove(const char *path)
+{
+ struct stat st;
+
+ if (lstat(path, &st) == -1)
+ return (errno == ENOENT);
+
+ if (S_ISDIR(st.st_mode))
+ {
+ DIR *dir;
+ struct dirent *entry;
+
+ dir = opendir(path);
+ if (!dir)
+ return EINA_FALSE;
+
+ while ((entry = readdir(dir)))
+ {
+ char child[PATH_MAX];
+
+ if ((!strcmp(entry->d_name, ".")) || (!strcmp(entry->d_name, "..")))
+ continue;
+
+ if (!_path_join(child, sizeof(child), path, entry->d_name))
+ {
+ closedir(dir);
+ return EINA_FALSE;
+ }
+ if (!_cache_entry_remove(child))
+ {
+ closedir(dir);
+ return EINA_FALSE;
+ }
+ }
+
+ closedir(dir);
+ return !rmdir(path);
+ }
+
+ return !unlink(path);
+}
+
+static void
+_cache_dir_clear(void)
+{
+ char path[PATH_MAX];
+ DIR *dir;
+ struct dirent *entry;
+ Eina_Bool ok = EINA_TRUE;
+
+ snprintf(path, sizeof(path), "%s/%s", enigmatic_cache_dir_get(), PACKAGE);
+
+ dir = opendir(path);
+ if (!dir)
+ {
+ if (errno == ENOENT)
+ ok = EINA_TRUE;
+ else
+ ok = EINA_FALSE;
+ goto done;
+ }
+
+ while ((entry = readdir(dir)))
+ {
+ char child[PATH_MAX];
+
+ if ((!strcmp(entry->d_name, ".")) || (!strcmp(entry->d_name, "..")))
+ continue;
+
+ if (!_path_join(child, sizeof(child), path, entry->d_name))
+ {
+ ok = EINA_FALSE;
+ continue;
+ }
+ if (!_cache_entry_remove(child))
+ ok = EINA_FALSE;
+ }
+
+ closedir(dir);
+
+done:
+ if (ok)
+ fprintf(stdout, "Enigmatic cache directory cleared after config version change.\n");
+ else
+ fprintf(stdout, "Enigmatic cache directory cleanup after config version change was incomplete.\n");
+}
+
Enigmatic_Config *
enigmatic_config_load(void)
{
Eet_File *f;
char *path;
- int maj, min;
Enigmatic_Config *config = NULL;
path = enigmatic_config_file_path();
@@ -93,16 +193,12 @@ enigmatic_config_load(void)
eet_close(f);
- maj = config->version >> 16 & 0xffff;
- min = config->version & 0xffff;
- if ((maj) && (maj != ENIGMATIC_CONFIG_VERSION_MAJOR))
- ERROR("config version mismatch.");
-
- if (min != ENIGMATIC_CONFIG_VERSION_MINOR)
+ if (config->version != ENIGMATIC_CONFIG_VERSION)
{
- fprintf(stderr, "reinitialising configuration\n");
+ _cache_dir_clear();
free(config);
config = _config_defaults();
+ enigmatic_config_save(config);
}
}
free(path);
diff --git a/src/bin/enigmatic/enigmatic_config.h b/src/bin/enigmatic/enigmatic_config.h
index e771f4e..9eb56b4 100644
--- a/src/bin/enigmatic/enigmatic_config.h
+++ b/src/bin/enigmatic/enigmatic_config.h
@@ -3,7 +3,7 @@
#include "Events.h"
#define ENIGMATIC_CONFIG_VERSION_MAJOR 0x0001
-#define ENIGMATIC_CONFIG_VERSION_MINOR 0x0004
+#define ENIGMATIC_CONFIG_VERSION_MINOR 0x0005
#define ENIGMATIC_CONFIG_VERSION ((ENIGMATIC_CONFIG_VERSION_MAJOR << 16) | ENIGMATIC_CONFIG_VERSION_MINOR)
diff --git a/src/bin/enigmatic/enigmatic_main.c b/src/bin/enigmatic/enigmatic_main.c
index 610aa19..3571315 100644
--- a/src/bin/enigmatic/enigmatic_main.c
+++ b/src/bin/enigmatic/enigmatic_main.c
@@ -136,9 +136,6 @@ enigmatic_init(Enigmatic *enigmatic)
enigmatic->pid = getpid();
enigmatic_pidfile_create(enigmatic);
- enigmatic_config_init();
- enigmatic->config = enigmatic_config_load();
-
enigmatic->device_refresh_interval = 900 * 10;
enigmatic->log.hour = -1;
enigmatic->interval = enigmatic->interval_update = enigmatic->config->interval;
@@ -225,13 +222,16 @@ int main(int argc, char **argv)
}
}
- lock_fd = enigmatic_log_lock();
- atexit(cb_exit);
-
ecore_init();
Enigmatic *enigmatic = calloc(1, sizeof(Enigmatic));
EINA_SAFETY_ON_NULL_RETURN_VAL(enigmatic, 1);
+
+ enigmatic_config_init();
+ enigmatic->config = enigmatic_config_load();
+
+ lock_fd = enigmatic_log_lock();
+ atexit(cb_exit);
enigmatic->lock_fd = lock_fd;
enigmatic_init(enigmatic);
diff --git a/src/bin/enigmatic/monitor/processes.c b/src/bin/enigmatic/monitor/processes.c
index c95faaf..e1f494e 100644
--- a/src/bin/enigmatic/monitor/processes.c
+++ b/src/bin/enigmatic/monitor/processes.c
@@ -182,32 +182,75 @@ _process_log_string(Enigmatic *enigmatic, pid_t pid, Object_Type object_type, co
*changed = 1;
}
-static void
-_process_network_totals_update(Proc_Info *proc, const Proc_Info *prev)
+static int64_t
+_process_elapsed_get(const Enigmatic *enigmatic, const Proc_Info *prev)
{
- uint64_t raw_in, raw_out;
+ int64_t elapsed = 0;
+
+ if ((prev) && (enigmatic->poll_time > prev->sample_time))
+ elapsed = enigmatic->poll_time - prev->sample_time;
+ if (elapsed <= 0)
+ elapsed = enigmatic->interval;
+ if (elapsed <= 0)
+ elapsed = 1;
+
+ return elapsed;
+}
+
+static void
+_process_io_rates_update(Enigmatic *enigmatic, Proc_Info *proc, const Proc_Info *prev)
+{
+ uint64_t raw_in, raw_out, raw_disk_read, raw_disk_write;
+ uint64_t total_in, total_out;
+ int64_t elapsed;
if (!proc) return;
raw_in = proc->net_in;
raw_out = proc->net_out;
+ raw_disk_read = proc->disk_read;
+ raw_disk_write = proc->disk_write;
+
proc->net_in_raw = raw_in;
proc->net_out_raw = raw_out;
+ proc->disk_read_raw = raw_disk_read;
+ proc->disk_write_raw = raw_disk_write;
+ proc->sample_time = enigmatic->poll_time;
if (!prev || (proc->start != prev->start))
{
proc->net_in = 0;
proc->net_out = 0;
+ proc->net_in_total = 0;
+ proc->net_out_total = 0;
+ proc->disk_read = 0;
+ proc->disk_write = 0;
return;
}
- proc->net_in = prev->net_in;
- proc->net_out = prev->net_out;
+ elapsed = _process_elapsed_get(enigmatic, prev);
+ total_in = prev->net_in_total;
+ total_out = prev->net_out_total;
if (raw_in >= prev->net_in_raw)
- proc->net_in += raw_in - prev->net_in_raw;
+ total_in += raw_in - prev->net_in_raw;
if (raw_out >= prev->net_out_raw)
- proc->net_out += raw_out - prev->net_out_raw;
+ total_out += raw_out - prev->net_out_raw;
+
+ proc->net_in_total = total_in;
+ proc->net_out_total = total_out;
+ proc->net_in = (total_in - prev->net_in_total) / elapsed;
+ proc->net_out = (total_out - prev->net_out_total) / elapsed;
+
+ if (raw_disk_read >= prev->disk_read_raw)
+ proc->disk_read = (raw_disk_read - prev->disk_read_raw) / elapsed;
+ else
+ proc->disk_read = 0;
+
+ if (raw_disk_write >= prev->disk_write_raw)
+ proc->disk_write = (raw_disk_write - prev->disk_write_raw) / elapsed;
+ else
+ proc->disk_write = 0;
}
static void
@@ -254,7 +297,7 @@ enigmatic_monitor_processes(Enigmatic *enigmatic, Eina_Hash **cache_hash)
*cache_hash = eina_hash_int32_new(cb_process_free);
EINA_LIST_FOREACH(processes, l, proc)
{
- _process_network_totals_update(proc, NULL);
+ _process_io_rates_update(enigmatic, proc, NULL);
DEBUG("add pid => %i => %s", proc->pid, proc->command);
proc->is_new = 1;
int32_t pid = proc->pid;
@@ -303,7 +346,7 @@ enigmatic_monitor_processes(Enigmatic *enigmatic, Eina_Hash **cache_hash)
EINA_LIST_FREE(processes, proc)
{
Proc_Info_Log old_log, new_log;
- int64_t cpu_time_delta, cpu_usage_now, cpu_usage_prev;
+ int64_t cpu_time_delta, cpu_usage_now, cpu_usage_prev, elapsed;
int32_t pid = proc->pid;
p1 = eina_hash_find(*cache_hash, &pid);
@@ -311,7 +354,7 @@ enigmatic_monitor_processes(Enigmatic *enigmatic, Eina_Hash **cache_hash)
{
Proc_Info_Log proc_log;
- _process_network_totals_update(proc, NULL);
+ _process_io_rates_update(enigmatic, proc, NULL);
proc_info_log_fill(proc, &proc_log);
enigmatic_log_process_write(enigmatic, &proc_log);
@@ -321,15 +364,17 @@ enigmatic_monitor_processes(Enigmatic *enigmatic, Eina_Hash **cache_hash)
continue;
}
+ elapsed = _process_elapsed_get(enigmatic, p1);
+
if (proc != p1)
- _process_network_totals_update(proc, p1);
+ _process_io_rates_update(enigmatic, proc, p1);
proc_info_log_fill(p1, &old_log);
proc_info_log_fill(proc, &new_log);
cpu_time_delta = new_log.cpu_time - old_log.cpu_time;
cpu_usage_prev = (int64_t) old_log.cpu_usage;
- cpu_usage_now = cpu_time_delta / enigmatic->interval;
+ cpu_usage_now = cpu_time_delta / elapsed;
_process_log_delta(enigmatic, proc->pid, PROCESS_PPID, (int64_t) new_log.ppid - (int64_t) old_log.ppid, &changed);
_process_log_delta(enigmatic, proc->pid, PROCESS_UID, (int64_t) new_log.uid - (int64_t) old_log.uid, &changed);
_process_log_delta(enigmatic, proc->pid, PROCESS_NICE, new_log.nice - old_log.nice, &changed);
diff --git a/src/bin/enigmatic/system/process.h b/src/bin/enigmatic/system/process.h
index fe5f032..10290e3 100644
--- a/src/bin/enigmatic/system/process.h
+++ b/src/bin/enigmatic/system/process.h
@@ -31,8 +31,13 @@ typedef struct _Proc_Info
uint64_t net_out;
uint64_t net_in_raw;
uint64_t net_out_raw;
+ uint64_t net_in_total;
+ uint64_t net_out_total;
uint64_t disk_read;
uint64_t disk_write;
+ uint64_t disk_read_raw;
+ uint64_t disk_write_raw;
+ uint32_t sample_time;
char *command;
char *arguments;
diff --git a/src/bin/ui/evisum_ui_process_list.c b/src/bin/ui/evisum_ui_process_list.c
index d3236d3..24a2267 100644
--- a/src/bin/ui/evisum_ui_process_list.c
+++ b/src/bin/ui/evisum_ui_process_list.c
@@ -24,7 +24,6 @@ typedef struct {
Ecore_Thread *thread;
Eina_Hash *icon_cache;
Ecore_Event_Handler *handler;
- Eina_Hash *proc_usage_cache;
Eina_Bool skip_wait;
Eina_Bool skip_update;
Eina_Bool update_every_item;
@@ -98,16 +97,6 @@ typedef struct {
#define PROC_COL_RESIZE_HIT_WIDTH 8
#define PROC_COL_MIN_WIDTH 48
-typedef struct {
- int64_t pid;
- int64_t start;
- uint32_t sample_time;
- uint64_t net_in;
- uint64_t net_out;
- uint64_t disk_read;
- uint64_t disk_write;
-} Proc_Usage_Cache;
-
typedef struct {
const char *name;
const char *desc;
@@ -1304,21 +1293,6 @@ _evisum_ui_process_list_uid_trim(Eina_List *list, uid_t uid) {
return list;
}
-static void
-_evisum_ui_process_list_usage_cache_free_cb(void *data) {
- Proc_Usage_Cache *cache = data;
- free(cache);
-}
-
-static uint32_t
-_evisum_ui_process_list_sample_time_get(void) {
- uint32_t sample_time;
-
- sample_time = evisum_engine_history_time_get();
- if (!sample_time) sample_time = evisum_engine_live_time_get();
- return sample_time;
-}
-
static Eina_Bool
_evisum_ui_process_list_process_ignore(Evisum_Ui_Process_List_View *view, Proc_Info *proc) {
Evisum_Ui *ui = view->ui;
@@ -1341,112 +1315,17 @@ _evisum_ui_process_list_process_ignore(Evisum_Ui_Process_List_View *view, Proc_I
}
static Eina_List *
-_evisum_ui_process_list_search_trim_cache(Eina_List *list, Evisum_Ui_Process_List_View *view) {
+_evisum_ui_process_list_search_trim(Eina_List *list, Evisum_Ui_Process_List_View *view) {
Eina_List *l, *l_next;
- Eina_List *purge = NULL;
Proc_Info *proc;
- Proc_Usage_Cache *cache;
- Eina_Hash *active_pids;
- uint32_t sample_time;
- void *d = NULL;
-
- sample_time = _evisum_ui_process_list_sample_time_get();
- active_pids = eina_hash_int64_new(NULL);
EINA_LIST_FOREACH_SAFE(list, l, l_next, proc) {
- int64_t id = proc->pid;
-
- if (active_pids)
- eina_hash_add(active_pids, &id, proc);
-
if (_evisum_ui_process_list_process_ignore(view, proc)) {
proc_info_free(proc);
list = eina_list_remove_list(list, l);
- } else {
- if ((cache = eina_hash_find(view->proc_usage_cache, &id))) {
- uint64_t net_in_abs = proc->net_in;
- uint64_t net_out_abs = proc->net_out;
- uint64_t disk_read_abs = proc->disk_read;
- uint64_t disk_write_abs = proc->disk_write;
- int elapsed = 1;
-
- if (sample_time && cache->sample_time && (sample_time > cache->sample_time))
- elapsed = sample_time - cache->sample_time;
-
- if (cache->start != proc->start) {
- cache->start = proc->start;
- cache->sample_time = sample_time;
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = proc->disk_read;
- cache->disk_write = proc->disk_write;
- proc->net_in = 0;
- proc->net_out = 0;
- proc->disk_read = 0;
- proc->disk_write = 0;
- continue;
- }
-
- if (cache->net_in && net_in_abs >= cache->net_in) proc->net_in = (net_in_abs - cache->net_in) / elapsed;
- else proc->net_in = 0;
-
- if (cache->net_out && net_out_abs >= cache->net_out)
- proc->net_out = (net_out_abs - cache->net_out) / elapsed;
- else proc->net_out = 0;
-
- if (cache->disk_read && disk_read_abs >= cache->disk_read)
- proc->disk_read = (disk_read_abs - cache->disk_read) / elapsed;
- else proc->disk_read = 0;
-
- if (cache->disk_write && disk_write_abs >= cache->disk_write)
- proc->disk_write = (disk_write_abs - cache->disk_write) / elapsed;
- else proc->disk_write = 0;
-
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = disk_read_abs;
- cache->disk_write = disk_write_abs;
- cache->sample_time = sample_time;
- } else {
- cache = calloc(1, sizeof(Proc_Usage_Cache));
- if (cache) {
- uint64_t net_in_abs = proc->net_in;
- uint64_t net_out_abs = proc->net_out;
- cache->pid = id;
- cache->start = proc->start;
- cache->sample_time = sample_time;
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = proc->disk_read;
- cache->disk_write = proc->disk_write;
- proc->net_in = 0;
- proc->net_out = 0;
- proc->disk_read = 0;
- proc->disk_write = 0;
- if (!eina_hash_add(view->proc_usage_cache, &id, cache))
- free(cache);
- }
- }
}
}
- if (active_pids) {
- Eina_Iterator *it = eina_hash_iterator_data_new(view->proc_usage_cache);
- while (eina_iterator_next(it, &d)) {
- cache = d;
- if (!eina_hash_find(active_pids, &cache->pid))
- purge = eina_list_prepend(purge, cache);
- }
- eina_iterator_free(it);
-
- EINA_LIST_FREE(purge, cache) {
- int64_t id = cache->pid;
- eina_hash_del(view->proc_usage_cache, &id, NULL);
- }
-
- eina_hash_free(active_pids);
- }
-
return list;
}
@@ -1463,7 +1342,7 @@ _evisum_ui_process_list_get(Evisum_Ui_Process_List_View *view) {
if (ui->proc.show_user) list = _evisum_ui_process_list_uid_trim(list, getuid());
- list = _evisum_ui_process_list_search_trim_cache(list, view);
+ list = _evisum_ui_process_list_search_trim(list, view);
list = _evisum_ui_process_list_sort(list, view);
return list;
@@ -2255,26 +2134,12 @@ _evisum_ui_process_list_win_alpha_set(Evisum_Ui_Process_List_View *view) {
static Eina_Bool
_evisum_ui_process_list_config_changed_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) {
- Eina_Iterator *it;
Evisum_Ui *ui;
Evisum_Ui_Process_List_View *view;
- void *d = NULL;
view = data;
ui = view->ui;
- it = eina_hash_iterator_data_new(view->proc_usage_cache);
- while (eina_iterator_next(it, &d)) {
- Proc_Usage_Cache *cache = d;
- cache->start = 0;
- cache->net_in = 0;
- cache->net_out = 0;
- cache->disk_read = 0;
- cache->disk_write = 0;
- cache->sample_time = 0;
- }
- eina_iterator_free(it);
-
evisum_ui_widget_exel_genlist_policy_set(view->widget_exel, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
view->skip_wait = 1;
@@ -2388,7 +2253,6 @@ _evisum_ui_process_list_win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
if (view->widget_exel) evisum_ui_widget_exel_free(view->widget_exel);
- if (view->proc_usage_cache) eina_hash_free(view->proc_usage_cache);
if (view->history.lock_init) eina_lock_free(&view->history.lock);
free(view);
@@ -2459,7 +2323,6 @@ evisum_ui_process_list_win_add(Evisum_Ui *ui) {
elm_object_content_set(win, content);
view->icon_cache = evisum_icon_cache_new();
- view->proc_usage_cache = eina_hash_int64_new(_evisum_ui_process_list_usage_cache_free_cb);
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _evisum_ui_process_list_win_del_cb, view);
evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _evisum_ui_process_list_win_resize_cb, view);
diff --git a/src/bin/ui/evisum_ui_process_view.c b/src/bin/ui/evisum_ui_process_view.c
index cf47c1b..385db1c 100644
--- a/src/bin/ui/evisum_ui_process_view.c
+++ b/src/bin/ui/evisum_ui_process_view.c
@@ -29,7 +29,6 @@ typedef struct {
Eina_Bool ignore_initial_resize;
Eina_Hash *icon_cache;
- Eina_Hash *proc_usage_cache;
struct {
Evas_Object *entry_cmd;
@@ -75,23 +74,6 @@ typedef struct {
} Evisum_Ui_Process_View;
-typedef struct {
- int64_t start;
- uint32_t sample_time;
- int64_t cpu_time;
- double cpu_usage;
-#if defined(__linux__)
- uint64_t net_in;
- uint64_t net_out;
- uint64_t disk_read;
- uint64_t disk_write;
- uint64_t net_in_rate;
- uint64_t net_out_rate;
- uint64_t disk_read_rate;
- uint64_t disk_write_rate;
-#endif
-} Proc_Usage_Cache;
-
static uint64_t _evisum_ui_process_view_mem_total_get(Evisum_Ui_Process_View *view);
static void _evisum_ui_process_view_progressbar_unset(Evas_Object *pb);
static void _evisum_ui_process_view_progressbar_mem_set(Evas_Object *pb, uint64_t used,
@@ -118,20 +100,6 @@ _evisum_ui_process_view_exe_response(const char *command) {
return lines;
}
-static void
-_evisum_ui_process_view_usage_cache_free_cb(void *data) {
- Proc_Usage_Cache *cache = data;
- free(cache);
-}
-
-static uint32_t
-_evisum_ui_process_view_sample_time_get(void) {
- uint32_t sample_time;
-
- sample_time = evisum_engine_live_time_get();
- return sample_time;
-}
-
static void
_evisum_ui_process_view_btn_ppid_clicked_cb(void *data, Evas_Object *obj, void *event_info) {
Evisum_Ui_Process_View *view;
@@ -499,21 +467,9 @@ static void
_evisum_ui_process_view_proc_info_feedback_cb(void *data, Ecore_Thread *thread, void *msg) {
Evisum_Ui_Process_View *view;
Proc_Info *proc;
- Proc_Usage_Cache *cache;
- int64_t id;
- int elapsed;
- uint32_t sample_time;
-#if defined(__linux__)
- uint64_t net_in_abs = 0;
- uint64_t net_out_abs = 0;
- uint64_t disk_read_abs = 0;
- uint64_t disk_write_abs = 0;
-#endif
view = data;
proc = msg;
- elapsed = 1;
- sample_time = _evisum_ui_process_view_sample_time_get();
if (!proc || (view->start && (proc->start != view->start))) {
if (proc) proc_info_free(proc);
@@ -526,104 +482,6 @@ _evisum_ui_process_view_proc_info_feedback_cb(void *data, Ecore_Thread *thread,
return;
}
- if (!view->proc_usage_cache)
- view->proc_usage_cache = eina_hash_int64_new(_evisum_ui_process_view_usage_cache_free_cb);
-
- id = proc->pid;
- cache = view->proc_usage_cache ? eina_hash_find(view->proc_usage_cache, &id) : NULL;
-#if defined(__linux__)
- disk_read_abs = proc->disk_read;
- disk_write_abs = proc->disk_write;
- net_in_abs = proc->net_in;
- net_out_abs = proc->net_out;
-#endif
- if (!cache) {
- cache = calloc(1, sizeof(Proc_Usage_Cache));
- if (cache) {
- cache->start = proc->start;
- cache->sample_time = sample_time;
- cache->cpu_time = proc->cpu_time;
-#if defined(__linux__)
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = disk_read_abs;
- cache->disk_write = disk_write_abs;
- proc->net_in = 0;
- proc->net_out = 0;
- proc->disk_read = 0;
- proc->disk_write = 0;
-#endif
- proc->cpu_usage = 0.0;
- if (!view->proc_usage_cache || !eina_hash_add(view->proc_usage_cache, &id, cache))
- free(cache);
- } else {
- proc->cpu_usage = 0.0;
-#if defined(__linux__)
- proc->net_in = 0;
- proc->net_out = 0;
- proc->disk_read = 0;
- proc->disk_write = 0;
-#endif
- }
- } else if (cache->start != proc->start) {
- cache->start = proc->start;
- cache->sample_time = sample_time;
- cache->cpu_time = proc->cpu_time;
-#if defined(__linux__)
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = disk_read_abs;
- cache->disk_write = disk_write_abs;
- proc->net_in = 0;
- proc->net_out = 0;
- proc->disk_read = 0;
- proc->disk_write = 0;
-#endif
- proc->cpu_usage = 0.0;
- } else if (sample_time <= cache->sample_time) {
- proc->cpu_usage = cache->cpu_usage;
-#if defined(__linux__)
- proc->net_in = cache->net_in_rate;
- proc->net_out = cache->net_out_rate;
- proc->disk_read = cache->disk_read_rate;
- proc->disk_write = cache->disk_write_rate;
-#endif
- } else {
- if (sample_time && cache->sample_time && (sample_time > cache->sample_time))
- elapsed = sample_time - cache->sample_time;
-
- if (proc->cpu_time >= cache->cpu_time)
- proc->cpu_usage = (double) (proc->cpu_time - cache->cpu_time) / elapsed;
- else proc->cpu_usage = 0.0;
- cache->cpu_usage = proc->cpu_usage;
- cache->cpu_time = proc->cpu_time;
- cache->sample_time = sample_time;
-#if defined(__linux__)
- if (net_in_abs >= cache->net_in) proc->net_in = (net_in_abs - cache->net_in) / elapsed;
- else proc->net_in = 0;
-
- if (net_out_abs >= cache->net_out) proc->net_out = (net_out_abs - cache->net_out) / elapsed;
- else proc->net_out = 0;
-
- if (disk_read_abs >= cache->disk_read)
- proc->disk_read = (disk_read_abs - cache->disk_read) / elapsed;
- else proc->disk_read = 0;
-
- if (disk_write_abs >= cache->disk_write)
- proc->disk_write = (disk_write_abs - cache->disk_write) / elapsed;
- else proc->disk_write = 0;
-
- cache->net_in_rate = proc->net_in;
- cache->net_out_rate = proc->net_out;
- cache->disk_read_rate = proc->disk_read;
- cache->disk_write_rate = proc->disk_write;
- cache->net_in = net_in_abs;
- cache->net_out = net_out_abs;
- cache->disk_read = disk_read_abs;
- cache->disk_write = disk_write_abs;
-#endif
- }
-
_evisum_ui_process_view_general_view_update(view, proc);
proc_info_free(proc);
@@ -1131,7 +989,6 @@ _evisum_ui_process_view_win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object
evisum_ui_config_save(view->ui);
- if (view->proc_usage_cache) eina_hash_free(view->proc_usage_cache);
free(view->selected_cmd);
if (view->children.widget_exel) evisum_ui_widget_exel_free(view->children.widget_exel);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.