<!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>[184124] 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/184124">184124</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2015-05-11 14:40:52 -0700 (Mon, 11 May 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>run-benchmark should support SunSpider, Kraken and Octane
https://bugs.webkit.org/show_bug.cgi?id=144840

Reviewed by Darin Adler.

Added the support for SunSpider, Kraken, and Octane. Because of the licensing issues, we can't commit the
Kraken source code into the WebKit repository as done for other benchmarks. Instead, we'll dynamically
download it from the remote server using newly added RemoteZipBenchmarkBuilder. We do the same for Octane
for simplicity. Use newly added --local-copy option to specify the location of a local copy if there is any.

Renamed &quot;original_benchmark in the plan file to &quot;local_copy&quot; and added a new optional &quot;remote_archive&quot; to
specify the URL to a remote ZIP file. This optional field is used by Kraken and Octane benchmark plans.

In addition, generalized the ability to run a &quot;create script&quot; in JetStreamBenchmarkBuilder since it's also
needed for SunSpider and Kraken. This feature has now been folded into GenericBenchmarkBuilder.

* Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Added
RemoteZipBenchmarkBuilder for Kraken and removed JetStreamBenchmarkBuilder since GenericBenchmarkBuilder
now has the ability to run an arbitrary &quot;create script&quot;.

* Scripts/run-benchmark:
(main): Added an optional argument, --local-copy, to override the location of the benchmark's local copy.
This also overrides the remote archive URL specified in the plan.

* Scripts/webkitpy/benchmark_runner/README.md: Updated the description.

* Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Deleted the entry for
JetStreamBenchmarkBuilder.

* Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: 
(GenericBenchmarkBuilder.prepare): Call _fetchRemoteArchive if local_copy is not specified in the plan or
by --local-copy option but remote_archive is specified. Also call self.clean() here instead of relying on
_runCreateScript and _applyPatch to clean after themselves.
(GenericBenchmarkBuilder._runCreateScript): Moved from JetStreamBenchmarkBuilder._runCreateScript since
JetStream, SunSpider, Kraken all use this feature.
(GenericBenchmarkBuilder._copyBenchmarkToTempDir): Use self.name as the destination location instead of
the leaf directory name since the latter is not available when a remote ZIP file is used.
(GenericBenchmarkBuilder._fetchRemoteArchive): Added.
(GenericBenchmarkBuilder._applyPatch): Apply the patch inside destination directory to avoid hard coding
the benchmark name in the patches.

* Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py: Removed.

* Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
(BenchmarkRunner.__init__): Set self.planName. Also override 'local_copy' when --local-copy option is used.
(BenchmarkRunner.execute): Exit early if neither local_copy nor remote_archive is specified. Prefix the URL
the browser opens by planName as the plan file no longer contains that.

* Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Changed the path to be relative against
the top directory of JetStream instead of its parent.
* Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch: Added.
* Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch: Added.
* Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch: Changed the path to be relative against
the top directory of JetStream instead of its parent.
* Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch: Added.
* Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Uses GenericBenchmarkBuilder and specifies
the script to run. The entry point was changed to the relative path from the top directory of JetStream as
done in JetStream.patch.
* Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Added.
* Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Added.
* Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: The entry point was changed to the relative
path from the top directory of JetStream as done in JetStream.patch.
* Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsrunbenchmark">trunk/Tools/Scripts/run-benchmark</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerREADMEmd">trunk/Tools/Scripts/webkitpy/benchmark_runner/README.md</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbenchmark_builderbenchmark_buildersjson">trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbenchmark_buildergeneric_benchmark_builderpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbenchmark_runnerpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatapatchesJetStreampatch">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatapatchesSpeedometerpatch">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdataplansjetstreamplan">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdataplansspeedometerplan">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatapatchesKrakenpatch">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatapatchesOctanepatch">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatapatchesSunSpiderpatch">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdataplanskrakenplan">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdataplansoctaneplan">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdataplanssunspiderplan">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbenchmark_builderjetstream_benchmark_builderpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/ChangeLog        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -1,3 +1,69 @@
</span><ins>+2015-05-11  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        run-benchmark should support SunSpider, Kraken and Octane
+        https://bugs.webkit.org/show_bug.cgi?id=144840
+
+        Reviewed by Darin Adler.
+
+        Added the support for SunSpider, Kraken, and Octane. Because of the licensing issues, we can't commit the
+        Kraken source code into the WebKit repository as done for other benchmarks. Instead, we'll dynamically
+        download it from the remote server using newly added RemoteZipBenchmarkBuilder. We do the same for Octane
+        for simplicity. Use newly added --local-copy option to specify the location of a local copy if there is any.
+
+        Renamed &quot;original_benchmark in the plan file to &quot;local_copy&quot; and added a new optional &quot;remote_archive&quot; to
+        specify the URL to a remote ZIP file. This optional field is used by Kraken and Octane benchmark plans.
+
+        In addition, generalized the ability to run a &quot;create script&quot; in JetStreamBenchmarkBuilder since it's also
+        needed for SunSpider and Kraken. This feature has now been folded into GenericBenchmarkBuilder.
+
+        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Added
+        RemoteZipBenchmarkBuilder for Kraken and removed JetStreamBenchmarkBuilder since GenericBenchmarkBuilder
+        now has the ability to run an arbitrary &quot;create script&quot;.
+
+        * Scripts/run-benchmark:
+        (main): Added an optional argument, --local-copy, to override the location of the benchmark's local copy.
+        This also overrides the remote archive URL specified in the plan.
+
+        * Scripts/webkitpy/benchmark_runner/README.md: Updated the description.
+
+        * Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json: Deleted the entry for
+        JetStreamBenchmarkBuilder.
+
+        * Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py: 
+        (GenericBenchmarkBuilder.prepare): Call _fetchRemoteArchive if local_copy is not specified in the plan or
+        by --local-copy option but remote_archive is specified. Also call self.clean() here instead of relying on
+        _runCreateScript and _applyPatch to clean after themselves.
+        (GenericBenchmarkBuilder._runCreateScript): Moved from JetStreamBenchmarkBuilder._runCreateScript since
+        JetStream, SunSpider, Kraken all use this feature.
+        (GenericBenchmarkBuilder._copyBenchmarkToTempDir): Use self.name as the destination location instead of
+        the leaf directory name since the latter is not available when a remote ZIP file is used.
+        (GenericBenchmarkBuilder._fetchRemoteArchive): Added.
+        (GenericBenchmarkBuilder._applyPatch): Apply the patch inside destination directory to avoid hard coding
+        the benchmark name in the patches.
+
+        * Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py: Removed.
+
+        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
+        (BenchmarkRunner.__init__): Set self.planName. Also override 'local_copy' when --local-copy option is used.
+        (BenchmarkRunner.execute): Exit early if neither local_copy nor remote_archive is specified. Prefix the URL
+        the browser opens by planName as the plan file no longer contains that.
+
+        * Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch: Changed the path to be relative against
+        the top directory of JetStream instead of its parent.
+        * Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch: Added.
+        * Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch: Added.
+        * Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch: Changed the path to be relative against
+        the top directory of JetStream instead of its parent.
+        * Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch: Added.
+        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan: Uses GenericBenchmarkBuilder and specifies
+        the script to run. The entry point was changed to the relative path from the top directory of JetStream as
+        done in JetStream.patch.
+        * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan: Added.
+        * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan: Added.
+        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan: The entry point was changed to the relative
+        path from the top directory of JetStream as done in JetStream.patch.
+        * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan: Added.
+
</ins><span class="cx"> 2015-05-11  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix run-javascriptcore-tests step on the WinCairo bot
</span></span></pre></div>
<a id="trunkToolsScriptsrunbenchmark"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/run-benchmark (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/run-benchmark        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/run-benchmark        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx">     # FIXME: Should we add chrome as an option? Well, chrome uses webkit in iOS.
</span><span class="cx">     parser.add_argument('--browser', dest='browser', required=True, choices=BrowserDriverFactory.available_browsers())
</span><span class="cx">     parser.add_argument('--debug', action='store_true')
</span><ins>+    parser.add_argument('--local-copy', dest='localCopy', help='Path to a local copy of the benchmark. e.g. PerformanceTests/SunSpider/')
</ins><span class="cx">     args = parser.parse_args()
</span><span class="cx"> 
</span><span class="cx">     if args.debug:
</span><span class="lines">@@ -34,7 +35,7 @@
</span><span class="cx">     _log.debug('\toutput file name\t: %s' % args.output)
</span><span class="cx">     _log.debug('\tbuild directory\t: %s' % args.buildDir)
</span><span class="cx">     _log.debug('\tplan name\t: %s', args.plan)
</span><del>-    runner = BenchmarkRunner(args.plan, args.buildDir, args.output, args.platform, args.browser)
</del><ins>+    runner = BenchmarkRunner(args.plan, args.localCopy, args.buildDir, args.output, args.platform, args.browser)
</ins><span class="cx">     return runner.execute()
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerREADMEmd"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/README.md (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/README.md        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/README.md        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     &quot;timeout&quot; : 600,
</span><span class="cx">     &quot;count&quot;: 5,
</span><span class="cx">     &quot;benchmark_builder&quot;: &quot;JetStreamBenchmarkBuilder&quot;,
</span><del>-    &quot;original_benchmark&quot;: &quot;../../../../PerformanceTests/JetStream&quot;,
</del><ins>+    &quot;local_copy&quot;: &quot;../../../../PerformanceTests/JetStream&quot;,
</ins><span class="cx">     &quot;benchmark_patch&quot;: &quot;data/patches/JetStream.patch&quot;,
</span><span class="cx">     &quot;entry_point&quot;: &quot;JetStream/JetStream-1.0.1/index.html&quot;,
</span><span class="cx">     &quot;output_file&quot;: &quot;jetstream.result&quot;
</span><span class="lines">@@ -69,9 +69,10 @@
</span><span class="cx"> * **timeout**: time limit for **EACH RUN** of the benchmark. This can avoid program getting stuck in the extreme circumstances. The time limit is suggested to be 1.5-2x the time spent in a normal run.
</span><span class="cx"> * **count**: the number of times you want to run benchmark
</span><span class="cx"> * **benchmark_builder**:  builder of the benchmark which is responsible for arranging benchmark before the web server serving the directory. In most case, 'GenericBenchmarkHandler' is sufficient. It copies the benchmark to a temporary directory and applies patch to benchmark. If you have special requirement, you could design your own benchmark handle, just like the 'JetStreamBenchmarkHandle' in this example.
</span><del>-* **original_benchmark**: path of benchmark, a relative path to the root of this project ('benchmark_runner' directory)
</del><ins>+* **local_copy**: path of benchmark, a relative path to the root of this project ('benchmark_runner' directory)
+* **remote_archive**: (**OPTIONAL**) URL of the remote (http/https) ZIP file that contains the benchmark.
</ins><span class="cx"> * **benchmark_path**: (**OPTIONAL**) path of patch, a relative path to the root of this project ('benchmark_runner' directory)
</span><del>-* **entry_point**: the relative url you want browser to launch (a relative path to the webRoot)
</del><ins>+* **entry_point**: the relative url you want browser to launch (a relative path to the benchmark directory)
</ins><span class="cx"> * **output_file**: specify the output file, this can be overwritten by specifying '--output-file' while invoking run-benchmark script
</span><span class="cx"> 
</span><span class="cx"> ### How to import a benchmark
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbenchmark_builderbenchmark_buildersjson"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/benchmark_builders.json        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -2,9 +2,5 @@
</span><span class="cx">     &quot;GenericBenchmarkBuilder&quot;: {
</span><span class="cx">         &quot;filePath&quot;: &quot;benchmark_builder.generic_benchmark_builder&quot;,
</span><span class="cx">         &quot;moduleName&quot;: &quot;GenericBenchmarkBuilder&quot;
</span><del>-    },
-    &quot;JetStreamBenchmarkBuilder&quot;: {
-        &quot;filePath&quot;: &quot;benchmark_builder.jetstream_benchmark_builder&quot;,
-        &quot;moduleName&quot;: &quot;JetStreamBenchmarkBuilder&quot;
</del><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbenchmark_buildergeneric_benchmark_builderpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/generic_benchmark_builder.py        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -3,9 +3,11 @@
</span><span class="cx"> import logging
</span><span class="cx"> import tempfile
</span><span class="cx"> import os
</span><ins>+import urllib
</ins><span class="cx"> import shutil
</span><span class="cx"> import subprocess
</span><span class="cx"> 
</span><ins>+from zipfile import ZipFile
</ins><span class="cx"> from webkitpy.benchmark_runner.utils import getPathFromProjectRoot, forceRemove
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -14,27 +16,61 @@
</span><span class="cx"> 
</span><span class="cx"> class GenericBenchmarkBuilder(object):
</span><span class="cx"> 
</span><del>-    def prepare(self, benchmarkPath, patch):
-        self._copyBenchmarkToTempDir(benchmarkPath)
-        return self._applyPatch(patch)
</del><ins>+    def prepare(self, name, benchmarkPath, archiveURL, patch, createScript):
+        self.name = name
+        self.webRoot = tempfile.mkdtemp()
+        self.dest = os.path.join(self.webRoot, self.name)
+        if benchmarkPath:
+            self._copyBenchmarkToTempDir(benchmarkPath)
+        else:
+            assert(archiveURL)
+            self._fetchRemoteArchive(archiveURL)
</ins><span class="cx"> 
</span><ins>+        _log.info('Copied the benchmark into: %s' % self.dest)
+        try:
+            if createScript:
+                self._runCreateScript(createScript)
+            return self._applyPatch(patch)
+        except:
+            self.clean()
+            raise
+
+    def _runCreateScript(self, createScript):
+        oldWorkingDirectory = os.getcwd()
+        os.chdir(self.dest)
+        _log.debug('Running %s in %s' % (createScript, self.dest))
+        errorCode = subprocess.call(createScript)
+        os.chdir(oldWorkingDirectory)
+        if errorCode:
+            raise Exception('Cannot create the benchmark', errorCode)
+
</ins><span class="cx">     def _copyBenchmarkToTempDir(self, benchmarkPath):
</span><del>-        self.webRoot = tempfile.mkdtemp()
-        _log.debug('Servering at webRoot: %s' % self.webRoot)
-        self.dest = os.path.join(self.webRoot, os.path.split(benchmarkPath)[1])
</del><span class="cx">         shutil.copytree(getPathFromProjectRoot(benchmarkPath), self.dest)
</span><span class="cx"> 
</span><ins>+    def _fetchRemoteArchive(self, archiveURL):
+        archivePath = os.path.join(self.webRoot, 'archive.zip')
+        _log.info('Downloading %s to %s' % (archiveURL, archivePath))
+        urllib.urlretrieve(archiveURL, archivePath)
+
+        with ZipFile(archivePath, 'r') as archive:
+            archive.extractall(self.dest)
+
+        unarchivedFiles = filter(lambda name: not name.startswith('.'), os.listdir(self.dest))
+        if len(unarchivedFiles) == 1:
+            firstFile = os.path.join(self.dest, unarchivedFiles[0])
+            if os.path.isdir(firstFile):
+                shutil.move(firstFile, self.webRoot)
+                os.rename(os.path.join(self.webRoot, unarchivedFiles[0]), self.dest)
+
</ins><span class="cx">     def _applyPatch(self, patch):
</span><span class="cx">         if not patch:
</span><span class="cx">             return self.webRoot
</span><span class="cx">         oldWorkingDirectory = os.getcwd()
</span><del>-        os.chdir(self.webRoot)
</del><ins>+        os.chdir(self.dest)
</ins><span class="cx">         errorCode = subprocess.call(['patch', '-p1', '-f', '-i', getPathFromProjectRoot(patch)])
</span><span class="cx">         os.chdir(oldWorkingDirectory)
</span><span class="cx">         if errorCode:
</span><del>-            _log.error('Cannot apply patch, will skip current benchmarkPath')
-            self.clean()
-            return None
</del><ins>+            raise Exception('Cannot apply patch, will skip current benchmarkPath')
</ins><span class="cx">         return self.webRoot
</span><span class="cx"> 
</span><span class="cx">     def clean(self):
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbenchmark_builderjetstream_benchmark_builderpy"></a>
<div class="delfile"><h4>Deleted: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_builder/jetstream_benchmark_builder.py        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -1,27 +0,0 @@
</span><del>-#!/usr/bin/env python
-
-import logging
-import os
-import subprocess
-
-from generic_benchmark_builder import GenericBenchmarkBuilder
-
-
-_log = logging.getLogger(__name__)
-
-
-class JetStreamBenchmarkBuilder(GenericBenchmarkBuilder):
-
-    def prepare(self, benchmarkPath, patch):
-        super(self.__class__, self)._copyBenchmarkToTempDir(benchmarkPath)
-        self._runCreateScript()
-        return super(self.__class__, self)._applyPatch(patch)
-
-    def _runCreateScript(self):
-        oldWorkingDirectory = os.getcwd()
-        os.chdir(self.dest)
-        _log.debug(self.dest)
-        errorCode = subprocess.call(['ruby', 'create.rb'])
-        os.chdir(oldWorkingDirectory)
-        if errorCode:
-            _log.error('Cannot create JetStream Benchmark')
</del></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbenchmark_runnerpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/benchmark_runner.py        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -23,12 +23,15 @@
</span><span class="cx"> 
</span><span class="cx"> class BenchmarkRunner(object):
</span><span class="cx"> 
</span><del>-    def __init__(self, planFile, buildDir, outputFile, platform, browser):
</del><ins>+    def __init__(self, planFile, localCopy, buildDir, outputFile, platform, browser):
</ins><span class="cx">         _log.info('Initializing benchmark running')
</span><span class="cx">         try:
</span><span class="cx">             planFile = self._findPlanFile(planFile)
</span><span class="cx">             with open(planFile, 'r') as fp:
</span><ins>+                self.planName = os.path.split(os.path.splitext(planFile)[0])[1]
</ins><span class="cx">                 self.plan = json.load(fp)
</span><ins>+                if localCopy:
+                    self.plan['local_copy'] = localCopy
</ins><span class="cx">                 self.browserDriver = BrowserDriverFactory.create([platform, browser])
</span><span class="cx">                 self.httpServerDriver = HTTPServerDriverFactory.create([self.plan['http_server_driver']])
</span><span class="cx">                 self.buildDir = os.path.abspath(buildDir) if buildDir else None
</span><span class="lines">@@ -56,12 +59,19 @@
</span><span class="cx">         _log.info('Start a new benchmark')
</span><span class="cx">         results = []
</span><span class="cx">         benchmarkBuilder = BenchmarkBuilderFactory.create([self.plan['benchmark_builder']])
</span><del>-        webRoot = benchmarkBuilder.prepare(self.plan['original_benchmark'], self.plan['benchmark_patch'] if 'benchmark_patch' in self.plan else None)
</del><ins>+
+        if not self.plan.get('local_copy') and not self.plan.get('remote_archive'):
+            _log.error('Either local_copy or remote_archive must be specified in the plan')
+            return 2
+
+        webRoot = benchmarkBuilder.prepare(self.planName, self.plan.get('local_copy'), self.plan.get('remote_archive'),
+            self.plan.get('benchmark_patch'), self.plan.get('create_script'))
</ins><span class="cx">         for x in xrange(int(self.plan['count'])):
</span><span class="cx">             _log.info('Start the iteration %d of current benchmark' % (x + 1))
</span><span class="cx">             self.httpServerDriver.serve(webRoot)
</span><span class="cx">             self.browserDriver.prepareEnv()
</span><del>-            self.browserDriver.launchUrl(urlparse.urljoin(self.httpServerDriver.baseUrl(), self.plan['entry_point']), self.buildDir)
</del><ins>+            url = urlparse.urljoin(self.httpServerDriver.baseUrl(), self.planName + '/' + self.plan['entry_point'])
+            self.browserDriver.launchUrl(url, self.buildDir)
</ins><span class="cx">             try:
</span><span class="cx">                 with timeout(self.plan['timeout']):
</span><span class="cx">                     result = json.loads(self.httpServerDriver.fetchResult())
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatapatchesJetStreampatch"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/JetStream.patch        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><del>-diff --git a/JetStream/JetStream-1.0.1/JetStreamDriver.js b/JetStream/JetStream-1.0.1/JetStreamDriver.js
</del><ins>+diff --git a/JetStream-1.0.1/JetStreamDriver.js b/JetStream-1.0.1/JetStreamDriver.js
</ins><span class="cx"> index 73ee420..60f587c 100644
</span><del>---- a/JetStream/JetStream-1.0.1/JetStreamDriver.js
-+++ b/JetStream/JetStream-1.0.1/JetStreamDriver.js
</del><ins>+--- a/JetStream-1.0.1/JetStreamDriver.js
++++ b/JetStream-1.0.1/JetStreamDriver.js
</ins><span class="cx"> @@ -448,6 +448,14 @@ var JetStream = (function() {
</span><span class="cx">  
</span><span class="cx">          return rawResults;
</span><span class="lines">@@ -41,10 +41,10 @@
</span><span class="cx">      }
</span><span class="cx">  
</span><span class="cx">      function iterate()
</span><del>-diff --git a/JetStream/JetStream-1.0.1/index.html b/JetStream/JetStream-1.0.1/index.html
</del><ins>+diff --git a/JetStream-1.0.1/index.html b/JetStream-1.0.1/index.html
</ins><span class="cx"> index e27535c..001087d 100644
</span><del>---- a/JetStream/JetStream-1.0.1/index.html
-+++ b/JetStream/JetStream-1.0.1/index.html
</del><ins>+--- a/JetStream-1.0.1/index.html
++++ b/JetStream-1.0.1/index.html
</ins><span class="cx"> @@ -34,8 +34,10 @@
</span><span class="cx">      window.onerror = function() { allIsGood = false; }
</span><span class="cx">  
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatapatchesKrakenpatch"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Kraken.patch        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+diff --git a/hosted/kraken-1.1/driver.html b/hosted/kraken-1.1/driver2.html
+index bfb2c94..5ad1704 100644
+--- a/hosted/kraken-1.1/driver.html
++++ b/hosted/kraken-1.1/driver2.html
+@@ -117,20 +117,28 @@ function recordResult(time)

+ function finish()
+ {
+-    var outputString = &quot;{&quot;;
+-    outputString += '&quot;v&quot;: &quot;kraken-1.1&quot;, ';
++    var tests = {};
+     for (var test in output[0]) {
+-        outputString += '&quot;' + test + '&quot;:[';
+-        for (var i = 0; i &lt; output.length; i++) {
+-             outputString += output[i][test] + &quot;,&quot;;
+-        }
+-        outputString = outputString.substring(0, outputString.length - 1);
+-        outputString += &quot;],&quot;;
++        var values = new Array(output.length);
++        for (var i = 0; i &lt; output.length; i++)
++            values[i] = output[i][test];
++        tests[test] = {&quot;metrics&quot;: {&quot;current&quot;: values}}
+     }
+-    outputString = outputString.substring(0, outputString.length - 1);
+-    outputString += &quot;}&quot;;

+-    location = &quot;results.html?&quot; + encodeURI(outputString);
++    var results = JSON.stringify({&quot;Kraken&quot;: {&quot;metrics&quot;: {&quot;Time&quot;: [&quot;Total&quot;]}, &quot;tests&quot;: tests}});
++    var xhr = new XMLHttpRequest();
++    xhr.open(&quot;POST&quot;, &quot;/report&quot;);
++    xhr.setRequestHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);
++    xhr.setRequestHeader(&quot;Content-Length&quot;, results.length);
++    xhr.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);
++    xhr.onreadystatechange = function() {
++    if(xhr.readyState == XMLHttpRequest.DONE &amp;&amp; xhr.status == 200) {
++            closeRequest = new XMLHttpRequest();
++            closeRequest.open(&quot;GET&quot;, &quot;/shutdown&quot;);
++            closeRequest.send();
++        }
++    }
++    xhr.send(results);
+ }

+ &lt;/script&gt;
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatapatchesOctanepatch"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Octane.patch        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+diff --git a/base.js b/base.js
+index 9d6e3de..cddf800
+--- a/base.js
++++ b/base.js
+@@ -167,7 +167,7 @@ BenchmarkSuite.RunSuites = function(runner, skipBenchmarks) {
+     if (runner.NotifyScore) {
+       var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores);
+       var formatted = BenchmarkSuite.FormatScore(100 * score);
+-      runner.NotifyScore(formatted);
++      runner.NotifyScore(formatted, 100 * score);
+     }
+   }
+   RunStep();
+@@ -250,7 +250,7 @@ BenchmarkSuite.prototype.NotifyResult = function() {
+   BenchmarkSuite.scores.push(score);
+   if (this.runner.NotifyResult) {
+     var formatted = BenchmarkSuite.FormatScore(100 * score);
+-    this.runner.NotifyResult(this.name, formatted);
++    this.runner.NotifyResult(this.name, formatted, 100 * score);
+   }
+   if (this.reference.length == 2) {
+     var meanLatency = BenchmarkSuite.GeometricMeanLatency(this.results);
+@@ -259,7 +259,7 @@ BenchmarkSuite.prototype.NotifyResult = function() {
+       BenchmarkSuite.scores.push(scoreLatency);
+       if (this.runner.NotifyResult) {
+         var formattedLatency = BenchmarkSuite.FormatScore(100 * scoreLatency)
+-        this.runner.NotifyResult(this.name + &quot;Latency&quot;, formattedLatency);
++        this.runner.NotifyResult(this.name + &quot;Latency&quot;, formattedLatency, 100 * scoreLatency);
+       }
+     }
+   }
+index 77cbdfb..fe56fc4
+--- a/index.html
++++ b/index.html
+@@ -57,7 +57,9 @@
+     });
+   }

+-  function AddResult(name, result) {
++  var octaneSubtests = {};
++  function AddResult(name, result, rawScore) {
++    octaneSubtests[name] = {&quot;metrics&quot;: {&quot;Score&quot;: {&quot;current&quot;: [rawScore]}}};
+     console.log(name + ': ' + result);
+     var box = document.getElementById(&quot;Result-&quot; + name);
+     box.innerHTML = result;
+@@ -75,7 +77,21 @@
+     success = false;
+   }

+-  function AddScore(score) {
++  function AddScore(score, rawScore) {
++    var results = JSON.stringify({&quot;Octane&quot;: {&quot;metrics&quot;: {&quot;Score&quot;: {&quot;current&quot;: [rawScore]}}, &quot;tests&quot;: octaneSubtests}});
++    var xhr = new XMLHttpRequest();
++    xhr.open(&quot;POST&quot;, &quot;/report&quot;);
++    xhr.setRequestHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);
++    xhr.setRequestHeader(&quot;Content-Length&quot;, results.length);
++    xhr.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);
++    xhr.onreadystatechange = function() {
++    if(xhr.readyState == XMLHttpRequest.DONE &amp;&amp; xhr.status == 200) {
++            closeRequest = new XMLHttpRequest();
++            closeRequest.open(&quot;GET&quot;, &quot;/shutdown&quot;);
++            closeRequest.send();
++        }
++    }
++    xhr.send(results);
+     var status = document.getElementById(&quot;main-banner&quot;);
+     if (success) {
+       status.innerHTML = &quot;Octane Score: &quot; + score;
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatapatchesSpeedometerpatch"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/Speedometer.patch        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><del>-diff --git a/Speedometer/Full.html b/Speedometer/Full.html
</del><ins>+diff --git a/Full.html b/Full.html
</ins><span class="cx"> index 419b9f2..0b04c69 100644
</span><del>---- a/Speedometer/Full.html
-+++ b/Speedometer/Full.html
</del><ins>+--- a/Full.html
++++ b/Full.html
</ins><span class="cx"> @@ -7,7 +7,6 @@
</span><span class="cx">      &lt;script src=&quot;resources/main.js&quot; defer&gt;&lt;/script&gt;
</span><span class="cx">      &lt;script src=&quot;resources/benchmark-runner.js&quot; defer&gt;&lt;/script&gt;
</span><span class="lines">@@ -10,10 +10,10 @@
</span><span class="cx">      &lt;script src=&quot;resources/tests.js&quot; defer&gt;&lt;/script&gt;
</span><span class="cx">  &lt;/head&gt;
</span><span class="cx">  &lt;body&gt;
</span><del>-diff --git a/Speedometer/resources/benchmark-report.js b/Speedometer/resources/benchmark-report.js
</del><ins>+diff --git a/resources/benchmark-report.js b/resources/benchmark-report.js
</ins><span class="cx"> index c4b4c64..874f597 100644
</span><del>---- a/Speedometer/resources/benchmark-report.js
-+++ b/Speedometer/resources/benchmark-report.js
</del><ins>+--- a/resources/benchmark-report.js
++++ b/resources/benchmark-report.js
</ins><span class="cx"> @@ -1,30 +1,26 @@
</span><span class="cx">  // This file can be customized to report results as needed.
</span><span class="cx">  
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatapatchesSunSpiderpatch"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+diff --git a/hosted/sunspider-1.0.1/driver.html b/hosted/sunspider-1.0.1/driver.html
+index 0700bb2..2dde01a 100644
+--- a/hosted/sunspider-1.0.1/driver.html
++++ b/hosted/sunspider-1.0.1/driver.html
+@@ -103,23 +103,28 @@ function recordResult(time)

+ function finish()
+ {
+-    var outputString = &quot;{&quot;;
+-    outputString += '&quot;v&quot;: &quot;sunspider-1.0.1&quot;, ';
++    var tests = {};
+     for (var test in output[0]) {
+-        outputString += '&quot;' + test + '&quot;:[';
+-        for (var i = 0; i &lt; output.length; i++) {
+-            var time = output[i][test];
+-            if (time != time)
+-                time = &quot;\&quot;NaN\&quot;&quot;;
+-            outputString += time + &quot;,&quot;;
+-        }
+-        outputString = outputString.substring(0, outputString.length - 1);
+-        outputString += &quot;],&quot;;
++        var values = new Array(output.length);
++        for (var i = 0; i &lt; output.length; i++)
++            values[i] = output[i][test];
++        tests[test] = {&quot;metrics&quot;: {&quot;Time&quot;: {&quot;current&quot;: [values]}}}
+     }
+-    outputString = outputString.substring(0, outputString.length - 1);
+-    outputString += &quot;}&quot;;

+-    location = &quot;results.html?&quot; + encodeURI(outputString);
++    var results = JSON.stringify({&quot;SunSpider&quot;: {&quot;metrics&quot;: {&quot;Time&quot;: [&quot;Total&quot;]}, &quot;tests&quot;: tests}});
++    var xhr = new XMLHttpRequest();
++    xhr.open(&quot;POST&quot;, &quot;/report&quot;);
++    xhr.setRequestHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);
++    xhr.setRequestHeader(&quot;Content-Length&quot;, results.length);
++    xhr.setRequestHeader(&quot;Connection&quot;, &quot;close&quot;);
++    xhr.onreadystatechange = function() {
++    if(xhr.readyState == XMLHttpRequest.DONE &amp;&amp; xhr.status == 200) {
++            closeRequest = new XMLHttpRequest();
++            closeRequest.open(&quot;GET&quot;, &quot;/shutdown&quot;);
++            closeRequest.send();
++        }
++    }
++    xhr.send(results);
+ }

+ &lt;/script&gt;
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdataplansjetstreamplan"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -2,9 +2,10 @@
</span><span class="cx">     &quot;http_server_driver&quot;: &quot;SimpleHTTPServerDriver&quot;, 
</span><span class="cx">     &quot;timeout&quot; : 600,
</span><span class="cx">     &quot;count&quot;: 5,
</span><del>-    &quot;benchmark_builder&quot;: &quot;JetStreamBenchmarkBuilder&quot;,
-    &quot;original_benchmark&quot;: &quot;../../../../PerformanceTests/JetStream&quot;,
</del><ins>+    &quot;benchmark_builder&quot;: &quot;GenericBenchmarkBuilder&quot;,
+    &quot;remote_archive&quot;: &quot;../../../../PerformanceTests/JetStream&quot;,
</ins><span class="cx">     &quot;benchmark_patch&quot;: &quot;data/patches/JetStream.patch&quot;,
</span><del>-    &quot;entry_point&quot;: &quot;JetStream/JetStream-1.0.1/index.html&quot;,
</del><ins>+    &quot;create_script&quot;: [&quot;ruby&quot;, &quot;create.rb&quot;],
+    &quot;entry_point&quot;: &quot;JetStream-1.0.1/index.html&quot;,
</ins><span class="cx">     &quot;output_file&quot;: &quot;jetstream.result&quot;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdataplanskrakenplan"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+{
+    &quot;http_server_driver&quot;: &quot;SimpleHTTPServerDriver&quot;,
+    &quot;timeout&quot;: 300,
+    &quot;count&quot;: 5,
+    &quot;benchmark_builder&quot;: &quot;GenericBenchmarkBuilder&quot;,
+    &quot;remote_archive&quot;: &quot;http://hg.mozilla.org/projects/kraken/archive/tip.zip&quot;,
+    &quot;benchmark_patch&quot;: &quot;data/patches/Kraken.patch&quot;,
+    &quot;create_script&quot;: [&quot;python&quot;, &quot;make-hosted.py&quot;],
+    &quot;entry_point&quot;: &quot;hosted/kraken-1.1/driver.html&quot;,
+    &quot;output_file&quot;: &quot;kraken.result&quot;
+}
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdataplansoctaneplan"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/octane.plan        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+{
+    &quot;http_server_driver&quot;: &quot;SimpleHTTPServerDriver&quot;,
+    &quot;timeout&quot;: 300,
+    &quot;count&quot;: 5,
+    &quot;benchmark_builder&quot;: &quot;GenericBenchmarkBuilder&quot;,
+    &quot;remote_archive&quot;: &quot;https://github.com/chromium/octane-benchmark/archive/fab09aef01c2a5560c22cdc1c1a2451c0d0f4cdc.zip&quot;,
+    &quot;benchmark_patch&quot;: &quot;data/patches/Octane.patch&quot;,
+    &quot;entry_point&quot;: &quot;index.html?auto=1&quot;,
+    &quot;output_file&quot;: &quot;octane.result&quot;
+}
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdataplansspeedometerplan"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan (184123 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan        2015-05-11 21:21:17 UTC (rev 184123)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -3,8 +3,8 @@
</span><span class="cx">     &quot;timeout&quot;: 300,
</span><span class="cx">     &quot;count&quot;: 5,
</span><span class="cx">     &quot;benchmark_builder&quot;: &quot;GenericBenchmarkBuilder&quot;,
</span><del>-    &quot;original_benchmark&quot;: &quot;../../../../PerformanceTests/Speedometer&quot;,
</del><ins>+    &quot;local_copy&quot;: &quot;../../../../PerformanceTests/Speedometer&quot;,
</ins><span class="cx">     &quot;benchmark_patch&quot;: &quot;data/patches/Speedometer.patch&quot;,
</span><del>-    &quot;entry_point&quot;: &quot;Speedometer/Full.html&quot;,
</del><ins>+    &quot;entry_point&quot;: &quot;Full.html&quot;,
</ins><span class="cx">     &quot;output_file&quot;: &quot;speedometer.result&quot;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdataplanssunspiderplan"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan (0 => 184124)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan        2015-05-11 21:40:52 UTC (rev 184124)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+{
+    &quot;http_server_driver&quot;: &quot;SimpleHTTPServerDriver&quot;,
+    &quot;timeout&quot;: 300,
+    &quot;count&quot;: 5,
+    &quot;benchmark_builder&quot;: &quot;GenericBenchmarkBuilder&quot;,
+    &quot;local_copy&quot;: &quot;../../../../PerformanceTests/SunSpider&quot;,
+    &quot;benchmark_patch&quot;: &quot;data/patches/SunSpider.patch&quot;,
+    &quot;create_script&quot;: [&quot;perl&quot;, &quot;make-hosted&quot;],
+    &quot;entry_point&quot;: &quot;hosted/sunspider-1.0.1/driver.html&quot;,
+    &quot;output_file&quot;: &quot;sunspider.result&quot;
+}
</ins></span></pre>
</div>
</div>

</body>
</html>