[ros-diffs] [cfinck] 40337: - Improve the comparison speed by several magnitudes: -> Add an index for the "suite_id" column in "winetest_results" to make the JOINs *much* faster -> Don't rely on MySQL caching the result of a query, which is ran several times. Just run the query once instead and pass the result all the time. - Change the legend to a full CSS layout - Show 0 failures with a green color, otherwise keep the red background color for that cell (idea by Christoph) - Change the color for differences to a neutral grey tone - Little code cleanup

cfinck at svn.reactos.org cfinck at svn.reactos.org
Fri Apr 3 00:05:36 CEST 2009


Author: cfinck
Date: Fri Apr  3 02:05:36 2009
New Revision: 40337

URL: http://svn.reactos.org/svn/reactos?rev=40337&view=rev
Log:
- Improve the comparison speed by several magnitudes:
    -> Add an index for the "suite_id" column in "winetest_results" to make the JOINs *much* faster
    -> Don't rely on MySQL caching the result of a query, which is ran several times.
       Just run the query once instead and pass the result all the time.
- Change the legend to a full CSS layout
- Show 0 failures with a green color, otherwise keep the red background color for that cell (idea by Christoph)
- Change the color for differences to a neutral grey tone
- Little code cleanup

Modified:
    branches/danny-web/reactos.org/htdocs/testman/compare.php
    branches/danny-web/reactos.org/htdocs/testman/css/compare.css
    branches/danny-web/reactos.org/resources/testman/testman.sql

Modified: branches/danny-web/reactos.org/htdocs/testman/compare.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/testman/compare.php?rev=40337&r1=40336&r2=40337&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/testman/compare.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/testman/compare.php [iso-8859-1] Fri Apr  3 02:05:36 2009
@@ -79,8 +79,8 @@
 		die("<i>ids</i> parameter is no array");
 	
 	// Verify that the array only contains numeric values to prevent SQL injections
-	foreach($id_array as $id)
-		if(!is_numeric($id))
+	for($i = 0; $i < count($id_array); $i++)
+		if(!is_numeric($id_array[$i]))
 			die("<i>ids</i> parameter is not entirely numeric!");
 	
 	if(count($id_array) > MAX_COMPARE_RESULTS)
@@ -94,26 +94,25 @@
 	}
 ?>
 
-<table id="legend" cellspacing="5">
-	<tr>
-		<td id="intro"><?php echo $testman_langres["legend"]; ?>:</td>
-		
-		<td class="box totaltests"></td>
-		<td><?php echo $testman_langres["totaltests"]; ?></td>
-		
-		<td class="box failedtests"></td>
-		<td><?php echo $testman_langres["failedtests"]; ?></td>
-		
-		<td class="box todotests"></td>
-		<td><?php echo $testman_langres["todotests"]; ?></td>
-		
-		<td class="box skippedtests"></td>
-		<td><?php echo $testman_langres["skippedtests"]; ?></td>
-		
-		<td class="box" style="background: green;"></td>
-		<td><?php echo $testman_langres["difference"]; ?></td>
-	</tr>
-</table>
+<div id="legend">
+	<div id="intro"><?php echo $testman_langres["legend"]; ?>:</div>
+	
+	<div class="box totaltests"></div>
+	<div class="desc"><?php echo $testman_langres["totaltests"]; ?></div>
+	
+	<div class="zero_failedtests" style="border: solid 1px black; border-right: none; margin: 0; width: 8px;"></div>
+	<div class="real_failedtests" style="border: solid 1px black; border-left: none; width: 7px;"></div>
+	<div class="desc"><?php echo $testman_langres["failedtests"]; ?></div>
+	
+	<div class="box todotests"></div>
+	<div class="desc"><?php echo $testman_langres["todotests"]; ?></div>
+	
+	<div class="box skippedtests"></div>
+	<div class="desc"><?php echo $testman_langres["skippedtests"]; ?></div>
+	
+	<div class="box diff_legend"></div>
+	<div class="desc"><?php echo $testman_langres["difference"]; ?></div>
+</div>
 
 <?php
 	// Establish a DB connection
@@ -127,37 +126,30 @@
 		die("Could not establish the DB connection");
 	}
 	
-	// Get all test suites for which we have at least one result in our ID list
-	$suites_stmt = $dbh->query(
-		"SELECT DISTINCT s.id, s.module, s.test " .
+	// Get all Suite IDs linked to our Test IDs
+	$stmt = $dbh->query(
+		"SELECT s.id " .
 		"FROM " . DB_TESTMAN . ".winetest_suites s " .
 		"JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " .
-		"WHERE test_id IN (" . $_GET["ids"] . ") " .
-		"ORDER BY s.module ASC, s.test ASC"
+		"WHERE e.test_id IN (" . $_GET["ids"] . ")"
 	) or die("Query failed #1");
+	$suite_ids = $stmt->fetchAll(PDO::FETCH_COLUMN);
+	$suite_idlist = implode(",", $suite_ids);
 	
 	// Get the test results for each column
 	$result_stmt = array();
-	$i = 0;
-	
-	foreach($id_array as $id)
+	
+	for($i = 0; $i < count($id_array); $i++)
 	{
 		$result_stmt[$i] = $dbh->prepare(
 			"SELECT e.id, e.count, e.todo, e.failures, e.skipped " .
 			"FROM " . DB_TESTMAN . ".winetest_suites s " .
 			"LEFT JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id AND e.test_id = :testid " .
-			"WHERE s.id IN (" .
-				"SELECT s.id " .
-				"FROM " . DB_TESTMAN . ".winetest_suites s " .
-				"JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " .
-				"WHERE e.test_id IN (" . $_GET["ids"] . ") " .
-			") " .
+			"WHERE s.id IN (" . $suite_idlist . ")" .
 			"ORDER BY s.module, s.test"
 		);
-		$result_stmt[$i]->bindParam(":testid", $id);
-		$result_stmt[$i]->execute() or die("Query failed #2 for statement $i" . print_r($result_stmt[$i]->errorInfo(), true));
-		
-		$i++;
+		$result_stmt[$i]->bindParam(":testid", $id_array[$i]);
+		$result_stmt[$i]->execute() or die("Query failed #2 for statement $i");
 	}
 	
 	echo '<table id="comparetable" class="datatable" cellspacing="0" cellpadding="0">';
@@ -171,9 +163,9 @@
 		"WHERE r.id = :id"
 	);
 	
-	foreach($id_array as $id)
-	{
-		$stmt->bindParam(":id", $id);
+	for($i = 0; $i < count($id_array); $i++)
+	{
+		$stmt->bindParam(":id", $id_array[$i]);
 		$stmt->execute() or die("Query failed #3");
 		$row = $stmt->fetch(PDO::FETCH_ASSOC);
 		
@@ -188,7 +180,16 @@
 	$oddeven = false;
 	$unchanged = array();
 	
-	while($suites_row = $suites_stmt->fetch(PDO::FETCH_ASSOC))
+	// Get all test suites for which we have at least one result in our ID list
+	$stmt = $dbh->query(
+		"SELECT DISTINCT s.id, s.module, s.test " .
+		"FROM " . DB_TESTMAN . ".winetest_suites s " .
+		"JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " .
+		"WHERE test_id IN (" . $_GET["ids"] . ") " .
+		"ORDER BY s.module ASC, s.test ASC"
+	) or die("Query failed #3");
+	
+	while($suites_row = $stmt->fetch(PDO::FETCH_ASSOC))
 	{
 		printf('<tr id="suite_%s" class="%s">', $suites_row["id"], ($oddeven ? "odd" : "even"));
 		printf('<td onmouseover="Cell_OnMouseOver(this)" onmouseout="Cell_OnMouseOut(this)">%s:%s</td>', $suites_row["module"], $suites_row["test"]);
@@ -223,7 +224,7 @@
 				echo '<tr>';
 				printf('<td colspan="3" title="%s" class="totaltests">%s <span class="diff">%s</span></td>', $testman_langres["totaltests"], GetTotalTestsString($result_row["count"]), GetDifference($result_row, $prev_result_row, "count"));
 				echo '</tr><tr>';
-				printf('<td title="%s" class="failedtests">%d <span class="diff">%s</span></td>', $testman_langres["failedtests"], $result_row["failures"], GetDifference($result_row, $prev_result_row, "failures"));
+				printf('<td title="%s" class="%s_failedtests">%d <span class="diff">%s</span></td>', $testman_langres["failedtests"], ($result_row["failures"] > 0 ? 'real' : 'zero'), $result_row["failures"], GetDifference($result_row, $prev_result_row, "failures"));
 				printf('<td title="%s" class="todotests">%d <span class="diff">%s</span></td>', $testman_langres["todotests"], $result_row["todo"], GetDifference($result_row, $prev_result_row, "todo"));
 				printf('<td title="%s" class="skippedtests">%d <span class="diff">%s</span></td>', $testman_langres["skippedtests"], $result_row["skipped"], GetDifference($result_row, $prev_result_row, "skipped"));
 				echo '</tr></table>';
@@ -254,13 +255,8 @@
 	echo "//<![CDATA[\n";
 	echo "var UnchangedRows = Array(";
 	
-	for($i = 0; $i < count($unchanged); $i++)
-	{
-		if($i)
-			echo "," . $unchanged[$i];
-		else
-			echo $unchanged[$i];
-	}
+	// Cut the last comma from the string
+	echo implode(",", $unchanged);
 	
 	echo ");\n";
 	echo "//]]>\n";

Modified: branches/danny-web/reactos.org/htdocs/testman/css/compare.css
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/testman/css/compare.css?rev=40337&r1=40336&r2=40337&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/testman/css/compare.css [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/testman/css/compare.css [iso-8859-1] Fri Apr  3 02:05:36 2009
@@ -7,7 +7,16 @@
 
 #legend {
 	border: solid 1px black;
+	display: inline-block;
+	height: 16px;
 	margin-bottom: 1em;
+	padding: 5px;
+}
+
+#legend div {
+	float: left;
+	height: 15px;
+	margin-right: 5px;
 }
 
 #legend #intro {
@@ -15,21 +24,24 @@
 	padding-right: 10px;
 }
 
-#legend td {
-	padding-right: 5px;
+#legend .box {
+	border: solid 1px black;
+	width: 15px;
 }
 
-#legend td.box {
-	border: solid 1px black;
-	padding: 0;
-	width: 15px;
+#legend .desc {
+	margin-right: 9px;
 }
 
 .totaltests {
 	background-color: #FFFFCC !important;
 }
 
-.failedtests {
+.zero_failedtests {
+	background-color: #33FF66 !important;
+}
+
+.real_failedtests {
 	background-color: #FF6666 !important;
 }
 
@@ -41,14 +53,22 @@
 	background-color: #CCCCCC !important;
 }
 
+.diff_legend {
+	background-color: #5A5A5A !important;
+}
+
 .diff {
-	color: green;
+	color: #5A5A5A;
 }
 
 #TempBlock {
 	background: #5984C3;
 	color: white;
 	font-weight: bold;
+}
+
+#comparetable {
+	clear: left;
 }
 
 #comparetable th, #TempBlock {

Modified: branches/danny-web/reactos.org/resources/testman/testman.sql
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/resources/testman/testman.sql?rev=40337&r1=40336&r2=40337&view=diff
==============================================================================
--- branches/danny-web/reactos.org/resources/testman/testman.sql [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/resources/testman/testman.sql [iso-8859-1] Fri Apr  3 02:05:36 2009
@@ -14,7 +14,8 @@
   `todo` int(10) unsigned NOT NULL COMMENT 'Tests marked as TODO',
   `failures` int(10) unsigned NOT NULL COMMENT 'Number of failed tests',
   `skipped` int(10) unsigned NOT NULL COMMENT 'Number of skipped tests',
-  PRIMARY KEY  (`id`)
+  PRIMARY KEY  (`id`),
+  KEY `suite_id` (`suite_id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
 
 CREATE TABLE `winetest_runs` (



More information about the Ros-diffs mailing list