void one_measurement(int seconds, char *workload) { create_all_usb_devices(); start_power_measurement(); devices_start_measurement(); start_process_measurement(); start_cpu_measurement(); if (workload && workload[0]) { if (system(workload)) fprintf(stderr, _("Unknown issue running workload!\n")); } else { do_sleep(seconds); } end_cpu_measurement(); end_process_measurement(); collect_open_devices(); devices_end_measurement(); end_power_measurement(); process_cpu_data(); process_process_data(); /* output stats */ process_update_display(); report_summary(); w_display_cpu_cstates(); w_display_cpu_pstates(); if (reporttype != REPORT_OFF) { report_display_cpu_cstates(); report_display_cpu_pstates(); } report_process_update_display(); tuning_update_display(); end_process_data(); global_joules_consumed(); compute_bundle(); show_report_devices(); report_show_open_devices(); report_devices(); ahci_create_device_stats_table(); store_results(measurement_time); end_cpu_data(); }
void one_measurement(int seconds, char *workload) { create_all_usb_devices(); start_power_measurement(); devices_start_measurement(); start_process_measurement(); start_cpu_measurement(); if (workload && workload[0]) { system(workload); } else { do_sleep(seconds); } end_cpu_measurement(); end_process_measurement(); collect_open_devices(); devices_end_measurement(); end_power_measurement(); process_cpu_data(); process_process_data(); /* output stats */ process_update_display(); report_summary(); w_display_cpu_cstates(); w_display_cpu_pstates(); report_display_cpu_cstates(); report_display_cpu_pstates(); report_process_update_display(); tuning_update_display(); end_process_data(); global_joules_consumed(); compute_bundle(); show_report_devices(); report_show_open_devices(); report_devices(); store_results(measurement_time); end_cpu_data(); }
void store_results(double duration) { if (duration < 5) return; global_joules_consumed(); if (all_results.power > 0.01) { unsigned int overflow_index; overflow_index = 50 + (rand() % MAX_KEEP); if (past_results.size() >= MAX_PARAM) { /* memory leak, must free old one first */ past_results[overflow_index] = clone_results(&all_results); } else { past_results.push_back(clone_results(&all_results)); } if ((past_results.size() % 10) == 0) save_all_results("saved_results.powertop"); } }
void process_update_display(void) { #ifndef DISABLE_NCURSES unsigned int i; WINDOW *win; double pw; int tl; int tlt; int tlr; int show_power; int need_linebreak = 0; sort(all_power.begin(), all_power.end(), power_cpu_sort); show_power = global_power_valid(); win = get_ncurses_win("Overview"); if (!win) return; wclear(win); wmove(win, 1,0); #if 0 double sum; calculate_params(); sum = 0.0; sum += get_parameter_value("base power"); for (i = 0; i < all_power.size(); i++) { sum += all_power[i]->Witts(); } wprintw(win, _("Estimated power: %5.1f Measured power: %5.1f Sum: %5.1f\n\n"), all_parameters.guessed_power, global_joules_consumed(), sum); #endif pw = global_joules_consumed(); tl = global_time_left() / 60; tlt = (tl /60); tlr = tl % 60; if (pw > 0.0001) { char buf[32]; wprintw(win, _("The battery reports a discharge rate of %sW\n"), fmt_prefix(pw, buf)); need_linebreak = 1; } if (tl > 0 && pw > 0.0001) { wprintw(win, _("The estimated remaining time is %i hours, %i minutes\n"), tlt, tlr); need_linebreak = 1; } if (need_linebreak) wprintw(win, "\n"); wprintw(win, "%s: %3.1f %s, %3.1f %s, %3.1f %s %3.1f%% %s\n\n",_("Summary"), total_wakeups(), _("wakeups/second"), total_gpu_ops(), _("GPU ops/seconds"), total_disk_hits(), _("VFS ops/sec and"), total_cpu_time()*100, _("CPU use")); if (show_power) wprintw(win, "%s %s %s %s %s\n", _("Power est."), _("Usage"), _("Events/s"), _("Category"), _("Description")); else wprintw(win, " %s %s %s %s\n", _("Usage"), _("Events/s"), _("Category"), _("Description")); for (i = 0; i < all_power.size(); i++) { char power[16]; char name[20]; char usage[20]; char events[20]; char descr[128]; format_watts(all_power[i]->Witts(), power, 10); if (!show_power) strcpy(power, " "); sprintf(name, "%s", all_power[i]->type()); while (mbstowcs(NULL,name,0) < 14) strcat(name, " "); if (all_power[i]->events() == 0 && all_power[i]->usage() == 0 && all_power[i]->Witts() == 0) break; usage[0] = 0; if (all_power[i]->usage_units()) { if (all_power[i]->usage() < 1000) sprintf(usage, "%5.1f%s", all_power[i]->usage(), all_power[i]->usage_units()); else sprintf(usage, "%5i%s", (int)all_power[i]->usage(), all_power[i]->usage_units()); } while (mbstowcs(NULL,usage,0) < 14) strcat(usage, " "); sprintf(events, "%5.1f", all_power[i]->events()); if (!all_power[i]->show_events()) events[0] = 0; else if (all_power[i]->events() <= 0.3) sprintf(events, "%5.2f", all_power[i]->events()); while (strlen(events) < 12) strcat(events, " "); wprintw(win, "%s %s %s %s %s\n", power, usage, events, name, pretty_print(all_power[i]->description(), descr, 128)); } #endif // DISABLE_NCURSES }