void clean_shutdown() { close_results(); close_display(); clean_open_devices(); clear_all_devices(); clear_all_cpus(); return; }
int main(int argc, char **argv) { int option_index; int c; char filename[4096]; char workload[4096] = {0,}; int iterations = 1; bool make_tuning_script = false; set_new_handler(out_of_memory); setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); while (1) { /* parse commandline options */ c = getopt_long (argc, argv, "ch:C:i:t:uVw:qs:", long_options, &option_index); /* Detect the end of the options. */ if (c == -1) break; switch (c) { case 'V': print_version(); exit(0); break; case 'e': /* Extech power analyzer support */ checkroot(); extech_power_meter(optarg ? optarg : "/dev/ttyUSB0"); break; case 'u': print_usage(); exit(0); break; case 'c': powertop_init(); calibrate(); break; case 'h': /* html report */ reporttype = REPORT_HTML; sprintf(filename, "%s", optarg ? optarg : "powertop.html" ); break; case 't': time_out = (optarg ? atoi(optarg) : 20); break; case 'i': iterations = (optarg ? atoi(optarg) : 1); break; case 'w': /* measure workload */ sprintf(workload, "%s", optarg ? optarg :'\0' ); break; case 'q': if(freopen("/dev/null", "a", stderr)) fprintf(stderr, _("Quiet mode failed!\n")); break; case 'C': /* csv report*/ reporttype = REPORT_CSV; sprintf(filename, "%s", optarg ? optarg : "powertop.csv"); break; case 's': /* shell script for tunables */ make_tuning_script = true; sprintf(filename, "%s", optarg ? optarg : "powertop.sh"); break; case '?': /* Unknown option */ /* getopt_long already printed an error message. */ exit(0); break; } } powertop_init(); if (make_tuning_script) { // for now, let's make the script and exit. // Is powertop_init() needed? Probably not, but we'll try // it out both ways. make_tunables_script(filename); clear_tuning(); end_pci_access(); // TODO: remove? exit(0); } if (reporttype != REPORT_OFF) make_report(time_out, workload, iterations, filename); if (debug_learning) printf("Learning debugging enabled\n"); learn_parameters(250, 0); save_parameters("saved_parameters.powertop"); if (debug_learning) { learn_parameters(1000, 1); dump_parameter_bundle(); end_pci_access(); exit(0); } /* first one is short to not let the user wait too long */ init_display(); one_measurement(1, NULL); initialize_tuning(); tuning_update_display(); show_tab(0); while (!leave_powertop) { show_cur_tab(); one_measurement(time_out, NULL); learn_parameters(15, 0); } endwin(); printf("%s\n", _("Leaving PowerTOP")); end_process_data(); clear_process_data(); end_cpu_data(); clear_cpu_data(); save_all_results("saved_results.powertop"); save_parameters("saved_parameters.powertop"); learn_parameters(500, 0); save_parameters("saved_parameters.powertop"); end_pci_access(); clear_tuning(); reset_display(); clear_all_devices(); clear_all_cpus(); return 0; }