forked from enlightenment/evisum
machine: Tidy this up, fix leakages.
This commit is contained in:
parent
8a5e2704e0
commit
1450752152
|
@ -79,18 +79,6 @@
|
|||
# define CPU_STATES 5
|
||||
#endif
|
||||
|
||||
/* Filter requests and results */
|
||||
#define RESULTS_CPU 0x01
|
||||
#define RESULTS_MEM 0x02
|
||||
#define RESULTS_PWR 0x04
|
||||
#define RESULTS_TMP 0x08
|
||||
#define RESULTS_AUD 0x10
|
||||
#define RESULTS_NET 0x20
|
||||
#define RESULTS_DEFAULT 0x3f
|
||||
#define RESULTS_MEM_MB 0x40
|
||||
#define RESULTS_MEM_GB 0x80
|
||||
#define RESULTS_CPU_CORES 0x100
|
||||
|
||||
#if defined(__linux__)
|
||||
static char *
|
||||
file_contents(const char *path)
|
||||
|
@ -534,7 +522,6 @@ _memory_usage_get(meminfo_t *memory)
|
|||
}
|
||||
|
||||
struct xswdev xsw;
|
||||
/* previous mib is important for this one... */
|
||||
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
|
@ -567,7 +554,6 @@ _memory_usage_get(meminfo_t *memory)
|
|||
if (sysctl(bcstats_mib, 3, &bcstats, &len, NULL, 0) == -1)
|
||||
return;
|
||||
|
||||
/* Don't fail if there's not swap! */
|
||||
nswap = swapctl(SWAP_NSWAP, 0, 0);
|
||||
if (nswap == 0)
|
||||
goto swap_out;
|
||||
|
@ -1137,7 +1123,7 @@ _linux_generic_network_status(unsigned long int *in,
|
|||
#endif
|
||||
|
||||
static void
|
||||
_network_transfer_get(Sys_Info *results)
|
||||
_network_transfer_get(Sys_Info *sysinfo)
|
||||
{
|
||||
unsigned long first_in = 0, first_out = 0;
|
||||
unsigned long last_in = 0, last_out = 0;
|
||||
|
@ -1154,113 +1140,76 @@ _network_transfer_get(Sys_Info *results)
|
|||
usleep(1000000);
|
||||
_freebsd_generic_network_status(&last_in, &last_out);
|
||||
#endif
|
||||
results->incoming = last_in - first_in;
|
||||
results->outgoing = last_out - first_out;
|
||||
}
|
||||
|
||||
static double
|
||||
_results_cpu(cpu_core_t **cores, int cpu_count)
|
||||
{
|
||||
double total = 0;
|
||||
for (int i = 0; i < cpu_count; i++)
|
||||
total += cores[i]->percent;
|
||||
|
||||
total = total / cpu_count;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
void
|
||||
system_power_state_get(power_t *power)
|
||||
{
|
||||
if (_power_battery_count_get(power))
|
||||
_power_state_get(power);
|
||||
}
|
||||
|
||||
bool
|
||||
system_network_transfer_get(unsigned long *incoming, unsigned long *outgoing)
|
||||
{
|
||||
unsigned long first_in = 0, first_out = 0;
|
||||
unsigned long last_in = 0, last_out = 0;
|
||||
#if defined(__linux__)
|
||||
_linux_generic_network_status(&first_in, &first_out);
|
||||
usleep(1000000);
|
||||
_linux_generic_network_status(&last_in, &last_out);
|
||||
#elif defined(__OpenBSD__)
|
||||
_openbsd_generic_network_status(&first_in, &first_out);
|
||||
usleep(1000000);
|
||||
_openbsd_generic_network_status(&last_in, &last_out);
|
||||
#elif defined(__MacOS__) || defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
_freebsd_generic_network_status(&first_in, &first_out);
|
||||
usleep(1000000);
|
||||
_freebsd_generic_network_status(&last_in, &last_out);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
*incoming = last_in - first_in;
|
||||
*outgoing = last_out - first_out;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int
|
||||
system_cpu_memory_get(double *percent_cpu, long *memory_total, long *memory_used)
|
||||
{
|
||||
Sys_Info results;
|
||||
|
||||
memset(&results, 0, sizeof(results));
|
||||
|
||||
results.cores = _cpu_cores_state_get(&results.cpu_count);
|
||||
|
||||
_memory_usage_get(&results.memory);
|
||||
|
||||
*percent_cpu = _results_cpu(results.cores, results.cpu_count);
|
||||
*memory_total = results.memory.total;
|
||||
*memory_used = results.memory.used;
|
||||
|
||||
for (int i = 0; i < results.cpu_count; i++)
|
||||
{
|
||||
free(results.cores[i]);
|
||||
}
|
||||
|
||||
free(results.cores);
|
||||
|
||||
return results.cpu_count;
|
||||
sysinfo->incoming = last_in - first_in;
|
||||
sysinfo->outgoing = last_out - first_out;
|
||||
}
|
||||
|
||||
static void *
|
||||
_network_transfer_get_thread_cb(void *arg)
|
||||
{
|
||||
Sys_Info *results = arg;
|
||||
Sys_Info *sysinfo = arg;
|
||||
|
||||
_network_transfer_get(results);
|
||||
_network_transfer_get(sysinfo);
|
||||
|
||||
return (void *)0;
|
||||
}
|
||||
|
||||
void
|
||||
sys_info_all_free(Sys_Info *sysinfo)
|
||||
{
|
||||
sensor_t *snsr;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sysinfo->cpu_count; i++)
|
||||
{
|
||||
free(sysinfo->cores[i]);
|
||||
}
|
||||
free(sysinfo->cores);
|
||||
|
||||
for (i = 0; i < sysinfo->snsr_count; i++)
|
||||
{
|
||||
snsr = sysinfo->sensors[i];
|
||||
if (snsr->name) free(snsr->name);
|
||||
free(snsr);
|
||||
}
|
||||
if (sysinfo->sensors)
|
||||
free(sysinfo->sensors);
|
||||
|
||||
for (i = 0; i < sysinfo->power.battery_count; i++)
|
||||
{
|
||||
if (sysinfo->power.battery_names[i])
|
||||
free(sysinfo->power.battery_names[i]);
|
||||
free(sysinfo->power.batteries[i]);
|
||||
}
|
||||
if (sysinfo->power.batteries)
|
||||
free(sysinfo->power.batteries);
|
||||
|
||||
free(sysinfo);
|
||||
}
|
||||
|
||||
Sys_Info *
|
||||
sys_info_all_get(void)
|
||||
{
|
||||
Sys_Info *results;
|
||||
Sys_Info *sysinfo;
|
||||
void *ret;
|
||||
pthread_t tid;
|
||||
int error;
|
||||
|
||||
results = calloc(1, sizeof(Sys_Info));
|
||||
if (!results) return NULL;
|
||||
sysinfo = calloc(1, sizeof(Sys_Info));
|
||||
if (!sysinfo) return NULL;
|
||||
|
||||
results->cores = _cpu_cores_state_get(&results->cpu_count);
|
||||
sysinfo->cores = _cpu_cores_state_get(&sysinfo->cpu_count);
|
||||
|
||||
_memory_usage_get(&results->memory);
|
||||
_memory_usage_get(&sysinfo->memory);
|
||||
|
||||
error = pthread_create(&tid, NULL, _network_transfer_get_thread_cb, results);
|
||||
error = pthread_create(&tid, NULL, _network_transfer_get_thread_cb, sysinfo);
|
||||
if (error)
|
||||
_network_transfer_get(results);
|
||||
_network_transfer_get(sysinfo);
|
||||
|
||||
if (_power_battery_count_get(&results->power))
|
||||
_power_state_get(&results->power);
|
||||
if (_power_battery_count_get(&sysinfo->power))
|
||||
_power_state_get(&sysinfo->power);
|
||||
|
||||
_sensors_thermal_get(results);
|
||||
_sensors_thermal_get(sysinfo);
|
||||
|
||||
if (!error)
|
||||
{
|
||||
|
@ -1268,6 +1217,6 @@ sys_info_all_get(void)
|
|||
pthread_join(tid, ret);
|
||||
}
|
||||
|
||||
return results;
|
||||
return sysinfo;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float percent;
|
||||
|
@ -31,8 +33,6 @@ typedef struct
|
|||
bool invalid;
|
||||
} sensor_t;
|
||||
|
||||
#define MAX_BATTERIES 10
|
||||
|
||||
typedef struct
|
||||
{
|
||||
double charge_full;
|
||||
|
@ -47,15 +47,12 @@ typedef struct
|
|||
int battery_count;
|
||||
|
||||
bat_t **batteries;
|
||||
|
||||
// Necessary evils.
|
||||
#define MAX_BATTERIES 10
|
||||
char *battery_names[MAX_BATTERIES];
|
||||
int *bat_mibs[MAX_BATTERIES];
|
||||
int ac_mibs[5];
|
||||
} power_t;
|
||||
|
||||
#define INVALID_TEMP -999
|
||||
|
||||
typedef struct Sys_Info Sys_Info;
|
||||
struct Sys_Info
|
||||
{
|
||||
|
@ -74,6 +71,9 @@ struct Sys_Info
|
|||
Sys_Info *
|
||||
sys_info_all_get(void);
|
||||
|
||||
void
|
||||
sys_info_all_free(Sys_Info *);
|
||||
|
||||
int
|
||||
system_cpu_online_count_get();
|
||||
|
||||
|
|
|
@ -1586,7 +1586,6 @@ _sys_info_all_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msg)
|
|||
for (int i = 0; i < sysinfo->cpu_count; i++)
|
||||
{
|
||||
cpu_usage += sysinfo->cores[i]->percent;
|
||||
free(sysinfo->cores[i]);
|
||||
}
|
||||
|
||||
cpu_usage = cpu_usage / system_cpu_online_count_get();
|
||||
|
@ -1604,8 +1603,7 @@ _sys_info_all_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msg)
|
|||
evisum_size_format(sysinfo->memory.used),
|
||||
evisum_size_format(sysinfo->memory.total)));
|
||||
out:
|
||||
free(sysinfo->cores);
|
||||
free(sysinfo);
|
||||
sys_info_all_free(sysinfo);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -68,13 +68,7 @@ _battery_usage_add(Evas_Object *box, power_t *power)
|
|||
elm_box_pack_end(vbox, hbox);
|
||||
elm_object_content_set(frame, vbox);
|
||||
elm_box_pack_end(box, frame);
|
||||
|
||||
free(power->battery_names[i]);
|
||||
free(power->batteries[i]);
|
||||
}
|
||||
|
||||
if (power->batteries)
|
||||
free(power->batteries);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -86,12 +80,7 @@ _sensor_usage_add(Evas_Object *box, Sys_Info *sysinfo)
|
|||
{
|
||||
snsr = sysinfo->sensors[i];
|
||||
printf("%s => %1.2f\n", snsr->name, snsr->value);
|
||||
if (snsr->name)
|
||||
free(snsr->name);
|
||||
free(snsr);
|
||||
}
|
||||
if (sysinfo->sensors)
|
||||
free(sysinfo->sensors);
|
||||
}
|
||||
|
||||
static char *
|
||||
|
|
Loading…
Reference in New Issue