aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2
diff options
context:
space:
mode:
authorLeandro Augusto Fogolin Pereira <leandro@zorg.(none)>2009-04-12 13:23:30 -0300
committerLeandro Augusto Fogolin Pereira <leandro@zorg.(none)>2009-04-12 13:23:30 -0300
commitff38c6955526377ef92ff7aa96b3c8ecb5fdac05 (patch)
treee7cfcba16ddc360230a8084a4f1a2ce6f2349ca8 /hardinfo2
parentf456e935f74f23ae76de31d5fb84906090c8e1aa (diff)
Make it possible to run a benchmark from command-line
Diffstat (limited to 'hardinfo2')
-rw-r--r--hardinfo2/benchmark.c33
-rw-r--r--hardinfo2/hardinfo.c18
-rw-r--r--hardinfo2/hardinfo.h1
-rw-r--r--hardinfo2/util.c14
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)