Files
phoronix-test-suite/pts-core/commands/debug_render_test.php

128 lines
5.4 KiB
PHP

<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2015 - 2017, Phoronix Media
Copyright (C) 2015 - 2017, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class debug_render_test implements pts_option_interface
{
const doc_section = 'Other';
const doc_description = 'This option is used during the development of the Phoronix Test Suite software for testing of the result and graph rendering code paths. This option will download a large number of reference test results from LinuxBenchmarking.com.';
public static function run($r)
{
$render_dir = pts_client::temporary_directory() . '/pts-render-test-20171112/';
if(!is_file($render_dir . 'mega-render-test-20171112.tar.xz'))
{
pts_file_io::mkdir($render_dir);
pts_network::download_file('http://linuxbenchmarking.com/misc/mega-render-test-20171112.tar.xz', $render_dir . 'mega-render-test-20171112.tar.xz');
}
pts_compression::archive_extract($render_dir . 'mega-render-test-20171112.tar.xz');
if(!defined('PATH_TO_EXPORTED_PHOROMATIC_DATA'))
{
define('PATH_TO_EXPORTED_PHOROMATIC_DATA', $render_dir . 'mega-render-test-20171112/');
}
error_reporting(E_ALL);
ini_set('memory_limit','4096M');
$export_index_json = file_get_contents(PATH_TO_EXPORTED_PHOROMATIC_DATA . 'export-index.json');
$export_index_json = json_decode($export_index_json, true);
$dump_size = 0;
$start = microtime(true);
foreach(array_keys($export_index_json['phoromatic']) as $REQUESTED)
{
$this_render_test = time();
$tracker = &$export_index_json['phoromatic'][$REQUESTED];
$triggers = $tracker['triggers'];
echo PHP_EOL . 'STARTING RENDER TEST ON: ' . $REQUESTED . ' (' . count($triggers) . ' Triggers)' . PHP_EOL;
$length = count($tracker['triggers']);
$result_files = array();
foreach($triggers as $trigger)
{
$results_for_trigger = glob(PATH_TO_EXPORTED_PHOROMATIC_DATA . '/' . $REQUESTED . '/' . $trigger . '/*/composite.xml');
echo '.';
if($results_for_trigger == false)
continue;
foreach($results_for_trigger as $composite_xml)
{
// Add to result file
$system_name = basename(dirname($composite_xml)) . ': ' . $trigger;
$rf = new pts_result_file($composite_xml);
$rf->rename_run(null, $system_name);
$result_files[] = $rf;
}
}
echo 'STARTING MERGE; ';
$result_file = new pts_result_file(null, true);
$result_file->merge($result_files);
echo 'MAKING NEW RESULT FILE; ';
$extra_attributes = array('reverse_result_buffer' => true, 'force_simple_keys' => true, 'force_line_graph_compact' => true, 'force_tracking_line_graph' => true);
//$extra_attributes['normalize_result_buffer'] = true;
$intent = null;
//$table = new pts_ResultFileTable($result_file, $intent);
//echo '<p style="text-align: center; overflow: auto;" class="result_object">' . pts_render::render_graph_inline_embed($table, $result_file, $extra_attributes) . '</p>';
echo 'STARTING RESULT LOOP; ';
$html_dump = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>';
foreach($result_file->get_result_objects((isset($_POST['show_only_changed_results']) ? 'ONLY_CHANGED_RESULTS' : -1)) as $i => $result_object)
{
echo $result_object->test_profile->get_title() . ' ';
$html_dump .= '<h3>' . $result_object->get_arguments_description() . '</h3>';
$html_dump .= pts_render::render_graph_inline_embed($result_object, $result_file, $extra_attributes);
unset($result_object);
}
$table = new pts_ResultFileSystemsTable($result_file);
$html_dump .= pts_render::render_graph_inline_embed($table, $result_file, $extra_attributes);
echo PHP_EOL . PHP_EOL . 'RENDER TEST ON: ' . $REQUESTED . ' TOOK ' . (time() - $this_render_test) . PHP_EOL;
$dump_size += strlen($html_dump);
file_put_contents(PATH_TO_EXPORTED_PHOROMATIC_DATA . $REQUESTED . '.html', $html_dump . '</body></html>');
}
if(getenv('DEBUG_RENDER_TEST_LOCAL_TOO') != false)
{
echo PHP_EOL . 'LOCAL RENDER TEST TIME' . PHP_EOL;
$extra_graph_attributes = null;
foreach(pts_results::saved_test_results() as $saved_result)
{
$save_to_dir = pts_client::setup_test_result_directory($saved_result);
$generated_graphs = pts_svg_dom_gd::generate_result_file_graphs($saved_result, $save_to_dir, $extra_graph_attributes);
echo $saved_result . ': ' . count($generated_graphs) . PHP_EOL;
}
}
echo PHP_EOL . 'RENDER TEST TOOK: ' . (time() - $start) . PHP_EOL . PHP_EOL;
echo PHP_EOL . 'PEAK MEMORY USAGE: ' . round(memory_get_peak_usage(true) / 1048576, 3) . ' MB';
echo PHP_EOL . 'PEAK MEMORY USAGE (emalloc): ' . round(memory_get_peak_usage() / 1048576, 3) . ' MB';
echo PHP_EOL . 'TOTAL FILE SIZE: ' . ceil($dump_size / 1000) . ' KB';
echo PHP_EOL;
}
}
?>