diff options
Diffstat (limited to 'hardinfo2')
| -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) | 
