projects / phoronix-test-suite.git / commitdiff
Build Results
 
Summary

Description: Unnamed repository; edit this file to name it for gitweb.
Last Change: Wed 2/3/10 13:04

Recent Commits
Time
Signed-Off By
Description
Commit Diff
Wed 2/3/10 13:04
Michael Larabel  
phoromatic: Add... 
Wed 2/3/10 12:38
Michael Larabel  
phoromatic: Add... 
Wed 2/3/10 12:27
Michael Larabel  
phoromatic: Add... 
Wed 2/3/10 9:26
Michael Larabel  
pts: Drop MD5 hashes in... 
Tue 2/2/10 23:43
Michael Larabel  
phoromatic: Add... 
Tue 2/2/10 23:35
Michael Larabel  
pts-core: Phoromatic... 
 
> --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,+104,@@ 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,+75,@@ 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,+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 1FALSETRUE);
+        }
+    }
+    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_value13), $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 $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($value12);
+
+                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], 12);
+
+        
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 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_imagehexdec(substr($Hex12)), hexdec(substr($Hex32)), hexdec(substr($Hex52)));
+    }
+    protected function 
return_ttf_string_dimensions($String$Font$Size$Big FALSE)
+    {
+        
$box_array imagettfbbox($Size0$Font$String);
+        
$box_width $box_array[4] - $box_array[6];
+
+        if(
$Big)
+            
$box_array imagettfbbox($Size0$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_imagetrue);
+        
imageinterlace($this->graph_imagetrue);
+
+        
// 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_image00$this->graph_attr_width$this->graph_attr_height$this->graph_color_background);
+
+        if(
$this->graph_attr_big_border == TRUE)
+            
imagerectangle($this->graph_image00$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) / 200imagesx($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_headers4$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 != && $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_marks12);
+        }
+    }
+    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 == 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_text10$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_output0);
+        
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 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 != -&& $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');">&lt;&lt; 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 &gt;&gt;</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 &gt;&gt;</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');">&lt;&lt; Hide Tips</span></p>
-
-<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');">&lt;&lt; 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" />&amp;s=<xsl:value-of select="Attributes"/>&amp;n=<xsl:value-of select="Version"/>&amp;u=<xsl:value-of select="Scale"/>&amp;p=<xsl:value-of select="Proportion"/>&amp;i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&amp;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');">&lt;&lt; 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 &gt;&gt;</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 &gt;&gt;</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');">&lt;&lt; Hide Tips</span></p>
+
+<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');">&lt;&lt; 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" />&amp;s=<xsl:value-of select="Attributes"/>&amp;n=<xsl:value-of select="Version"/>&amp;u=<xsl:value-of select="Scale"/>&amp;p=<xsl:value-of select="Proportion"/>&amp;i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&amp;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');">&lt;&lt; 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 &gt;&gt;</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 &gt;&gt;</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');">&lt;&lt; Hide Tips</span></p>
+
+<p><span style="font-size: 11px;" onclick="switchShow('tips_hidden');switchShow('tips_show');">&lt;&lt; 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" />&amp;s=<xsl:value-of select="Attributes"/>&amp;n=<xsl:value-of select="Version"/>&amp;u=<xsl:value-of select="Scale"/>&amp;p=<xsl:value-of select="Proportion"/>&amp;i=<xsl:for-each select="Results/Group"><xsl:for-each select="Entry"><xsl:value-of select="Identifier"/>;</xsl:for-each></xsl:for-each>&amp;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>
 
Phoronix.com
Linux Driver Forums
Copyright © 2010 by Phoronix Media