aboutsummaryrefslogtreecommitdiff
path: root/modules/benchmark.c
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2020-05-09 17:18:51 -0700
committerLeandro Pereira <leandro@hardinfo.org>2020-05-09 17:18:51 -0700
commit605f2846ff85de6ed0c2a63e14a341c3c4604a15 (patch)
treebd042c94377a66d92142212406a1c4ce9e5f7c3e /modules/benchmark.c
parent21558e4c5b47a934904c376a13c9eb74bcc0246a (diff)
Generate benchmark JSON instead of the legacy .conf format
No need to keep the .conf format around for a while since the only usage of this function was for the SyncManager, that has been disabled for a while.
Diffstat (limited to 'modules/benchmark.c')
-rw-r--r--modules/benchmark.c104
1 files changed, 76 insertions, 28 deletions
diff --git a/modules/benchmark.c b/modules/benchmark.c
index 02cb9085..c0f3ff16 100644
--- a/modules/benchmark.c
+++ b/modules/benchmark.c
@@ -578,7 +578,8 @@ static gchar *benchmark_include_results_internal(bench_value this_machine_value,
/* prepare for shell */
moreinfo_del_with_prefix("BENCH");
- const struct bench_window window = get_bench_window(result_list, this_machine);
+ const struct bench_window window =
+ get_bench_window(result_list, this_machine);
for (i = 0, li = result_list; li; li = g_slist_next(li), i++) {
bench_result *br = li->data;
@@ -781,46 +782,93 @@ const ModuleAbout *hi_module_get_about(void)
static gchar *get_benchmark_results()
{
+ void (*scan_callback)(gboolean);
+ JsonBuilder *builder;
+ JsonGenerator *generator;
+ JsonNode *root;
+ bench_machine *this_machine;
+ gchar *out;
gint i;
- void (*scan_callback)(gboolean rescan);
sending_benchmark_results = TRUE;
-
- gchar *machine = module_call_method("devices::getProcessorName");
- gchar *machineclock = module_call_method("devices::getProcessorFrequency");
- gchar *machineram = module_call_method("computer::getMemoryTotal");
- gchar *result = g_strdup_printf("[param]\n"
- "machine=%s\n"
- "machineclock=%s\n"
- "machineram=%s\n"
- "nbenchmarks=%zu\n",
- machine, machineclock, machineram,
- G_N_ELEMENTS(entries) - 1);
for (i = 0; i < G_N_ELEMENTS(entries); i++) {
- scan_callback = entries[i].scan_callback;
- if (!scan_callback)
+ if (!entries[i].name || !entries[i].scan_callback)
+ continue;
+ if (entries[i].flags & MODULE_FLAG_HIDE)
continue;
+ scan_callback = entries[i].scan_callback;
+ if (scan_callback)
+ scan_callback(bench_results[i].result < 0.0);
+ }
+ sending_benchmark_results = FALSE;
+
+ this_machine = bench_machine_this();
+ builder = json_builder_new();
+ json_builder_begin_object(builder);
+ for (i = 0; i < G_N_ELEMENTS(entries); i++) {
+ if (!entries[i].name || entries[i].flags & MODULE_FLAG_HIDE)
+ continue;
if (bench_results[i].result < 0.0) {
- /* benchmark was cancelled */
- scan_callback(TRUE);
- } else {
- scan_callback(FALSE);
+ /* Benchmark failed? */
+ continue;
}
- result = h_strdup_cprintf("[bench%d]\n"
- "name=%s\n"
- "value=%f\n",
- result, i, entries[i].name, bench_results[i]);
+ json_builder_set_member_name(builder, entries[i].name);
+
+ json_builder_begin_object(builder);
+
+#define ADD_JSON_VALUE(type, name, value) \
+ do { \
+ json_builder_set_member_name(builder, (name)); \
+ json_builder_add_##type##_value(builder, (value)); \
+ } while (0)
+
+ ADD_JSON_VALUE(string, "Board", this_machine->board);
+ ADD_JSON_VALUE(int, "MemoryInKiB", this_machine->memory_kiB);
+ ADD_JSON_VALUE(string, "CpuName", this_machine->cpu_name);
+ ADD_JSON_VALUE(string, "CpuDesc", this_machine->cpu_desc);
+ ADD_JSON_VALUE(string, "CpuConfig", this_machine->cpu_config);
+ ADD_JSON_VALUE(string, "CpuConfig", this_machine->cpu_config);
+ ADD_JSON_VALUE(string, "OpenGlRenderer", this_machine->ogl_renderer);
+ ADD_JSON_VALUE(string, "GpuDesc", this_machine->gpu_desc);
+ ADD_JSON_VALUE(int, "NumCpus", this_machine->processors);
+ ADD_JSON_VALUE(int, "NumCores", this_machine->cores);
+ ADD_JSON_VALUE(int, "NumThreads", this_machine->threads);
+ ADD_JSON_VALUE(string, "MachineId", this_machine->mid);
+ ADD_JSON_VALUE(int, "PointerBits", this_machine->ptr_bits);
+ ADD_JSON_VALUE(int, "DataFromSuperUser", this_machine->is_su_data);
+ ADD_JSON_VALUE(int, "PhysicalMemoryInMiB",
+ this_machine->memory_phys_MiB);
+ ADD_JSON_VALUE(string, "MemoryTypes", this_machine->ram_types);
+ ADD_JSON_VALUE(int, "MachineDataVersion",
+ this_machine->machine_data_version);
+
+ ADD_JSON_VALUE(boolean, "Legacy", FALSE);
+ ADD_JSON_VALUE(string, "ExtraInfo", bench_results[i].extra);
+ ADD_JSON_VALUE(string, "UserNote", bench_results[i].user_note);
+ ADD_JSON_VALUE(double, "BenchmarkResult", bench_results[i].result);
+ ADD_JSON_VALUE(double, "ElapsedTime", bench_results[i].elapsed_time);
+ ADD_JSON_VALUE(int, "UsedThreads", bench_results[i].threads_used);
+ ADD_JSON_VALUE(int, "BenchmarkVersion", bench_results[i].revision);
+
+#undef ADD_JSON_VALUE
+
+ json_builder_end_object(builder);
}
+ json_builder_end_object(builder);
- g_free(machine);
- g_free(machineclock);
- g_free(machineram);
+ generator = json_generator_new();
+ json_generator_set_root(generator, json_builder_get_root(builder));
+ json_generator_set_pretty(generator, TRUE);
- sending_benchmark_results = FALSE;
+ out = json_generator_to_data(generator, NULL);
+
+ g_object_unref(generator);
+ g_object_unref(builder);
+ bench_machine_free(this_machine);
- return result;
+ return out;
}
static gchar *run_benchmark(gchar *name)