<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[169241] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/169241">169241</a></dd>
<dt>Author</dt> <dd>msaboff@apple.com</dd>
<dt>Date</dt> <dd>2014-05-22 20:27:36 -0700 (Thu, 22 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Eliminate n/total progress update from run-jsc-stress-tests output to file
https://bugs.webkit.org/show_bug.cgi?id=133191

Reviewed by Geoffrey Garen.

Changed progressMeter setting to be based on stdout being a tty instead of
stdin.  Unified the processing of output from the shell runner to match the
same processing as is used by the makefile runner.  As part of this, the 
shell runner script was simplified.  It now forwards the output of each
test_script just like the Makefile and doesn't provide its own progress.

* Scripts/jsc-stress-test-helpers/shell-runner.sh:
* Scripts/run-jsc-stress-tests:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsjscstresstesthelpersshellrunnersh">trunk/Tools/Scripts/jsc-stress-test-helpers/shell-runner.sh</a></li>
<li><a href="#trunkToolsScriptsrunjscstresstests">trunk/Tools/Scripts/run-jsc-stress-tests</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (169240 => 169241)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2014-05-23 03:16:33 UTC (rev 169240)
+++ trunk/Tools/ChangeLog        2014-05-23 03:27:36 UTC (rev 169241)
</span><span class="lines">@@ -1,5 +1,21 @@
</span><span class="cx"> 2014-05-22  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Eliminate n/total progress update from run-jsc-stress-tests output to file
+        https://bugs.webkit.org/show_bug.cgi?id=133191
+
+        Reviewed by Geoffrey Garen.
+
+        Changed progressMeter setting to be based on stdout being a tty instead of
+        stdin.  Unified the processing of output from the shell runner to match the
+        same processing as is used by the makefile runner.  As part of this, the 
+        shell runner script was simplified.  It now forwards the output of each
+        test_script just like the Makefile and doesn't provide its own progress.
+
+        * Scripts/jsc-stress-test-helpers/shell-runner.sh:
+        * Scripts/run-jsc-stress-tests:
+
+2014-05-22  Michael Saboff  &lt;msaboff@apple.com&gt;
+
</ins><span class="cx">         Add option to run-jsc-stress-tests to use installed jsc
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=133102
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptsjscstresstesthelpersshellrunnersh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/jsc-stress-test-helpers/shell-runner.sh (169240 => 169241)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/jsc-stress-test-helpers/shell-runner.sh        2014-05-23 03:16:33 UTC (rev 169240)
+++ trunk/Tools/Scripts/jsc-stress-test-helpers/shell-runner.sh        2014-05-23 03:27:36 UTC (rev 169241)
</span><span class="lines">@@ -31,15 +31,6 @@
</span><span class="cx">     fi
</span><span class="cx"> fi
</span><span class="cx"> 
</span><del>-VERBOSE=0
-while getopts &quot;v&quot; OPTION
-do
-    case $OPTION in
-        v) VERBOSE=1
-            ;;
-    esac
-done
-
</del><span class="cx"> indexFile=&quot;.index&quot;
</span><span class="cx"> testList=&quot;.all_tests.txt&quot;
</span><span class="cx"> tempFile=&quot;.temp.txt&quot;
</span><span class="lines">@@ -63,7 +54,6 @@
</span><span class="cx">     rmdir ${lockDir}
</span><span class="cx"> fi
</span><span class="cx"> 
</span><del>-total=`wc -l &lt; &quot;${testList}&quot; | sed 's/ //g'`
</del><span class="cx"> for proc in `seq ${numProcs}`
</span><span class="cx"> do
</span><span class="cx">     (
</span><span class="lines">@@ -73,14 +63,13 @@
</span><span class="cx">             index=`cat ${indexFile}`
</span><span class="cx">             index=$((index + 1))
</span><span class="cx">             echo &quot;${index}&quot; &gt; ${indexFile}
</span><del>-            printf &quot;\r ${index}/${total}&quot;
</del><span class="cx"> 
</span><span class="cx">             nextTest=`tail -n 1 ${testList}`
</span><span class="cx">             sed '$d' &lt; ${testList} &gt; ${tempFile}
</span><span class="cx">             mv ${tempFile} ${testList}
</span><span class="cx">             unlock_test_list
</span><span class="cx"> 
</span><del>-            [ $VERBOSE -eq 1 ] &amp;&amp; sh ${nextTest} || sh ${nextTest} 1&gt; /dev/null
</del><ins>+            sh ${nextTest}
</ins><span class="cx"> 
</span><span class="cx">             lock_test_list
</span><span class="cx">         done
</span></span></pre></div>
<a id="trunkToolsScriptsrunjscstresstests"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/run-jsc-stress-tests (169240 => 169241)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/run-jsc-stress-tests        2014-05-23 03:16:33 UTC (rev 169240)
+++ trunk/Tools/Scripts/run-jsc-stress-tests        2014-05-23 03:27:36 UTC (rev 169241)
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-$progressMeter = ($verbosity == 0 and $stdin.tty?)
</del><ins>+$progressMeter = ($verbosity == 0 and $stdout.tty?)
</ins><span class="cx"> 
</span><span class="cx"> if $bundle
</span><span class="cx">     $jscPath = $bundle + &quot;.vm&quot; + &quot;JavaScriptCore.framework&quot; + &quot;Resources&quot; + &quot;jsc&quot;
</span><span class="lines">@@ -1228,8 +1228,76 @@
</span><span class="cx">     result
</span><span class="cx"> end
</span><span class="cx"> 
</span><ins>+def runAndMonitorTestRunnerCommand(numberOfTests, *cmd)
+    unless $progressMeter
+        mysys(*cmd)
+    else
+       running = {}
+       didRun = {}
+       didFail = {}
+       blankLine = true
+       prevStringLength = 0
+       IO.popen(cmd, mode=&quot;r&quot;) {
+           | inp |
+           inp.each_line {
+               | line |
+               line.chomp!
+               if line =~ /^Running /
+                   running[$~.post_match] = true
+               elsif line =~ /^PASS: /
+                   didRun[$~.post_match] = true
+               elsif line =~ /^FAIL: /
+                   didRun[$~.post_match] = true
+                   didFail[$~.post_match] = true
+               else
+                   unless blankLine
+                       print(&quot;\r&quot; + &quot; &quot; * prevStringLength + &quot;\r&quot;)
+                   end
+                   puts line
+                   blankLine = true
+               end
+
+               def lpad(str, chars)
+                   str = str.to_s
+                   if str.length &gt; chars
+                       str
+                   else
+                      &quot;%#{chars}s&quot;%(str)
+                   end
+               end
+
+               string  = &quot;&quot;
+               string += &quot;\r#{lpad(didRun.size, numberOfTests.to_s.size)}/#{numberOfTests}&quot;
+               unless didFail.empty?
+                   string += &quot; (failed #{didFail.size})&quot;
+               end
+               string += &quot; &quot;
+               (running.size - didRun.size).times {
+                   string += &quot;.&quot;
+               }
+               if string.length &lt; prevStringLength
+                   print string
+                   print(&quot; &quot; * (prevStringLength - string.length))
+               end
+               print string
+               prevStringLength = string.length
+               blankLine = false
+               $stdout.flush
+           }
+       }
+       puts
+       raise &quot;Failed to run #{cmd}: #{$?.inspect}&quot; unless $?.success?
+    end
+end
+
</ins><span class="cx"> def runShellTestRunner
</span><span class="cx">     if $remote
</span><ins>+        numberOfTests = 0
+        Dir.chdir($runnerDir) {
+            # -1 for the runscript, and -2 for '..' and '.'
+            numberOfTests = Dir.entries(&quot;.&quot;).count - 3
+        }
+
</ins><span class="cx">         $remoteDirectory = JSON::parse(sshRead(&quot;cat ~/.bencher&quot;))[&quot;tempPath&quot;]
</span><span class="cx">         mysys(&quot;scp&quot;, &quot;-P&quot;, $remotePort.to_s, ($outputDir.dirname + &quot;payload.tar.gz&quot;).to_s, &quot;#{$remoteUser}@#{$remoteHost}:#{$remoteDirectory}&quot;)
</span><span class="cx">         remoteScript = &quot;&quot;
</span><span class="lines">@@ -1237,11 +1305,13 @@
</span><span class="cx">         remoteScript += &quot;rm -rf #{$outputDir.basename} &amp;&amp; &quot;
</span><span class="cx">         remoteScript += &quot;tar xzf payload.tar.gz &amp;&amp; &quot;
</span><span class="cx">         remoteScript += &quot;cd #{$outputDir.basename}/.runner &amp;&amp; &quot;
</span><del>-        remoteScript += &quot;DYLD_FRAMEWORK_PATH=$(cd #{$testingFrameworkPath.dirname}; pwd) sh runscript&quot; 
-        system(&quot;ssh&quot;, &quot;-p&quot;, $remotePort.to_s, &quot;#{$remoteUser}@#{$remoteHost}&quot;, remoteScript)
</del><ins>+        remoteScript += &quot;DYLD_FRAMEWORK_PATH=$(cd #{$testingFrameworkPath.dirname}; pwd) sh runscript&quot;
+        runAndMonitorTestRunnerCommand(numberOfTests, &quot;ssh&quot;, &quot;-p&quot;, $remotePort.to_s, &quot;#{$remoteUser}@#{$remoteHost}&quot;, remoteScript)
</ins><span class="cx">     else
</span><span class="cx">         Dir.chdir($runnerDir) {
</span><del>-            mysys(&quot;sh&quot;, &quot;runscript&quot;)
</del><ins>+            # -1 for the runscript, and -2 for '..' and '.'
+            numberOfTests = Dir.entries(&quot;.&quot;).count - 3
+            runAndMonitorTestRunnerCommand(numberOfTests, &quot;sh&quot;, &quot;runscript&quot;)
</ins><span class="cx">         }
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="lines">@@ -1251,66 +1321,7 @@
</span><span class="cx">     Dir.chdir($runnerDir) {
</span><span class="cx">         # -1 for the Makefile, and -2 for '..' and '.'
</span><span class="cx">         numberOfTests = Dir.entries(&quot;.&quot;).count - 3
</span><del>-        unless $progressMeter
-            mysys(&quot;make&quot;, &quot;-j&quot;, $numProcessors.to_s, &quot;-s&quot;, &quot;-f&quot;, &quot;Makefile&quot;)
-        else
-            cmd = &quot;make -j #{$numProcessors} -s -f Makefile&quot;
-            running = {}
-            didRun = {}
-            didFail = {}
-            blankLine = true
-            prevStringLength = 0
-            IO.popen(cmd, &quot;r&quot;) {
-                | inp |
-                inp.each_line {
-                    | line |
-                    line.chomp!
-                    if line =~ /^Running /
-                        running[$~.post_match] = true
-                    elsif line =~ /^PASS: /
-                        didRun[$~.post_match] = true
-                    elsif line =~ /^FAIL: /
-                        didRun[$~.post_match] = true
-                        didFail[$~.post_match] = true
-                    else
-                        unless blankLine
-                            print(&quot;\r&quot; + &quot; &quot; * prevStringLength + &quot;\r&quot;)
-                        end
-                        puts line
-                        blankLine = true
-                    end
-                    
-                    def lpad(str, chars)
-                        str = str.to_s
-                        if str.length &gt; chars
-                            str
-                        else
-                            &quot;%#{chars}s&quot;%(str)
-                        end
-                    end
-    
-                    string  = &quot;&quot;
-                    string += &quot;\r#{lpad(didRun.size, numberOfTests.to_s.size)}/#{numberOfTests}&quot;
-                    unless didFail.empty?
-                        string += &quot; (failed #{didFail.size})&quot;
-                    end
-                    string += &quot; &quot;
-                    (running.size - didRun.size).times {
-                        string += &quot;.&quot;
-                    }
-                    if string.length &lt; prevStringLength
-                        print string
-                        print(&quot; &quot; * (prevStringLength - string.length))
-                    end
-                    print string
-                    prevStringLength = string.length
-                    blankLine = false
-                    $stdout.flush
-                }
-            }
-            puts
-            raise &quot;Failed to run #{cmd}: #{$?.inspect}&quot; unless $?.success?
-        end
</del><ins>+        runAndMonitorTestRunnerCommand(numberOfTests, &quot;make&quot;, &quot;-j&quot;, $numProcessors.to_s, &quot;-s&quot;, &quot;-f&quot;, &quot;Makefile&quot;)
</ins><span class="cx">     }
</span><span class="cx"> end
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>