From 05c4a4c9451b7b07577255f7927cec6d70f2cf8d Mon Sep 17 00:00:00 2001 From: Burt P Date: Thu, 10 Aug 2017 11:20:16 -0500 Subject: Separate processor name and description + count cores and threads * add cpu_procs_cores_threads() function to get counts from sysfs/topology * each platform must now provide processor_name() and processor_describe() * processor_name_default(): returns a list of unique processor->model_name * processor_describe_default(): returns "N physical; M cores; L threads" * processor_describe_by_counting_names(): returns a list of unique processor->model_name with Nx prefix (ex: "4x ARM Cortex A53 + 4x ARM Cortex A33") * x86: _name and _describe use defaults * arm: _name returns name of SOC, if available, _describe returns processor_describe_by_counting_names() * all other platforms: _name and _describe use defaults * Computer module summary now shows both name and description for CPU Signed-off-by: Burt P --- modules/devices.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) (limited to 'modules/devices.c') diff --git a/modules/devices.c b/modules/devices.c index 8f1b19e3..affa2a35 100644 --- a/modules/devices.c +++ b/modules/devices.c @@ -130,7 +130,49 @@ static gint proc_cmp(Processor *a, Processor *b) { return g_strcmp0(a->model_name, b->model_name); } -gchar *processor_describe(GSList * processors) +gchar *processor_describe_default(GSList * processors) +{ + int packs, cores, threads; + cpu_procs_cores_threads(&packs, &cores, &threads); + /* if topology info was available, else fallback to old method */ + if (cores > 0) + return g_strdup_printf("%d physical processor(s); %d core(s); %d thread(s)", packs, cores, threads); + else + return processor_describe_by_counting_names(processors); +} + +gchar *processor_name_default(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%s", ret, strlen(ret) ? "; " : "", cur_str); + cur_str = p->model_name; + cur_count = 1; + } else { + cur_count++; + } + } + } + ret = h_strdup_cprintf("%s%s", ret, strlen(ret) ? "; " : "", cur_str); + g_slist_free(tmp); + return ret; +} + +gchar *processor_describe_by_counting_names(GSList * processors) { gchar *ret = g_strdup(""); GSList *tmp, *l; @@ -162,11 +204,29 @@ gchar *processor_describe(GSList * processors) } gchar *get_processor_name(void) +{ + scan_processors(FALSE); + return processor_name(processors); +} + +gchar *get_processor_desc(void) { scan_processors(FALSE); return processor_describe(processors); } +gchar *get_processor_name_and_desc(void) +{ + scan_processors(FALSE); + gchar* name = processor_name(processors); + gchar* desc = processor_describe(processors); + gchar* nd = g_strdup_printf("%s\n%s", name, desc); + g_free(name); + g_free(desc); + return nd; +} + + gchar *get_storage_devices(void) { scan_storage(FALSE); @@ -260,6 +320,8 @@ ShellModuleMethod *hi_exported_methods(void) static ShellModuleMethod m[] = { {"getProcessorCount", get_processor_count}, {"getProcessorName", get_processor_name}, + {"getProcessorDesc", get_processor_desc}, + {"getProcessorNameAndDesc", get_processor_name_and_desc}, {"getProcessorFrequency", get_processor_frequency}, {"getMemoryTotal", get_memory_total}, {"getStorageDevices", get_storage_devices}, -- cgit v1.2.3