diff options
-rw-r--r-- | hardinfo2/benchmark.c | 33 | ||||
-rw-r--r-- | hardinfo2/hardinfo.c | 18 | ||||
-rw-r--r-- | hardinfo2/hardinfo.h | 1 | ||||
-rw-r--r-- | hardinfo2/util.c | 14 |
4 files changed, 58 insertions, 8 deletions
diff --git a/hardinfo2/benchmark.c b/hardinfo2/benchmark.c index d91394bf..97796b37 100644 --- a/hardinfo2/benchmark.c +++ b/hardinfo2/benchmark.c @@ -135,7 +135,7 @@ gdouble benchmark_parallel_for(guint start, guint end, pbt, TRUE, NULL); threads = g_slist_append(threads, thread); - DEBUG("thread %d launched as context %p", 1 + (iter / iter_per_core), threads->data); + DEBUG("thread %d launched as context %p", thread_number, thread); } DEBUG("waiting for all threads to finish"); @@ -396,6 +396,37 @@ static gchar *get_benchmark_results() return result; } +static gchar *run_benchmark(gchar *name) +{ + int i; + + DEBUG("name = %s", name); + + for (i = 0; entries[i].name; i++) { + if (g_str_equal(entries[i].name, name)) { + void (*scan_callback)(gboolean rescan); + + if ((scan_callback = entries[i].scan_callback)) { + scan_callback(FALSE); + + return g_strdup_printf("%f", bench_results[i]); + } + } + } + + return NULL; +} + +ShellModuleMethod *hi_exported_methods(void) +{ + static ShellModuleMethod m[] = { + {"runBenchmark", run_benchmark}, + {NULL} + }; + + return m; +} + void hi_module_init(void) { static SyncEntry se[] = { diff --git a/hardinfo2/hardinfo.c b/hardinfo2/hardinfo.c index 651a39e0..3f638a87 100644 --- a/hardinfo2/hardinfo.c +++ b/hardinfo2/hardinfo.c @@ -90,7 +90,7 @@ int main(int argc, char **argv) return 0; } - if (!params.create_report) { + if (!params.create_report && !params.run_benchmark) { /* we only try to open the UI if the user didn't asked for a report. */ params.gui_running = ui_init(&argc, &argv); @@ -113,8 +113,18 @@ int main(int argc, char **argv) /* initialize vendor database */ vendor_init(); - - if (params.gui_running) { + + if (params.run_benchmark) { + gchar *result; + + result = module_call_method_param("benchmark::runBenchmark", params.run_benchmark); + if (!result) { + g_error("Unknown benchmark ``%s'' or benchmark.so not loaded", params.run_benchmark); + } else { + g_print("Benchmark result: %s\n", result); + g_free(result); + } + } else if (params.gui_running) { /* initialize gui and start gtk+ main loop */ icon_cache_init(); stock_icons_init(); @@ -136,6 +146,8 @@ int main(int argc, char **argv) g_print("%s", report); g_free(report); + } else { + g_error("Don't know what to do. Exiting."); } DEBUG("finished"); diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index 9f52f633..6ac25bec 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -37,6 +37,7 @@ struct _ProgramParameters { gint report_format; gchar **use_modules; + gchar *run_benchmark; gchar *path_lib; gchar *path_data; gchar *argv0; diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 266ce4eb..ac2ad3b5 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -364,6 +364,7 @@ void parameters_init(int *argc, char ***argv, ProgramParameters * param) static gboolean list_modules = FALSE; static gboolean autoload_deps = FALSE; static gchar *report_format = NULL; + static gchar *run_benchmark = NULL; static gchar **use_modules = NULL; static GOptionEntry options[] = { @@ -380,6 +381,12 @@ void parameters_init(int *argc, char ***argv, ProgramParameters * param) .arg_data = &report_format, .description = "chooses a report format (text, html)"}, { + .long_name = "run-benchmark", + .short_name = 'b', + .arg = G_OPTION_ARG_STRING, + .arg_data = &run_benchmark, + .description = "run benchmark; requires benchmark.so to be loaded"}, + { .long_name = "list-modules", .short_name = 'l', .arg = G_OPTION_ARG_NONE, @@ -427,6 +434,7 @@ void parameters_init(int *argc, char ***argv, ProgramParameters * param) param->show_version = show_version; param->list_modules = list_modules; param->use_modules = use_modules; + param->run_benchmark = run_benchmark; param->autoload_deps = autoload_deps; param->argv0 = *(argv)[0]; @@ -534,8 +542,7 @@ gchar *module_call_method(gchar * method) } function = g_hash_table_lookup(__module_methods, method); - return function ? g_strdup(function()) : - g_strdup_printf("{Unknown method: \"%s\"}", method); + return function ? g_strdup(function()) : NULL; } /* FIXME: varargs? */ @@ -548,8 +555,7 @@ gchar *module_call_method_param(gchar * method, gchar * parameter) } function = g_hash_table_lookup(__module_methods, method); - return function ? g_strdup(function(parameter)) : - g_strdup_printf("{Unknown method: \"%s\"}", method); + return function ? g_strdup(function(parameter)) : NULL; } static ShellModule *module_load(gchar * filename) |