aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2017-08-07 08:26:49 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2017-08-09 02:09:10 -0700
commited3f06ac01735c3c1434e10d79dacbc5821a9ca4 (patch)
tree290c1dda740554e073065505d995e9240761421c
parentd4446aa4c23f1fc8b2b2046930e8604bf802d64b (diff)
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 <pburt0@gmail.com>
-rw-r--r--includes/devices.h1
-rw-r--r--modules/devices.c46
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 <vendor.h>
+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)