diff --git a/src/system.c b/src/system.c index 3ad382b..92d36a6 100644 --- a/src/system.c +++ b/src/system.c @@ -1196,6 +1196,8 @@ system_stats_all_get(results_t *results) results->cores = _cpu_cores_state_get(&results->cpu_count); + _memory_usage_get(&results->memory); + error = pthread_create(&tid, NULL, _network_transfer_get_thread_cb, results); if (error) _network_transfer_get(results); diff --git a/src/ui.c b/src/ui.c index bac9901..dff18d0 100644 --- a/src/ui.c +++ b/src/ui.c @@ -20,58 +20,7 @@ static void _disk_view_update(Ui *ui); static void _extra_view_update(Ui *ui, results_t *results); static void -_system_stats(void *data, Ecore_Thread *thread) -{ - Ui *ui; - Sys_Stats *sys; - int i; - - ui = data; - - while (1) - { - sys = malloc(sizeof(Sys_Stats)); - sys->cpu_count = system_cpu_memory_get(&sys->cpu_usage, &sys->mem_total, &sys->mem_used); - - ecore_thread_feedback(thread, sys); - - for (i = 0; i < ui->poll_delay * 2; i++) - { - if (ecore_thread_check(thread)) - return; - - usleep(500000); - } - } -} - -static void -_system_stats_feedback_cb(void *data, Ecore_Thread *thread, void *msg) -{ - Ui *ui; - Sys_Stats *sys; - - ui = data; - sys = msg; - - if (ecore_thread_check(thread)) - goto out; - - _memory_total = sys->mem_total >>= 10; - _memory_used = sys->mem_used >>= 10; - - elm_progressbar_value_set(ui->progress_cpu, (double)sys->cpu_usage / 100); - elm_progressbar_value_set(ui->progress_mem, (double)((sys->mem_total / 100.0) * sys->mem_used) / 1000000); - - if (time(NULL) % 2) - _disk_view_update(ui); - -out: - free(sys); -} - -static void -_extra_stats(void *data, Ecore_Thread *thread) +_system_stats_thread(void *data, Ecore_Thread *thread) { Ui *ui; int i; @@ -95,24 +44,35 @@ _extra_stats(void *data, Ecore_Thread *thread) } static void -_extra_stats_feedback_cb(void *data, Ecore_Thread *thread, void *msg) +_system_stats_thread_feedback_cb(void *data, Ecore_Thread *thread, void *msg) { Ui *ui; results_t *results; + double cpu_usage = 0.0; int i; ui = data; results = msg; + _disk_view_update(ui); _extra_view_update(ui, results); for (i = 0; i < results->cpu_count; i++) { + cpu_usage += results->cores[i]->percent; + free(results->cores[i]); } - free(results->cores); + cpu_usage = cpu_usage / results->cpu_count; + _memory_total = results->memory.total >>= 10; + _memory_used = results->memory.used >>= 10; + + elm_progressbar_value_set(ui->progress_cpu, (double) cpu_usage / 100); + elm_progressbar_value_set(ui->progress_mem, (double)((results->memory.total / 100.0) * results->memory.used) / 1000000); + + free(results->cores); free(results); } @@ -256,8 +216,6 @@ _sort_by_state(const void *p1, const void *p2) static void _fields_append(Ui *ui, Proc_Stats *proc) { - // FIXME: hiding self from the list until more efficient. - // It's not too bad but it pollutes a lovely list. if (ui->program_pid == proc->pid) return; @@ -628,7 +586,6 @@ _process_panel_pids_update(Ui *ui) if (!ui->panel_visible) return; - // FIXME: something fishy going on here (mem-wise). list = proc_info_all_get(); list = eina_list_sort(list, eina_list_count(list), _sort_by_pid); @@ -1040,6 +997,7 @@ _extra_view_update(Ui *ui, results_t *results) elm_object_text_set(frame, "Battery (plugged in)"); else elm_object_text_set(frame, "Battery"); + evas_object_show(frame); progress = elm_progressbar_add(frame); @@ -1909,8 +1867,7 @@ ui_add(Evas_Object *parent) _disk_view_update(ui); _process_panel_update(ui); - ecore_thread_feedback_run(_system_stats, _system_stats_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); - ecore_thread_feedback_run(_extra_stats, _extra_stats_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); + ecore_thread_feedback_run(_system_stats_thread, _system_stats_thread_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); ecore_thread_feedback_run(_system_process_list, _system_process_list_feedback_cb, _thread_end_cb, _thread_error_cb, ui, EINA_FALSE); }