From ed3f06ac01735c3c1434e10d79dacbc5821a9ca4 Mon Sep 17 00:00:00 2001 From: Burt P Date: Mon, 7 Aug 2017 08:26:49 -0500 Subject: Handle mixed cores in get_processor_name(), ex: big.LITTLE or Tegra In the future, I think a processor will need a name and a description. Name as the straight name of the processor or SOC, and description as what name is now, with 4x and whatnot. x86 description might be "8 cores, 16 threads" or similar. Signed-off-by: Burt P --- includes/devices.h | 1 + modules/devices.c | 46 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/includes/devices.h b/includes/devices.h index 602024b0..0699032c 100644 --- a/includes/devices.h +++ b/includes/devices.h @@ -40,6 +40,7 @@ GSList *processor_scan(void); void get_processor_strfamily(Processor * processor); gchar *processor_get_detailed_info(Processor * processor); gchar *processor_get_info(GSList * processors); +gchar *processor_describe(GSList * processors); /* Memory */ void init_memory_labels(void); diff --git a/modules/devices.c b/modules/devices.c index 0984851c..d3fd1110 100644 --- a/modules/devices.c +++ b/modules/devices.c @@ -126,19 +126,45 @@ gchar *lginterval = NULL; #include +gint proc_cmp (Processor *a, Processor *b) { + return g_strcmp0(a->model_name, b->model_name); +} + +gchar *processor_describe(GSList * processors) +{ + gchar *ret = g_strdup(""); + GSList *tmp, *l; + Processor *p; + gchar *cur_str = NULL; + gint cur_count = 0; + + tmp = g_slist_copy(processors); + tmp = g_slist_sort(tmp, (GCompareFunc)proc_cmp); + + for (l = tmp; l; l = l->next) { + p = (Processor*)l->data; + if (cur_str == NULL) { + cur_str = p->model_name; + cur_count = 1; + } else { + if(g_strcmp0(cur_str, p->model_name)) { + ret = h_strdup_cprintf("%s%dx %s", ret, strlen(ret) ? " + " : "", cur_count, cur_str); + cur_str = p->model_name; + cur_count = 1; + } else { + cur_count++; + } + } + } + ret = h_strdup_cprintf("%s%dx %s", ret, strlen(ret) ? " + " : "", cur_count, cur_str); + g_slist_free(tmp); + return ret; +} + gchar *get_processor_name(void) { scan_processors(FALSE); - - Processor *p = (Processor *) processors->data; - - if (g_slist_length(processors) > 1) { - return idle_free(g_strdup_printf("%dx %s", - g_slist_length(processors), - p->model_name)); - } else { - return p->model_name; - } + return processor_describe(processors); } gchar *get_storage_devices(void) -- cgit v1.2.3