>
--git a/pts-core/functions/pts-functions-merge.php b/pts-core/functions/pts-functions-merge.php
index a1867d2..7339cd8 100644
--- a/pts-core/functions/pts-functions-merge.php
+++ b/pts-core/functions/pts-functions-merge.php
@@ -104,7 +104,7 @@ function pts_merge_benchmarks($OLD_RESULTS, $NEW_RESULTS)
$RESULTS = new tandem_XmlWriter();
- $RESULTS->setXslBinding("pts-results-viewer/pts-results-viewer.xsl");
+ $RESULTS->setXslBinding("pts-results-viewer/viewer.xsl");
$RESULTS->addXmlObject("PhoronixTestSuite/Suite/Title", 0, $new_suite_title);
$RESULTS->addXmlObject("PhoronixTestSuite/Suite/Name", 0, $new_suite_name);
diff --git a/pts-core/functions/pts-functions-run.php b/pts-core/functions/pts-functions-run.php
index d632745..38e8860 100644
--- a/pts-core/functions/pts-functions-run.php
+++ b/pts-core/functions/pts-functions-run.php
@@ -75,7 +75,7 @@ function pts_save_benchmark_file($PROPOSED_FILE_NAME, &$RESULTS = null, $RAW_TEX
pts_save_result("$REAL_FILE_NAME.xml", $R_FILE);
if(!is_file(SAVE_RESULTS_LOCATION . "$PROPOSED_FILE_NAME.xml"))
- pts_save_result("$REAL_FILE_NAME.xml", file_get_contents(SAVE_RESULTS_LOCATION . "$PROPOSED_FILE_NAME.xml"));
+ pts_save_result("$PROPOSED_FILE_NAME.xml", file_get_contents(SAVE_RESULTS_LOCATION . "$REAL_FILE_NAME.xml"));
else
{
// Merge Results
diff --git a/pts-core/functions/pts-functions.php b/pts-core/functions/pts-functions.php
index 5e3f0c0..afcb213 100644
--- a/pts-core/functions/pts-functions.php
+++ b/pts-core/functions/pts-functions.php
@@ -153,17 +153,83 @@ function pts_save_result($save_to = null, $save_results = null, $directory = nul
if(!is_dir($directory . "pts-results-viewer"))
{
- mkdir($directory . "pts-results-viewer"); // TODO: Clean this up
+ mkdir($directory . "pts-results-viewer");
copy("pts-core/pts-results-viewer/phoronix-test-suite.gif", $directory . "pts-results-viewer/phoronix-test-suite.gif");
copy("pts-core/pts-results-viewer/pts.js", $directory . "pts-results-viewer/pts.js");
- copy("pts-core/pts-results-viewer/pts-results-viewer.xsl", $directory . "pts-results-viewer/pts-results-viewer.xsl");
+ copy("pts-core/pts-results-viewer/viewer.xsl", $directory . "pts-results-viewer/viewer.xsl");
copy("pts-core/pts-results-viewer/pts-viewer.css", $directory . "pts-results-viewer/pts-viewer.css");
}
if($save_to == null || $save_results == null)
$bool = true;
else
+ {
+ // Create graphs locally or remotely
+
+ /* if(!extension_loaded("gd"))
+ {
+ if(dl("gd.so"))
+ {
+ $gd_available = true;
+ }
+ else
+ $gd_available = false;
+ }
+ else
+ $gd_available = true;
+
+ if($gd_available)
+ {
+ if(!is_dir($directory . "result-graphs"))
+ {
+ mkdir($directory . "result-graphs");
+ }
+
+ $basename = basename($save_to, ".xml");
+ if(!is_dir($directory . "result-graphs" . $basename))
+ {
+ mkdir($directory . "result-graphs" . $basename);
+ }
+
+ $xml_reader = new tandem_XmlReader($save_results);
+ $results_name = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Name");
+ $results_version = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Version");
+ $results_attributes = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Attributes");
+ $results_scale = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Scale");
+ $results_proportion = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Proportion");
+ $results_result_format = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/ResultFormat");
+ $results_raw = $xml_reader->getXMLArrayValues("PhoronixTestSuite/Benchmark/Results");
+
+ $results_identifiers = array();
+ $results_values = array();
+
+ foreach($results_raw as $result_raw)
+ {
+ $xml_results = new tandem_XmlReader($result_raw);
+ array_push($results_identifiers, $xml_results->getXMLArrayValues("Group/Entry/Identifier"));
+ array_push($results_values, $xml_results->getXMLArrayValues("Group/Entry/Value"));
+ }
+
+ for($i = 0; $i < count($results_name); $i++)
+ {
+ if(strlen($results_version[$i]) > 2)
+ $results_name[$i] .= " v" . $results_version[$i];
+
+ $t = new pts_BarGraph($results_name[$i], $results_attributes[$i], $results_scale[$i]);
+ $t->loadGraphIdentifiers($results_identifiers[$i]);
+ $t->loadGraphValues($results_values[$i], "#1");
+ $t->save_graph($directory . "result-graphs" . $basename . "/" . ($i + 1) . ".png");
+ $t->renderGraph();
+ }
+
+ unset($xml_reader, $results_name, $results_version, $results_attributes, $results_scale, $results_proportion, $results_result_format, $results_raw, $results_identifiers, $results_values);
+ $save_results = str_replace("pts-results-viewer/viewer.xsl", "pts-results-viewer/local-viewer.xsl", $save_results);
+ }
+ else
+ $save_results = str_replace("pts-results-viewer/local-viewer.xsl", "pts-results-viewer/viewer.xsl", $save_results); */
+
$bool = file_put_contents($directory . $save_to, $save_results);
+ }
return $bool;
}
diff --git a/pts-core/objects/object_pts_BarGraph.php b/pts-core/objects/object_pts_BarGraph.php
new file mode 100644
index 0000000..41796f8
--- /dev/null
+++ b/pts-core/objects/object_pts_BarGraph.php
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ Copyright (C) 2008, Michael Larabel.
+ Copyright (C) 2008, Phoronix Media.
+
+ 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 pts_BarGraph extends pts_Graph
+{
+ public function __construct($Title, $SubTitle, $YTitle)
+ {
+ parent::__construct($Title, $SubTitle, $YTitle);
+ $this->graph_type = "BAR_GRAPH";
+ }
+ protected function render_graph_identifiers()
+ {
+ $identifier_count = count($this->graph_identifiers);
+ $graph_width = $this->graph_left_end - $this->graph_left_start;
+ $identifier_width = ($this->graph_left_end - $this->graph_left_start) / $identifier_count;
+
+ $px_from_top_start = $this->graph_top_end - 5;
+ $px_from_top_end = $this->graph_top_end + 5;
+
+ $longest_string = $this->find_longest_string($this->graph_identifiers);
+ $font_size = $this->graph_font_size_identifiers;
+
+ while($this->return_ttf_string_width($longest_string, $this->graph_font, $font_size) > ($identifier_width - 3))
+ $font_size -= 0.5;
+
+ for($i = 0; $i < $identifier_count; $i++)
+ {
+ $px_bound_left = $this->graph_left_start + ($identifier_width * $i);
+ $px_bound_right = $this->graph_left_start + ($identifier_width * ($i + 1));
+
+ if($i == 0)
+ imageline($this->graph_image, $px_bound_left, $px_from_top_start, $px_bound_left, $px_from_top_end, $this->graph_color_notches);
+
+ imageline($this->graph_image, $px_bound_right, $px_from_top_start, $px_bound_right, $px_from_top_end, $this->graph_color_notches);
+
+ $this->gd_write_text_center($this->graph_identifiers[$i], $font_size, $this->graph_color_headers, $px_bound_left + ceil($identifier_width / 2), $px_from_top_end - 1, FALSE, TRUE);
+ }
+ }
+ protected function render_graph_bars()
+ {
+ $identifier_count = count($this->graph_identifiers) + 1;
+ $graph_width = $this->graph_left_end - $this->graph_left_start;
+ $identifier_width = ($this->graph_left_end - $this->graph_left_start) / $identifier_count;
+ $bar_count = count($this->graph_data);
+ $bar_width = floor($identifier_width / $bar_count);
+
+ $font_size = $this->graph_font_size_bars;
+
+ while($this->return_ttf_string_width(bcdiv($this->graph_maximum_value, 1, 3), $this->graph_font, $font_size) > ($bar_width - 6))
+ $font_size -= 0.5;
+
+ for($i_o = 0; $i_o < $bar_count; $i_o++)
+ {
+ $paint_color = $this->next_paint_color();
+
+ for($i = 0; $i < count($this->graph_data[$i_o]); $i++)
+ {
+ $value = $this->graph_data[$i_o][$i];
+ $graph_size = round(($value / $this->graph_maximum_value) * ($this->graph_top_end - $this->graph_top_start));
+ $value_plot_top = $this->graph_top_end + 1 - $graph_size;
+
+ $identifier_count = count($this->graph_data[$i_o]);
+ $graph_width = $this->graph_left_end - $this->graph_left_start;
+ $identifier_width = ($this->graph_left_end - $this->graph_left_start) / $identifier_count;
+ $bar_width = floor($identifier_width / $bar_count);
+ $px_bound_left = $this->graph_left_start + ($identifier_width * $i) + ($bar_width * $i_o) + 2;
+ $px_bound_right = $this->graph_left_start + ($identifier_width * ($i + 1)) - ($bar_width * ($bar_count - $i_o - 1));
+
+ if($i_o == 0)
+ $size_diff_left = 5;
+ else
+ $size_diff_left = 0;
+
+ if(($i_o + 1) == $bar_count)
+ $size_diff_right = 5;
+ else
+ $size_diff_right = 0;
+
+ if($value_plot_top < 1)
+ $value_plot_top = 1;
+
+ imagerectangle($this->graph_image, $px_bound_left + $size_diff_left, $value_plot_top - 1, $px_bound_right - $size_diff_right, $this->graph_top_end - 1, $this->graph_color_body_light);
+ imagefilledrectangle($this->graph_image, $px_bound_left + $size_diff_left + 1, $value_plot_top, $px_bound_right - $size_diff_right - 1, $this->graph_top_end - 1, $paint_color);
+ $value = bcdiv($value, 1, 2);
+
+ if($graph_size > 20)
+ $this->gd_write_text_center($this->graph_data[$i_o][$i], $font_size, $this->graph_color_body_text, $px_bound_left + (($px_bound_right - $px_bound_left) / 2), $value_plot_top + 3);
+ }
+ }
+ }
+ protected function render_graph_result()
+ {
+ $this->render_graph_bars();
+ }
+}
+
+?>
diff --git a/pts-core/objects/object_pts_Graph.php b/pts-core/objects/object_pts_Graph.php
new file mode 100644
index 0000000..0b343c8
--- /dev/null
+++ b/pts-core/objects/object_pts_Graph.php
@@ -0,0 +1,407 @@
+
<?php
+
+/*
+ Copyright (C) 2008, Michael Larabel.
+ Copyright (C) 2008, Phoronix Media.
+
+ 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 pts_Graph
+{
+ // Defaults
+ var $graph_attr_marks = 6; // Number of marks to make on vertical axis
+ var $graph_attr_width = 580; // Graph width
+ var $graph_attr_height = 300; // Graph height
+ var $graph_attr_big_border = FALSE; // Border around graph or not
+
+ var $graph_left_start = 27; // Distance in px to start graph from left side
+ var $graph_left_end_opp = 10; // Distance in px to end graph from right side
+ var $graph_top_start = 55; // Distance in px to start graph from top side
+ var $graph_top_end_opp = 22; // Distance in px to end graph from bottom side
+
+ // Colors
+ var $graph_color_notches = "#000000"; // Color for notches
+ var $graph_color_text = "#000000"; // Color for text
+ var $graph_color_border = "#000000"; // Color for border (if used)
+ var $graph_color_main_headers = "#2b6b29"; // Color of main text headers
+ var $graph_color_headers = "#2b6b29"; // Color of other headers
+ var $graph_color_background = "#FFFFFF"; // Color of background
+ var $graph_color_body = "#8b8f7c"; // Color of graph body
+ var $graph_color_body_text = "#FFFFFF"; // Color of graph body text
+ var $graph_color_body_light = "#B0B59E"; // Color of the border around graph bars (if doing a bar graph)
+
+ var $graph_color_paint = array("#3b433a", "#bb2413", "#ff9933", "#006c00", "#5028ca"); // Colors to use for the bars / lines, one color for each key
+
+ // Text
+ var $graph_font = "dejavu_sans.ttf"; // TTF file name
+ var $graph_font_size_tick_mark = 10; // Tick mark size
+ var $graph_font_size_key = 9; // Size of height for keys
+ var $graph_font_size_heading = 18; // Font size of headings
+ var $graph_font_size_bars = 12; // Font size for text on the bars/objects
+ var $graph_font_size_identifiers = 11; // Font size of identifiers
+ var $graph_font_size_sub_heading = 12; // Font size of headers
+ var $graph_font_size_axis_heading = 11; // Font size of axis headers
+ var $graph_watermark_text = "PHORONIX-TEST-SUITE.COM"; // Text for watermark in upper right hand corner. If null, no watermark will display
+
+ // CHANGE DIRECTORY FOR TTF FONT LOCATION INSIDE __construct FUNCTION
+
+ // Not user-friendly changes below this line
+ var $graph_body_image = FALSE;
+ var $graph_type = "GRAPH";
+ var $graph_image;
+ var $graph_maximum_value;
+
+ var $graph_output = null;
+ var $graph_data = array();
+ var $graph_data_title = array();
+ var $graph_color_paint_index = -1;
+ var $graph_identifiers;
+ var $graph_title;
+ var $graph_sub_title;
+ var $graph_y_title;
+ var $graph_top_end;
+ var $graph_left_end;
+
+ public function __construct($Title, $SubTitle, $YTitle)
+ {
+ $this->graph_title = $Title;
+ $this->graph_sub_title = $SubTitle;
+ $this->graph_y_title = $YTitle;
+
+ $this->graph_top_end = $this->graph_attr_height - $this->graph_top_end_opp;
+ $this->graph_left_end = $this->graph_attr_width - $this->graph_left_end_opp;
+
+ // Directory for TTF Fonts
+ putenv("GDFONTPATH=" . getcwd()); // The directory where the TTF font files should be. getcwd() will look in the same directory as this file
+ }
+
+ //
+ // Load Functions
+ //
+
+ public function loadGraphIdentifiers($data_array)
+ {
+ $this->graph_identifiers = $data_array;
+ }
+ public function loadGraphData($data_array)
+ {
+ loadGraphValues($data_array);
+ }
+ public function loadGraphValues($data_array, $data_title = NULL)
+ {
+ for($i = 0; $i < count($data_array); $i++)
+ if(is_float($data_array[$i]))
+ $data_array[$i] = bcdiv($data_array[$i], 1, 2);
+
+ array_push($this->graph_data, $data_array);
+ array_push($this->graph_data_title, $data_title);
+ }
+ public function setGraphBackgroundPNG($File)
+ {
+ $IMG = @imagecreatefrompng($File);
+
+ if($IMG != FALSE)
+ $this->graph_body_image = $IMG;
+ }
+
+ //
+ // Misc Functions
+ //
+
+ protected function next_paint_color()
+ {
+ if($this->graph_color_paint_index + 1 < count($this->graph_color_paint))
+ {
+ $this->graph_color_paint_index += 1;
+ }
+ else
+ {
+ $this->graph_color_paint_index = 0;
+ }
+
+ return $this->graph_color_paint[$this->graph_color_paint_index];
+ }
+ protected function reset_paint_index()
+ {
+ $this->graph_color_paint_index = -1;
+ }
+ protected function maximum_graph_value()
+ {
+ $maximum = $this->graph_attr_marks;
+
+ foreach($this->graph_data as $graph_set)
+ foreach($graph_set as $set_item)
+ if($set_item > $maximum)
+ $maximum = $set_item;
+
+ return $maximum;
+ }
+ protected function convert_hex_to_gd($Hex)
+ {
+ return imagecolorallocate($this->graph_image, hexdec(substr($Hex, 1, 2)), hexdec(substr($Hex, 3, 2)), hexdec(substr($Hex, 5, 2)));
+ }
+ protected function return_ttf_string_dimensions($String, $Font, $Size, $Big = FALSE)
+ {
+ $box_array = imagettfbbox($Size, 0, $Font, $String);
+ $box_width = $box_array[4] - $box_array[6];
+
+ if($Big)
+ $box_array = imagettfbbox($Size, 0, $Font, "AZ@![]()@|");
+ $box_height = $box_array[1] - $box_array[7];
+
+ // Width x Height
+ return array($box_width, $box_height);
+ }
+ protected function return_ttf_string_width($String, $Font, $Size)
+ {
+ $dimensions = $this->return_ttf_string_dimensions($String, $Font, $Size);
+ return $dimensions[0];
+ }
+ protected function gd_write_text_center($String, $Size, $Color, $CenterX, $CenterY, $Rotate = FALSE, $Big = FALSE)
+ {
+ $Font = $this->graph_font;
+
+ $ttf_dimensions = $this->return_ttf_string_dimensions(strtoupper($String), $Font, $Size, $Big);
+ $ttf_height = $ttf_dimensions[1];
+
+ $ttf_dimensions = $this->return_ttf_string_dimensions($String, $Font, $Size, $Big);
+ $ttf_width = $ttf_dimensions[0];
+
+ if($CenterX == "TRUE_CENTER")
+ $CenterX = $this->graph_attr_width / 2;
+ else if($CenterX == "GRAPH_CENTER")
+ $CenterX = $this->return_graph_x_center();
+
+ if($Rotate == FALSE)
+ {
+ $Rotation = 0;
+ $text_x = $CenterX - round($ttf_width / 2);
+ $text_y = $CenterY + $ttf_height;
+ }
+ else
+ {
+ $Rotation = 90;
+ $text_x = $CenterX + $ttf_height;
+ $text_y = $CenterY + round($ttf_width / 2);
+ }
+
+ imagettftext($this->graph_image, $Size, $Rotation, $text_x, $text_y, $Color, $Font, $String);
+ }
+ protected function find_longest_string($arr_string)
+ {
+ $longest_string = "";
+ $px_length = 0;
+
+ foreach($arr_string as $one_string)
+ if(($new_length = strlen($one_string)) > strlen($longest_string))
+ {
+ $longest_string = $one_string;
+ $px_length = $new_length;
+ }
+ return $longest_string;
+ }
+ protected function return_graph_x_center()
+ {
+ return $this->graph_left_start + (($this->graph_left_end - $this->graph_left_start) / 2);
+ }
+ protected function gd_write_text_right($String, $Size, $Color, $RightX, $CenterY, $Rotate = FALSE)
+ {
+ $Font = $this->graph_font;
+
+ $ttf_dimensions = $this->return_ttf_string_dimensions($String, $Font, $Size);
+
+ $ttf_width = $ttf_dimensions[0];
+ $ttf_height = $ttf_dimensions[1];
+
+ $Rotation = 0;
+ $text_x = $RightX - $ttf_width;
+ $text_y = $CenterY + round($ttf_height / 2);
+
+ imagettftext($this->graph_image, $Size, $Rotation, $text_x, $text_y, $Color, $Font, $String);
+ }
+ protected function gd_write_text_left($String, $Size, $Color, $LeftX, $CenterY, $Rotate = FALSE)
+ {
+ $Font = $this->graph_font;
+
+ $ttf_dimensions = $this->return_ttf_string_dimensions($String, $Font, $Size);
+
+ $ttf_width = $ttf_dimensions[0];
+ $ttf_height = $ttf_dimensions[1];
+
+ $Rotation = 0;
+ $text_x = $LeftX;
+ $text_y = $CenterY + round($ttf_height / 2);
+
+ imagettftext($this->graph_image, $Size, $Rotation, $text_x, $text_y, $Color, $Font, $String);
+ }
+
+ //
+ // Render Functions
+ //
+
+ protected function render_graph_init()
+ {
+ $this->graph_image = imagecreate($this->graph_attr_width, $this->graph_attr_height);
+ imageantialias($this->graph_image, true);
+ imageinterlace($this->graph_image, true);
+
+ // Initalize GD Colors
+
+ $this->graph_color_notches = $this->convert_hex_to_gd($this->graph_color_notches);
+ $this->graph_color_text = $this->convert_hex_to_gd($this->graph_color_text);
+ $this->graph_color_border = $this->convert_hex_to_gd($this->graph_color_border);
+ $this->graph_color_main_headers = $this->convert_hex_to_gd($this->graph_color_main_headers);
+ $this->graph_color_headers = $this->convert_hex_to_gd($this->graph_color_headers);
+ $this->graph_color_background = $this->convert_hex_to_gd($this->graph_color_background);
+ $this->graph_color_body = $this->convert_hex_to_gd($this->graph_color_body);
+ $this->graph_color_body_text = $this->convert_hex_to_gd($this->graph_color_body_text);
+ $this->graph_color_body_light = $this->convert_hex_to_gd($this->graph_color_body_light);
+
+ for($i = 0; $i < count($this->graph_color_paint); $i++)
+ $this->graph_color_paint[$i] = $this->convert_hex_to_gd($this->graph_color_paint[$i]);
+
+ // Background Color
+ imagefilledrectangle($this->graph_image, 0, 0, $this->graph_attr_width, $this->graph_attr_height, $this->graph_color_background);
+
+ if($this->graph_attr_big_border == TRUE)
+ imagerectangle($this->graph_image, 0, 0, $this->graph_attr_width - 1, $this->graph_attr_height - 1, $this->graph_color_border);
+
+ // Etc
+ $this->graph_maximum_value = (floor(round($this->maximum_graph_value() * 1.35) / $this->graph_attr_marks) + 1) * $this->graph_attr_marks;
+ }
+ protected function render_graph_base()
+ {
+ if(count($this->graph_data_title) > 1)
+ {
+ $num_key_lines = ceil(count($this->graph_data_title) / 4);
+ $this->graph_top_start = $this->graph_top_start + ($num_key_lines * 10);
+ }
+
+ // Make room for tick markings, left hand side
+ $this->graph_left_start += $this->return_ttf_string_width($this->graph_maximum_value, $this->graph_font, $this->graph_font_size_tick_mark) + 2;
+
+ imagefilledrectangle($this->graph_image, $this->graph_left_start, $this->graph_top_start, $this->graph_left_end, $this->graph_top_end, $this->graph_color_body);
+ imagerectangle($this->graph_image, $this->graph_left_start, $this->graph_top_start, $this->graph_left_end, $this->graph_top_end, $this->graph_color_border);
+
+
+ if($this->graph_body_image != FALSE)
+ {
+ imagecopymerge($this->graph_image, $this->graph_body_image, $this->graph_left_start + (($this->graph_left_end - $this->graph_left_start) / 2) - imagesx($this->graph_body_image) / 2, $this->graph_top_start + (($this->graph_top_end - $this->graph_top_start) / 2) - imagesy($this->graph_body_image) / 2, 0, 0, imagesx($this->graph_body_image), imagesy($this->graph_body_image), 95);
+
+ }
+
+ // Text
+ $this->gd_write_text_center($this->graph_title, $this->graph_font_size_heading, $this->graph_color_main_headers, "GRAPH_CENTER", 6);
+ $this->gd_write_text_center($this->graph_sub_title, $this->graph_font_size_sub_heading, $this->graph_color_main_headers, "GRAPH_CENTER", 30);
+ $this->gd_write_text_center($this->graph_y_title, $this->graph_font_size_axis_heading, $this->graph_color_headers, 4, $this->graph_top_start + (($this->graph_top_end - $this->graph_top_start) / 2), TRUE);
+ }
+ protected function render_graph_value_ticks()
+ {
+ $tick_width = ($this->graph_top_end - $this->graph_top_start) / $this->graph_attr_marks;
+ $px_from_left_start = $this->graph_left_start - 5;
+ $px_from_left_end = $this->graph_left_start + 5;
+
+ $display_value = 0;
+
+ for($i = 0; $i < $this->graph_attr_marks; $i++)
+ {
+ $px_from_top = $this->graph_top_end - ($tick_width * $i);
+
+ imageline($this->graph_image, $px_from_left_start, $px_from_top, $px_from_left_end, $px_from_top, $this->graph_color_notches);
+
+ $this->gd_write_text_right($display_value, $this->graph_font_size_tick_mark, $this->graph_color_text, $px_from_left_start - 3, $px_from_top);
+
+ if($i != 0 && $this->graph_type == "LINE_GRAPH")
+ {
+ $line_width = 6;
+ for($y = $px_from_left_end + $line_width; $y < $this->graph_left_end; $y += ($line_width * 2))
+ if($y + $line_width < $this->graph_left_end)
+ imageline($this->graph_image, $y, $px_from_top, $y += $line_width, $px_from_top, $this->graph_color_body_light);
+ else
+ imageline($this->graph_image, $y, $px_from_top, $y += ($this->graph_left_end - $y) - 1, $px_from_top, $this->graph_color_body_light);
+ }
+
+ $display_value += bcdiv($this->graph_maximum_value / $this->graph_attr_marks, 1, 2);
+ }
+ }
+ public function renderGraph()
+ {
+ $this->render_graph_init();
+ $this->render_graph_base();
+ $this->render_graph_identifiers();
+ $this->render_graph_value_ticks();
+ $this->render_graph_key();
+ $this->render_graph_result();
+ $this->render_graph_watermark();
+ $this->return_graph_image();
+ }
+ protected function render_graph_identifiers()
+ {
+ return;
+ }
+ protected function render_graph_result()
+ {
+ return;
+ }
+ protected function render_graph_key()
+ {
+ if(count($this->graph_data_title) < 2)
+ return;
+
+ $key_counter = 0;
+ $component_y = $this->graph_top_start - 11;
+ $this->reset_paint_index();
+
+ for($i = 0; $i < count($this->graph_data_title); $i++)
+ {
+ if(!empty($this->graph_data_title))
+ {
+ $this_color = $this->next_paint_color();
+ $key_counter += 1;
+ $key_offset = $key_counter % 4;
+
+ $component_x = $this->graph_left_start + 15 + (($this->graph_left_end - $this->graph_left_start) / 4) * $key_offset;
+
+ $this->gd_write_text_left($this->graph_data_title[$i], $this->graph_font_size_key, $this_color, $component_x, $component_y);
+
+ imagefilledrectangle($this->graph_image, $component_x - 13, $component_y - 5, $component_x - 3, $component_y + 5, $this_color);
+ imagerectangle($this->graph_image, $component_x - 13, $component_y - 5, $component_x - 3, $component_y + 5, $this->graph_color_notches);
+
+ if($key_counter % 4 == 0)
+ $component_y -= 12;
+ }
+ }
+ $this->reset_paint_index();
+ }
+ protected function render_graph_watermark()
+ {
+ if(empty($this->graph_watermark_text))
+ return;
+
+ $this->gd_write_text_right($this->graph_watermark_text, 10, $this->graph_color_text, $this->graph_left_end - 2, $this->graph_top_start + 8);
+
+ }
+ protected function return_graph_image()
+ {
+ Imagepng($this->graph_image, $this->graph_output, 0);
+ ImageDestroy($this->graph_image);
+ }
+ protected function save_graph($file)
+ {
+ $this->graph_output = $file;
+ }
+}
+
+?>
diff --git a/pts-core/objects/object_pts_LineGraph.php b/pts-core/objects/object_pts_LineGraph.php
new file mode 100644
index 0000000..a5dee3f
--- /dev/null
+++ b/pts-core/objects/object_pts_LineGraph.php
@@ -0,0 +1,95 @@
+
<?php
+
+/*
+ Copyright (C) 2008, Michael Larabel.
+ Copyright (C) 2008, Phoronix Media.
+
+ 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 pts_LineGraph extends pts_Graph
+{
+ public function __construct($Title, $SubTitle, $YTitle)
+ {
+ parent::__construct($Title, $SubTitle, $YTitle);
+ $this->graph_type = "LINE_GRAPH";
+ }
+ protected function render_graph_identifiers()
+ {
+ $identifier_count = count($this->graph_identifiers) + 1;
+ $graph_width = $this->graph_left_end - $this->graph_left_start;
+ $identifier_width = ($this->graph_left_end - $this->graph_left_start) / $identifier_count;
+
+ $px_from_top_start = $this->graph_top_end - 5;
+ $px_from_top_end = $this->graph_top_end + 5;
+
+ $longest_string = $this->find_longest_string($this->graph_identifiers);
+ $font_size = $this->graph_font_size_identifiers;
+
+ while($this->return_ttf_string_width($longest_string, $this->graph_font, $font_size) > ($identifier_width - 2))
+ $font_size -= 0.5;
+
+ for($i = 0; $i < ($identifier_count - 1); $i++)
+ {
+ $px_from_left = $this->graph_left_start + ($identifier_width * ($i + 1));
+
+ imageline($this->graph_image, $px_from_left, $px_from_top_start, $px_from_left, $px_from_top_end, $this->graph_color_notches);
+ $this->gd_write_text_center($this->graph_identifiers[$i], $font_size, $this->graph_color_headers, $px_from_left, $px_from_top_end + 2);
+ }
+ }
+ protected function renderGraphLines()
+ {
+ $identifier_count = count($this->graph_identifiers) + 1;
+ $graph_width = $this->graph_left_end - $this->graph_left_start;
+ $identifier_width = ($this->graph_left_end - $this->graph_left_start) / $identifier_count;
+
+ for($i_o = 0; $i_o < count($this->graph_data); $i_o++)
+ {
+ $previous_placement = -1;
+ $previous_offset = -1;
+ $paint_color = $this->next_paint_color();
+
+ for($i = 0; $i < count($this->graph_data[$i_o]); $i++)
+ {
+ $value = $this->graph_data[$i_o][$i];
+ $value_plot_top = $this->graph_top_end + 1 - round(($value / $this->graph_maximum_value) * ($this->graph_top_end - $this->graph_top_start));
+ $px_from_left = $this->graph_left_start + ($identifier_width * ($i + 1));
+
+ if($previous_placement != -1 && $previous_offset != -1)
+ {
+ imageline($this->graph_image, $previous_offset, $previous_placement, $px_from_left, $value_plot_top, $paint_color);
+ $this->render_graph_pointer($previous_offset, $previous_placement);
+ }
+ if($i == count($this->graph_data[$i_o]) - 1)
+ $this->render_graph_pointer($px_from_left, $value_plot_top);
+
+ $previous_placement = $value_plot_top;
+ $previous_offset = $px_from_left;
+
+ }
+ }
+ }
+ protected function render_graph_result()
+ {
+ $this->renderGraphLines();
+ }
+ protected function render_graph_pointer($x, $y)
+ {
+ imageline($this->graph_image, $x - 5, $y - 5, $x + 5, $y + 5, $this->graph_color_notches);
+ imageline($this->graph_image, $x + 5, $y - 5, $x - 5, $y + 5, $this->graph_color_notches);
+ imagefilledrectangle($this->graph_image, $x - 2, $y - 2, $x + 2, $y + 2, $this->graph_color_notches);
+ }
+}
+
+?>
diff --git a/pts-core/pts-results-viewer/pts-results-viewer.xsl b/pts-core/pts-results-viewer/pts-results-viewer.xsl
deleted file mode 100644
index 580f2b2..0000000
--- a/pts-core/pts-results-viewer/pts-results-viewer.xsl
+++ /dev/null
@@ -1,52 +0,0 @@
-
<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Phoronix Test Suite - Results Viewer</title>
- <link href="pts-results-viewer/pts-viewer.css" rel="stylesheet" type="text/css" />
- <script src="pts-results-viewer/pts.js" type="text/javascript"></script>
- </head>
- <body>
- <div id="pts_container">
- <div id="pts_description_area">
- <div id="pts_logo"></div>
- <div id="pts_benchmark_main_header"><xsl:value-of select="PhoronixTestSuite/Suite/Title"/></div>
- <div class="pts_benchmark_descriptor" id="tsd_show" style="display: none;"><div class="pts_area_box"><p><xsl:value-of select="PhoronixTestSuite/Suite/Description"/></p><p style="font-size: 11px;"><em><xsl:value-of select="PhoronixTestSuite/Suite/Name" /> v<xsl:value-of select="PhoronixTestSuite/Suite/Version" /> is maintained by <xsl:value-of select="PhoronixTestSuite/Suite/Maintainer"/></em></p><p><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');"><< Hide Test Details</span></p></div></div>
- <div class="pts_benchmark_descriptor" id="tsd_hidden"><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');hideObject('tips_show');showObject('tips_hidden');">Show Test Details >></span></div>
- <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Hardware"/></div>
- <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Software"/></div>
- <div class="pts_benchmark_descriptor"><strong>Phoronix Test Suite v<xsl:value-of select="PhoronixTestSuite/System/Version"/></strong></div>
- <div class="pts_benchmark_descriptor"><strong>Generated by <xsl:value-of select="PhoronixTestSuite/System/Author"/> on <xsl:value-of select="PhoronixTestSuite/System/TestDate"/></strong></div>
- <div class="pts_benchmark_descriptor"><strong>Test Notes:</strong> <xsl:value-of select="PhoronixTestSuite/System/TestNotes"/></div>
-
-<div style="display: none">
- <div class="pts_benchmark_descriptor" id="tips_hidden"><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');showObject('tsd_hidden');hideObject('tsd_show');">Performance Optimization Tips >></span></div>
- <div class="pts_benchmark_descriptor" id="tips_show" style="display: none;"><div class="pts_area_box"><p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p>
-
-<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p></div></div>
-</div>
-
- </div>
- <div id="pts_benchmark_area">
- <xsl:for-each select="PhoronixTestSuite/Benchmark">
- <div class="pts_benchmark_bar"><span class="pts_benchmark_bar_header"><xsl:value-of select="Name"/></span> <span class="pts_benchmark_bar_version">v<xsl:value-of select="Version"/></span><br /><strong><xsl:value-of select="Attributes"/></strong></div>
- <div class="pts_benchmark_text">
- <xsl:for-each select="Results/Group">
- <div style="padding: 5px 0;">
- <xsl:for-each select="Entry">
- <strong><xsl:value-of select="Identifier"/>:</strong><span style="padding-left: 5px;"><xsl:value-of select="Value"/></span><br />
- </xsl:for-each>
- </div>
- </xsl:for-each>
- </div>
- <div class="pts_benchmark_img_area"><img width="580" height="300"><xsl:attribute name="src">http://www.phoronix-test-suite.com/pts-grapher/r/graph-remote.php?t=<xsl:value-of select="Name" />&s=<xsl:value-of select="Attributes"/>&n=<xsl:value-of select="Version"/>&u=<xsl:value-of select="Scale"/>&p=<xsl:value-of select="Proportion"/>&i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&v=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Value"/>;</xsl:for-each></xsl:for-each>
-</xsl:attribute></img></div>
- </xsl:for-each>
- </div>
- <p align="center">The <a href="http://www.phoronix-test-suite.com/">Phoronix Test Suite</a> is developed by <a href="http://www.phoronix.com/">Phoronix</a>, an Internet resource devoted to Linux hardware reviews, video driver articles, and much more.</p>
- </div>
- </body>
-</html>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/pts-core/pts-results-viewer/viewer.xsl b/pts-core/pts-results-viewer/viewer.xsl
new file mode 100644
index 0000000..580f2b2
--- /dev/null
+++ b/pts-core/pts-results-viewer/viewer.xsl
@@ -0,0 +1,52 @@
+
<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:template match="/">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Phoronix Test Suite - Results Viewer</title>
+ <link href="pts-results-viewer/pts-viewer.css" rel="stylesheet" type="text/css" />
+ <script src="pts-results-viewer/pts.js" type="text/javascript"></script>
+ </head>
+ <body>
+ <div id="pts_container">
+ <div id="pts_description_area">
+ <div id="pts_logo"></div>
+ <div id="pts_benchmark_main_header"><xsl:value-of select="PhoronixTestSuite/Suite/Title"/></div>
+ <div class="pts_benchmark_descriptor" id="tsd_show" style="display: none;"><div class="pts_area_box"><p><xsl:value-of select="PhoronixTestSuite/Suite/Description"/></p><p style="font-size: 11px;"><em><xsl:value-of select="PhoronixTestSuite/Suite/Name" /> v<xsl:value-of select="PhoronixTestSuite/Suite/Version" /> is maintained by <xsl:value-of select="PhoronixTestSuite/Suite/Maintainer"/></em></p><p><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');"><< Hide Test Details</span></p></div></div>
+ <div class="pts_benchmark_descriptor" id="tsd_hidden"><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');hideObject('tips_show');showObject('tips_hidden');">Show Test Details >></span></div>
+ <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Hardware"/></div>
+ <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Software"/></div>
+ <div class="pts_benchmark_descriptor"><strong>Phoronix Test Suite v<xsl:value-of select="PhoronixTestSuite/System/Version"/></strong></div>
+ <div class="pts_benchmark_descriptor"><strong>Generated by <xsl:value-of select="PhoronixTestSuite/System/Author"/> on <xsl:value-of select="PhoronixTestSuite/System/TestDate"/></strong></div>
+ <div class="pts_benchmark_descriptor"><strong>Test Notes:</strong> <xsl:value-of select="PhoronixTestSuite/System/TestNotes"/></div>
+
+<div style="display: none">
+ <div class="pts_benchmark_descriptor" id="tips_hidden"><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');showObject('tsd_hidden');hideObject('tsd_show');">Performance Optimization Tips >></span></div>
+ <div class="pts_benchmark_descriptor" id="tips_show" style="display: none;"><div class="pts_area_box"><p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p>
+
+<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p></div></div>
+</div>
+
+ </div>
+ <div id="pts_benchmark_area">
+ <xsl:for-each select="PhoronixTestSuite/Benchmark">
+ <div class="pts_benchmark_bar"><span class="pts_benchmark_bar_header"><xsl:value-of select="Name"/></span> <span class="pts_benchmark_bar_version">v<xsl:value-of select="Version"/></span><br /><strong><xsl:value-of select="Attributes"/></strong></div>
+ <div class="pts_benchmark_text">
+ <xsl:for-each select="Results/Group">
+ <div style="padding: 5px 0;">
+ <xsl:for-each select="Entry">
+ <strong><xsl:value-of select="Identifier"/>:</strong><span style="padding-left: 5px;"><xsl:value-of select="Value"/></span><br />
+ </xsl:for-each>
+ </div>
+ </xsl:for-each>
+ </div>
+ <div class="pts_benchmark_img_area"><img width="580" height="300"><xsl:attribute name="src">http://www.phoronix-test-suite.com/pts-grapher/r/graph-remote.php?t=<xsl:value-of select="Name" />&s=<xsl:value-of select="Attributes"/>&n=<xsl:value-of select="Version"/>&u=<xsl:value-of select="Scale"/>&p=<xsl:value-of select="Proportion"/>&i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&v=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Value"/>;</xsl:for-each></xsl:for-each>
+</xsl:attribute></img></div>
+ </xsl:for-each>
+ </div>
+ <p align="center">The <a href="http://www.phoronix-test-suite.com/">Phoronix Test Suite</a> is developed by <a href="http://www.phoronix.com/">Phoronix</a>, an Internet resource devoted to Linux hardware reviews, video driver articles, and much more.</p>
+ </div>
+ </body>
+</html>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/pts-core/pts-run-benchmark.php b/pts-core/pts-run-benchmark.php
index 35c891e..ced4c32 100644
--- a/pts-core/pts-run-benchmark.php
+++ b/pts-core/pts-run-benchmark.php
@@ -219,7 +219,7 @@ else
if($SAVE_RESULTS)
{
$id = pts_request_new_id();
- $RESULTS->setXslBinding("pts-results-viewer/pts-results-viewer.xsl");
+ $RESULTS->setXslBinding("pts-results-viewer/viewer.xsl");
$RESULTS->addXmlObject("PhoronixTestSuite/System/Hardware", $id, pts_hw_string());
$RESULTS->addXmlObject("PhoronixTestSuite/System/Software", $id, pts_sw_string());
$RESULTS->addXmlObject("PhoronixTestSuite/System/Author", $id, pts_current_user());
diff --git a/test-results/pts-results-viewer/phoronix-test-suite.gif b/test-results/pts-results-viewer/phoronix-test-suite.gif
new file mode 100644
index 0000000..f1a27b1
Binary files /dev/null and b/test-results/pts-results-viewer/phoronix-test-suite.gif differ
diff --git a/test-results/pts-results-viewer/pts-viewer.css b/test-results/pts-results-viewer/pts-viewer.css
new file mode 100644
index 0000000..fa055c9
--- /dev/null
+++ b/test-results/pts-results-viewer/pts-viewer.css
@@ -0,0 +1,96 @@
+body
+{
+ text-align: left;
+ margin: 0;
+ padding: 0;
+ font-family: arial, helvetica, sans-serif;
+ font-size: 14px;
+ background-color: #3b433a;
+}
+div#pts_container
+{
+ width: 960px;
+ margin: 0 auto;
+ text-align: left;
+ color: #FFF;
+ overflow: hidden;
+ background-color: #222;
+ border: solid #000;
+ border-width: 0 1px 1px;
+}
+div#pts_container a
+{
+ color: #FFF;
+}
+div#pts_logo
+{
+ margin: 0;
+ width: 960px;
+ height: 70px;
+ background: #222 url(phoronix-test-suite.gif) no-repeat;
+ border: solid #000;
+ border-width: 0 0 1px 0;
+}
+div#pts_benchmark_main_header
+{
+ color: #FFF;
+ font-size: 36px;
+ font-weight: bold;
+ padding: 5px 0 5px 15px;
+}
+div#pts_description_area
+{
+ padding: 0 0 5px;
+}
+div#pts_benchmark_area
+{
+ background-color: #FFF;
+ padding: 15px 10px;
+ color: #000;
+ overflow: hidden;
+}
+div.pts_benchmark_descriptor
+{
+ color: #EFEFEF;
+ padding: 5px 20px;
+}
+div.pts_area_box
+{
+ background-color: #66695B;
+ color: #EFEFEF;
+ padding: 1px 5px 0;
+ border: solid #000 1px;
+}
+div.pts_benchmark_bar
+{
+ background-color: #2b6b29;
+ color: #FFF;
+ padding: 4px;
+ border: solid #000 1px;
+ clear: both;
+}
+span.pts_benchmark_bar_header
+{
+ font-size: 18px;
+ font-weight: bold;
+}
+span.pts_benchmark_bar_version
+{
+ vertical-align: super;
+ padding-left: 5px;
+ font-size: 10px;
+}
+div.pts_benchmark_text
+{
+ padding: 50px 15px 15px;
+ float: left;
+ overflow: hidden;
+}
+div.pts_benchmark_img_area
+{
+ padding: 15px 0 15px 35px;
+ float: right;
+ overflow: hidden;
+ height: 100%;
+ vertical-align: middle;
+}
diff --git a/test-results/pts-results-viewer/pts.js b/test-results/pts-results-viewer/pts.js
new file mode 100644
index 0000000..0ebbac7
--- /dev/null
+++ b/test-results/pts-results-viewer/pts.js
@@ -0,0 +1,15 @@
+function switchShow(i)
+{
+ if(document.getElementById(i).style.display == "none")
+ showObject(i);
+ else
+ hideObject(i);
+}
+function hideObject(i)
+{
+ document.getElementById(i).style.display = "none";
+}
+function showObject(i)
+{
+ document.getElementById(i).style.display = "block";
+}
diff --git a/test-results/pts-results-viewer/viewer.xsl b/test-results/pts-results-viewer/viewer.xsl
new file mode 100644
index 0000000..580f2b2
--- /dev/null
+++ b/test-results/pts-results-viewer/viewer.xsl
@@ -0,0 +1,52 @@
+
<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:template match="/">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Phoronix Test Suite - Results Viewer</title>
+ <link href="pts-results-viewer/pts-viewer.css" rel="stylesheet" type="text/css" />
+ <script src="pts-results-viewer/pts.js" type="text/javascript"></script>
+ </head>
+ <body>
+ <div id="pts_container">
+ <div id="pts_description_area">
+ <div id="pts_logo"></div>
+ <div id="pts_benchmark_main_header"><xsl:value-of select="PhoronixTestSuite/Suite/Title"/></div>
+ <div class="pts_benchmark_descriptor" id="tsd_show" style="display: none;"><div class="pts_area_box"><p><xsl:value-of select="PhoronixTestSuite/Suite/Description"/></p><p style="font-size: 11px;"><em><xsl:value-of select="PhoronixTestSuite/Suite/Name" /> v<xsl:value-of select="PhoronixTestSuite/Suite/Version" /> is maintained by <xsl:value-of select="PhoronixTestSuite/Suite/Maintainer"/></em></p><p><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');"><< Hide Test Details</span></p></div></div>
+ <div class="pts_benchmark_descriptor" id="tsd_hidden"><span style="font-size: 11px;" onclick="switchShow('tsd_hidden');switchShow('tsd_show');hideObject('tips_show');showObject('tips_hidden');">Show Test Details >></span></div>
+ <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Hardware"/></div>
+ <div class="pts_benchmark_descriptor"><xsl:value-of select="PhoronixTestSuite/System/Software"/></div>
+ <div class="pts_benchmark_descriptor"><strong>Phoronix Test Suite v<xsl:value-of select="PhoronixTestSuite/System/Version"/></strong></div>
+ <div class="pts_benchmark_descriptor"><strong>Generated by <xsl:value-of select="PhoronixTestSuite/System/Author"/> on <xsl:value-of select="PhoronixTestSuite/System/TestDate"/></strong></div>
+ <div class="pts_benchmark_descriptor"><strong>Test Notes:</strong> <xsl:value-of select="PhoronixTestSuite/System/TestNotes"/></div>
+
+<div style="display: none">
+ <div class="pts_benchmark_descriptor" id="tips_hidden"><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');showObject('tsd_hidden');hideObject('tsd_show');">Performance Optimization Tips >></span></div>
+ <div class="pts_benchmark_descriptor" id="tips_show" style="display: none;"><div class="pts_area_box"><p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p>
+
+<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');"><< Hide Tips</span></p></div></div>
+</div>
+
+ </div>
+ <div id="pts_benchmark_area">
+ <xsl:for-each select="PhoronixTestSuite/Benchmark">
+ <div class="pts_benchmark_bar"><span class="pts_benchmark_bar_header"><xsl:value-of select="Name"/></span> <span class="pts_benchmark_bar_version">v<xsl:value-of select="Version"/></span><br /><strong><xsl:value-of select="Attributes"/></strong></div>
+ <div class="pts_benchmark_text">
+ <xsl:for-each select="Results/Group">
+ <div style="padding: 5px 0;">
+ <xsl:for-each select="Entry">
+ <strong><xsl:value-of select="Identifier"/>:</strong><span style="padding-left: 5px;"><xsl:value-of select="Value"/></span><br />
+ </xsl:for-each>
+ </div>
+ </xsl:for-each>
+ </div>
+ <div class="pts_benchmark_img_area"><img width="580" height="300"><xsl:attribute name="src">http://www.phoronix-test-suite.com/pts-grapher/r/graph-remote.php?t=<xsl:value-of select="Name" />&s=<xsl:value-of select="Attributes"/>&n=<xsl:value-of select="Version"/>&u=<xsl:value-of select="Scale"/>&p=<xsl:value-of select="Proportion"/>&i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&v=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Value"/>;</xsl:for-each></xsl:for-each>
+</xsl:attribute></img></div>
+ </xsl:for-each>
+ </div>
+ <p align="center">The <a href="http://www.phoronix-test-suite.com/">Phoronix Test Suite</a> is developed by <a href="http://www.phoronix.com/">Phoronix</a>, an Internet resource devoted to Linux hardware reviews, video driver articles, and much more.</p>
+ </div>
+ </body>
+</html>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/test-results/sdfdsfdsf-1.xml b/test-results/sdfdsfdsf-1.xml
new file mode 100644
index 0000000..b9db7c5
--- /dev/null
+++ b/test-results/sdfdsfdsf-1.xml
@@ -0,0 +1,41 @@
+
<?xml version="1.0"?>
+
<?xml-stylesheet type="text/xsl" href="pts-results-viewer/viewer.xsl" ?>
+<!-- Checksum: 12e4763d22dc1a747d82d0b907ca7812 -->
+<!-- Generated: 2008-04-04 14:51:26 -->
+<PhoronixTestSuite>
+ <Benchmark>
+ <Name>Ogg Encoding</Name>
+ <Version>1.2.0</Version>
+ <Attributes>Phoronix Test Suite v0.1.0</Attributes>
+ <Scale>Seconds</Scale>
+ <Proportion></Proportion>
+ <ResultFormat>BAR_GRAPH</ResultFormat>
+ <TestName>encode-ogg</TestName>
+ <TestArguments></TestArguments>
+ <Results>
+ <Group>
+ <Entry>
+ <Identifier>dssdfsdfsdf</Identifier>
+ <Value>9.10</Value>
+ </Entry>
+ </Group>
+ </Results>
+ </Benchmark>
+ <System>
+ <Hardware>Processor: Intel Core2 Duo CPU T9300 @ 2.50GHz (Total Cores: 2), Motherboard Chipset: Intel Mobile PM965/GM965/GL960, System Memory: 1982MB, Graphics: Quadro NVS 140M/PCI/SSE2, Screen Resolution: 1680x1050 </Hardware>
+ <Software>OS: Ubuntu 8.04, Kernel: 2.6.24-14-generic (x86_64), X.Org Server: 1.4.0.90, OpenGL: 2.1.2 NVIDIA 171.06, Compiler: GCC 4.2.3 </Software>
+ <Author>michael</Author>
+ <TestDate>April 4, 2008 02:51 PM</TestDate>
+ <TestNotes> </TestNotes>
+ <Version>0.1.0</Version>
+ <AssociatedIdentifiers>dssdfsdfsdf</AssociatedIdentifiers>
+ </System>
+ <Suite>
+ <Title>sdfdsfdsf</Title>
+ <Name>encode-ogg</Name>
+ <Version>0.1</Version>
+ <Description>This test times how long it takes to encode a sample WAV file to Ogg format.</Description>
+ <Type>Utility</Type>
+ <Maintainer>Michael Larabel</Maintainer>
+ </Suite>
+</PhoronixTestSuite>
diff --git a/test-results/sdfdsfdsf-2.xml b/test-results/sdfdsfdsf-2.xml
new file mode 100644
index 0000000..53e9a5d
--- /dev/null
+++ b/test-results/sdfdsfdsf-2.xml
@@ -0,0 +1,41 @@
+
<?xml version="1.0"?>
+
<?xml-stylesheet type="text/xsl" href="pts-results-viewer/viewer.xsl" ?>
+<!-- Checksum: fd2ec258b89eaf864095e4216b6d4831 -->
+<!-- Generated: 2008-04-04 14:57:53 -->
+<PhoronixTestSuite>
+ <Benchmark>
+ <Name>Ogg Encoding</Name>
+ <Version>1.2.0</Version>
+ <Attributes>Phoronix Test Suite v0.1.0</Attributes>
+ <Scale>Seconds</Scale>
+ <Proportion></Proportion>
+ <ResultFormat>BAR_GRAPH</ResultFormat>
+ <TestName>encode-ogg</TestName>
+ <TestArguments></TestArguments>
+ <Results>
+ <Group>
+ <Entry>
+ <Identifier>fdsfdsf</Identifier>
+ <Value>9.25</Value>
+ </Entry>
+ </Group>
+ </Results>
+ </Benchmark>
+ <System>
+ <Hardware>Processor: Intel Core2 Duo CPU T9300 @ 2.50GHz (Total Cores: 2), Motherboard Chipset: Intel Mobile PM965/GM965/GL960, System Memory: 1982MB, Graphics: Quadro NVS 140M/PCI/SSE2, Screen Resolution: 1680x1050 </Hardware>
+ <Software>OS: Ubuntu 8.04, Kernel: 2.6.24-14-generic (x86_64), X.Org Server: 1.4.0.90, OpenGL: 2.1.2 NVIDIA 171.06, Compiler: GCC 4.2.3 </Software>
+ <Author>michael</Author>
+ <TestDate>April 4, 2008 02:57 PM</TestDate>
+ <TestNotes> </TestNotes>
+ <Version>0.1.0</Version>
+ <AssociatedIdentifiers>fdsfdsf</AssociatedIdentifiers>
+ </System>
+ <Suite>
+ <Title>sdfdsfdsf</Title>
+ <Name>encode-ogg</Name>
+ <Version>0.1</Version>
+ <Description>This test times how long it takes to encode a sample WAV file to Ogg format.</Description>
+ <Type>Utility</Type>
+ <Maintainer>Michael Larabel</Maintainer>
+ </Suite>
+</PhoronixTestSuite>
diff --git a/test-results/sdfdsfdsf.xml b/test-results/sdfdsfdsf.xml
new file mode 100644
index 0000000..d9b8b06
--- /dev/null
+++ b/test-results/sdfdsfdsf.xml
@@ -0,0 +1,45 @@
+
<?xml version="1.0"?>
+
<?xml-stylesheet type="text/xsl" href="pts-results-viewer/viewer.xsl" ?>
+<!-- Checksum: 346b281ee678a3b3a4adcfe2e76c9db3 -->
+<!-- Generated: 2008-04-04 14:57:53 -->
+<PhoronixTestSuite>
+ <Suite>
+ <Title>sdfdsfdsf</Title>
+ <Name>encode-ogg</Name>
+ <Version>0.1</Version>
+ <Description>This test times how long it takes to encode a sample WAV file to Ogg format.</Description>
+ <Type>Utility</Type>
+ <Maintainer>Michael Larabel</Maintainer>
+ </Suite>
+ <System>
+ <Hardware>Processor: Intel Core2 Duo CPU T9300 @ 2.50GHz (Total Cores: 2), Motherboard Chipset: Intel Mobile PM965/GM965/GL960, System Memory: 1982MB, Graphics: Quadro NVS 140M/PCI/SSE2, Screen Resolution: 1680x1050 </Hardware>
+ <Software>OS: Ubuntu 8.04, Kernel: 2.6.24-14-generic (x86_64), X.Org Server: 1.4.0.90, OpenGL: 2.1.2 NVIDIA 171.06, Compiler: GCC 4.2.3 </Software>
+ <Author>michael</Author>
+ <TestDate>April 4, 2008 02:57 PM</TestDate>
+ <TestNotes> </TestNotes>
+ <Version>0.1.0</Version>
+ <AssociatedIdentifiers>dssdfsdfsdf,fdsfdsf</AssociatedIdentifiers>
+ </System>
+ <Benchmark>
+ <Name>Ogg Encoding</Name>
+ <Version>1.2.0</Version>
+ <Attributes>Phoronix Test Suite v0.1.0</Attributes>
+ <Scale>Seconds</Scale>
+ <Proportion></Proportion>
+ <TestName>encode-ogg</TestName>
+ <TestArguments></TestArguments>
+ <ResultFormat>BAR_GRAPH</ResultFormat>
+ <Results>
+ <Group>
+ <Entry>
+ <Identifier>dssdfsdfsdf</Identifier>
+ <Value>9.10</Value>
+ </Entry>
+ <Entry>
+ <Identifier>fdsfdsf</Identifier>
+ <Value>9.25</Value>
+ </Entry>
+ </Group>
+ </Results>
+ </Benchmark>
Copyright © 2010 by Phoronix Media