On (11/18/13 12:27), Alexandra Yates wrote: > Enables html and csv report new stlyes for "CPU Frequency" section, > While preserving translation macros. > > Signed-off-by: Alexandra Yates > --- > src/cpu/cpu.cpp | 139 ++++++++++++++++++++++++++++++++++++++++--------------- > 1 file changed, 101 insertions(+), 38 deletions(-) > > diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp > index b8f74a8..c3787e6 100644 > --- a/src/cpu/cpu.cpp > +++ b/src/cpu/cpu.cpp > @@ -612,29 +612,81 @@ void report_display_cpu_cstates(void) > > void report_display_cpu_pstates(void) > { > - char buffer[512], buffer2[512]; > + char buffer[512], buffer2[512], tmp_num[50]; > unsigned int package, core, cpu; > int line; > class abstract_cpu *_package, * _core, * _cpu; > unsigned int i, pstates_num; > > - for (i = 0, pstates_num = 0; i < all_cpus.size(); i++) > + /* div attr css_class and css_id */ > + tag_attr div_attr; > + init_div(&div_attr, "clear_block", "cpufreq"); > + > + /* Set Table attributes, rows, and cols */ > + table_attributes std_table_css; > + table_size pkg_tbl_size; > + table_size core_tbl_size; > + table_size cpu_tbl_size; > + > + > + /* Set Title attributes */ > + tag_attr title_attr; > + init_title_attr(&title_attr); > + > + /* Report add section */ > + report.add_div(&div_attr); > + report.add_title(&title_attr, __("Processor Frequency Report")); > + > + /* Set array of data in row Major order */ > + int idx1, idx2, idx3, num_cpus=0; > + string tmp_str; > + > + for (i = 0, pstates_num = 0; i < all_cpus.size(); i++) { > if (all_cpus[i]) > pstates_num = std::max(pstates_num, > - all_cpus[i]->pstates.size()); > - > - report.begin_section(SECTION_CPUFREQ); > - report.add_header("Processor Frequency Report"); > + all_cpus[i]->pstates.size()); > + } > > for (package = 0; package < system_level.children.size(); package++) { > bool first_core = true; > + idx1=0; > + idx2=0; > + idx3=0; > > _package = system_level.children[package]; > if (!_package) > continue; > > - report.begin_table(TABLE_WIDE); > + /* Tables for PKG, CORE, CPU */ > + pkg_tbl_size.cols=2; > + pkg_tbl_size.rows=pstates_num+2; > + string pkg_data[pkg_tbl_size.cols * pkg_tbl_size.rows]; > + > + core_tbl_size.cols=2; > + core_tbl_size.rows=((pstates_num+2) *_package->children.size()); > + string core_data[core_tbl_size.cols * core_tbl_size.rows]; > + > + /* PKG */ > + num_cpus=0; > + for (core = 0; core < _package->children.size(); core++) { > + _core = _package->children[core]; > + if (!_core) > + continue; > + for (cpu = 0; cpu < _core->children.size(); cpu++) { > + if (!_cpu) > + continue; > + _cpu = _core->children[cpu]; > + num_cpus+=1; > + } > + } > + cpu_tbl_size.cols= num_cpus+1; > + cpu_tbl_size.rows= (pstates_num+2)* _package->children.size(); > + string cpu_data[cpu_tbl_size.cols * cpu_tbl_size.rows]; > + > + /* Core */ > for (core = 0; core < _package->children.size(); core++) { > + cpu_data[idx3]=" "; > + idx3+=1; > _core = _package->children[core]; > if (!_core) > continue; > @@ -646,75 +698,86 @@ void report_display_cpu_pstates(void) > bool first_cpu = true; > > if (!_package->has_pstate_level(line)) > - continue; > - > - report.begin_row(); > + continue; > > buffer[0] = 0; > buffer2[0] = 0; > if (first_core) { > if (line == LEVEL_HEADER) { > - report.begin_cell(CELL_FIRST_PACKAGE_HEADER); > - report.addf(__("Package %i"), _package->get_number()); > + pkg_data[idx1]=__("Package"); > + idx1+=1; > + sprintf(tmp_num,"%d", _package->get_number()); > + pkg_data[idx1]= string(tmp_num); > + idx1+=1; initialisation: report.begin_section(SECTION_CPUFREQ); report.add_header("Processor Frequency Report"); report.begin_table(TABLE_WIDE); vs /* div attr css_class and css_id */ tag_attr div_attr; init_div(&div_attr, "clear_block", "cpufreq"); /* Set Table attributes, rows, and cols */ table_attributes std_table_css; table_size pkg_tbl_size; table_size core_tbl_size; table_size cpu_tbl_size; /* Set Title attributes */ tag_attr title_attr; init_title_attr(&title_attr); /* Report add section */ report.add_div(&div_attr); report.add_title(&title_attr, __("Processor Frequency Report")); /* Set array of data in row Major order */ int idx1, idx2, idx3, num_cpus=0; string tmp_str; reporter usage: report.begin_cell(CELL_CORE_HEADER); report.addf(__("Core %i"), _core->get_number()); vs core_data[idx2]=""; idx2+=1; sprintf(tmp_num,__("Core %d"),_core->get_number()); core_data[idx2]=string(tmp_num); idx2+=1; and report.begin_cell(CELL_STATE_NAME); report.add(_core->fill_pstate_name(line, buffer)); report.begin_cell(CELL_PACKAGE_STATE_VALUE); report.add(_core->fill_pstate_line(line, buffer2)); vs tmp_str=string(_core->fill_pstate_name(line, buffer)); core_data[idx2]= (tmp_str=="" ? " " : tmp_str); idx2+=1; tmp_str=string(_core->fill_pstate_line(line, buffer2)); core_data[idx2]= (tmp_str=="" ? " " : tmp_str); idx2+=1; sorry, but the existing one really looks easier to follow and use. current reporter user cares less about reporter internall details. -ss > } else { > - report.begin_cell(CELL_STATE_NAME); > - report.add(_package->fill_pstate_name(line, buffer)); > - report.begin_cell(CELL_PACKAGE_STATE_VALUE); > - report.add(_package->fill_pstate_line(line, buffer2)); > + tmp_str=string(_package->fill_pstate_name(line, buffer)); > + pkg_data[idx1]=(tmp_str=="" ? " " : tmp_str); > + idx1+=1; > + tmp_str=string(_package->fill_pstate_line(line, buffer2)); > + pkg_data[idx1]=(tmp_str=="" ? " " : tmp_str); > + idx1+=1; > } > - } else { > - report.begin_cell(CELL_EMPTY_PACKAGE_STATE); > - report.add_empty_cell(); > } > > - report.begin_cell(CELL_SEPARATOR); > - report.add_empty_cell(); > > if (!_core->can_collapse()) { > buffer[0] = 0; > buffer2[0] = 0; > if (line == LEVEL_HEADER) { > - report.begin_cell(CELL_CORE_HEADER); > - report.addf(__("Core %i"), _core->get_number()); > + core_data[idx2]=""; > + idx2+=1; > + sprintf(tmp_num,__("Core %d"),_core->get_number()); > + core_data[idx2]=string(tmp_num); > + idx2+=1; > } else { > - report.begin_cell(CELL_STATE_NAME); > - report.add(_core->fill_pstate_name(line, buffer)); > - report.begin_cell(CELL_PACKAGE_STATE_VALUE); > - report.add(_core->fill_pstate_line(line, buffer2)); > + tmp_str=string(_core->fill_pstate_name(line, buffer)); > + core_data[idx2]= (tmp_str=="" ? " " : tmp_str); > + idx2+=1; > + tmp_str=string(_core->fill_pstate_line(line, buffer2)); > + core_data[idx2]= (tmp_str=="" ? " " : tmp_str); > + idx2+=1; > } > } > > - report.begin_cell(CELL_SEPARATOR); > - report.add_empty_cell(); > - > + /* CPU */ > for (cpu = 0; cpu < _core->children.size(); cpu++) { > buffer[0] = 0; > _cpu = _core->children[cpu]; > if (!_cpu) > continue; > > - report.set_cpu_number(cpu); > if (line == LEVEL_HEADER) { > - report.begin_cell(CELL_CPU_PSTATE_HEADER); > - report.addf(__("CPU %i"), _cpu->get_number()); > + sprintf(tmp_num,__("CPU %d"),_cpu->get_number()); > + cpu_data[idx3] = string(tmp_num); > + idx3+=1; > continue; > } > > if (first_cpu) { > - report.begin_cell(CELL_STATE_NAME); > - report.add(_cpu->fill_pstate_name(line, buffer)); > + tmp_str=string(_cpu->fill_pstate_name(line, buffer)); > + cpu_data[idx3]=(tmp_str=="" ? " " : tmp_str); > + idx3+=1; > first_cpu = false; > } > > buffer[0] = 0; > - report.begin_cell(CELL_CPU_STATE_VALUE); > - report.add(_cpu->fill_pstate_line(line, buffer)); > + tmp_str=string(_cpu->fill_pstate_line(line, buffer)); > + cpu_data[idx3]=(tmp_str=="" ? " " : tmp_str); > + idx3+=1; > } > } > - > first_core = false; > } > + init_pkg_table_attr(&std_table_css, pkg_tbl_size.rows, pkg_tbl_size.cols); > + report.add_table(pkg_data, &std_table_css); > + init_core_table_attr(&std_table_css, (pstates_num+2), > + core_tbl_size.rows, core_tbl_size.cols); > + report.add_table(core_data, &std_table_css); > + init_cpu_table_attr(&std_table_css, (pstates_num+2), > + cpu_tbl_size.rows, cpu_tbl_size.cols); > + report.add_table(cpu_data, &std_table_css); > } > + report.end_div(); > } > > void impl_w_display_cpu_states(int state) > -- > 1.7.9.5 > > _______________________________________________ > PowerTop mailing list > PowerTop(a)lists.01.org > https://lists.01.org/mailman/listinfo/powertop >