<!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>[196979] 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/196979">196979</a></dd>
<dt>Author</dt> <dd>clopez@igalia.com</dd>
<dt>Date</dt> <dd>2016-02-23 09:38:38 -0800 (Tue, 23 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GTK] Allow to run the WebKitGTK+ MiniBrowser with the run-benchmark script.
https://bugs.webkit.org/show_bug.cgi?id=153993

Reviewed by Carlos Garcia Campos.

* MiniBrowser/gtk/main.c:
(createBrowserWindow): Support --geometry argument for MiniBrowser.
We use this on the gtk_minibrowser_driver script to start the MiniBrowser maximized.
* Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Fix loading of subclasses:
The base class has to be loaded first, otherwise any subclase referencing it will give import error.
In OSX the ordering of os.listdir() causes the base class (browser_driver.py) to be first on the list, but not on Linux.
By specifiying the name of the base class file, we ensure it is always loaded first on any system despite the ordering of listdir.
* Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
(BrowserDriverFactory.create):
* Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py: Added.
(GTKBrowserDriver):
(GTKBrowserDriver.prepare_env):
(GTKBrowserDriver.restore_env):
(GTKBrowserDriver.close_browsers):
(GTKBrowserDriver._launch_process):
(GTKBrowserDriver._terminate_processes):
(GTKBrowserDriver._screen_size):
* Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Added.
(GTKMiniBrowserDriver):
(GTKMiniBrowserDriver.prepare_env):
(GTKMiniBrowserDriver.launch_url):
(GTKMiniBrowserDriver.close_browsers):
* Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Fix loading of subclasses. See description above.
* Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
(SimpleHTTPServerDriver):
(SimpleHTTPServerDriver.kill_server): Check if the server is still running before trying to terminate it.
Usually the server ends gracefully (no need to terminate it), so this was causing ugly errors on the log.
* Scripts/webkitpy/benchmark_runner/utils.py: Fix loading of subclasses. See description above.
(load_subclasses):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowsergtkmainc">trunk/Tools/MiniBrowser/gtk/main.c</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_driver__init__py">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverbrowser_driver_factorypy">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerhttp_server_driver__init__py">trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerhttp_server_driversimple_http_server_driverpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerutilspy">trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_drivergtk_browser_driverpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_drivergtk_minibrowser_driverpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/ChangeLog        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2016-02-23  Carlos Alberto Lopez Perez  &lt;clopez@igalia.com&gt;
+
+        [GTK] Allow to run the WebKitGTK+ MiniBrowser with the run-benchmark script.
+        https://bugs.webkit.org/show_bug.cgi?id=153993
+
+        Reviewed by Carlos Garcia Campos.
+
+        * MiniBrowser/gtk/main.c:
+        (createBrowserWindow): Support --geometry argument for MiniBrowser.
+        We use this on the gtk_minibrowser_driver script to start the MiniBrowser maximized.
+        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Fix loading of subclasses:
+        The base class has to be loaded first, otherwise any subclase referencing it will give import error.
+        In OSX the ordering of os.listdir() causes the base class (browser_driver.py) to be first on the list, but not on Linux.
+        By specifiying the name of the base class file, we ensure it is always loaded first on any system despite the ordering of listdir.
+        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
+        (BrowserDriverFactory.create):
+        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py: Added.
+        (GTKBrowserDriver):
+        (GTKBrowserDriver.prepare_env):
+        (GTKBrowserDriver.restore_env):
+        (GTKBrowserDriver.close_browsers):
+        (GTKBrowserDriver._launch_process):
+        (GTKBrowserDriver._terminate_processes):
+        (GTKBrowserDriver._screen_size):
+        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Added.
+        (GTKMiniBrowserDriver):
+        (GTKMiniBrowserDriver.prepare_env):
+        (GTKMiniBrowserDriver.launch_url):
+        (GTKMiniBrowserDriver.close_browsers):
+        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Fix loading of subclasses. See description above.
+        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
+        (SimpleHTTPServerDriver):
+        (SimpleHTTPServerDriver.kill_server): Check if the server is still running before trying to terminate it.
+        Usually the server ends gracefully (no need to terminate it), so this was causing ugly errors on the log.
+        * Scripts/webkitpy/benchmark_runner/utils.py: Fix loading of subclasses. See description above.
+        (load_subclasses):
+
</ins><span class="cx"> 2016-02-23  Alejandro G. Castro  &lt;alex@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Missing configuration patch for openh264 compilation
</span></span></pre></div>
<a id="trunkToolsMiniBrowsergtkmainc"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/gtk/main.c (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/gtk/main.c        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/MiniBrowser/gtk/main.c        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> static GdkRGBA *backgroundColor;
</span><span class="cx"> static gboolean editorMode;
</span><span class="cx"> static const char *sessionFile;
</span><ins>+static char *geometry;
</ins><span class="cx"> 
</span><span class="cx"> typedef enum {
</span><span class="cx">     MINI_BROWSER_ERROR_INVALID_ABOUT_PATH
</span><span class="lines">@@ -67,6 +68,8 @@
</span><span class="cx">     GtkWidget *mainWindow = browser_window_new(WEBKIT_WEB_VIEW(webView), NULL);
</span><span class="cx">     if (backgroundColor)
</span><span class="cx">         browser_window_set_background_color(BROWSER_WINDOW(mainWindow), backgroundColor);
</span><ins>+    if (geometry)
+        gtk_window_parse_geometry(BROWSER_WINDOW(mainWindow), geometry);
</ins><span class="cx"> 
</span><span class="cx">     if (webkitSettings)
</span><span class="cx">         webkit_web_view_set_settings(WEBKIT_WEB_VIEW(webView), webkitSettings);
</span><span class="lines">@@ -102,6 +105,7 @@
</span><span class="cx">     { &quot;bg-color&quot;, 0, 0, G_OPTION_ARG_CALLBACK, parseBackgroundColor, &quot;Background color&quot;, NULL },
</span><span class="cx">     { &quot;editor-mode&quot;, 'e', 0, G_OPTION_ARG_NONE, &amp;editorMode, &quot;Run in editor mode&quot;, NULL },
</span><span class="cx">     { &quot;session-file&quot;, 's', 0, G_OPTION_ARG_FILENAME, &amp;sessionFile, &quot;Session file&quot;, &quot;FILE&quot; },
</span><ins>+    { &quot;geometry&quot;, 'g', 0, G_OPTION_ARG_STRING, &amp;geometry, &quot;Set the size and position of the window (WIDTHxHEIGHT+X+Y)&quot;, &quot;GEOMETRY&quot; },
</ins><span class="cx">     { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &amp;uriArguments, 0, &quot;[URL…]&quot; },
</span><span class="cx">     { 0, 0, 0, 0, 0, 0, 0 }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_driver__init__py"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -25,4 +25,5 @@
</span><span class="cx"> load_subclasses(
</span><span class="cx">     dirname=os.path.dirname(os.path.abspath(__file__)),
</span><span class="cx">     base_class_name='BrowserDriver',
</span><ins>+    base_class_file='browser_driver.py',
</ins><span class="cx">     loader=browser_driver_loader)
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverbrowser_driver_factorypy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -30,4 +30,6 @@
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="cx">     def create(cls, platform, browser_name):
</span><ins>+        if browser_name not in cls.browser_drivers[platform]:
+            raise ValueError(&quot;Browser \&quot;%s\&quot; is not available on platform \&quot;%s\&quot;&quot; % (browser_name, platform))
</ins><span class="cx">         return cls.browser_drivers[platform][browser_name]()
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_drivergtk_browser_driverpy"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py (0 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+# Copyright (C) 2016 Igalia S.L. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import subprocess
+from browser_driver import BrowserDriver
+
+_log = logging.getLogger(__name__)
+
+
+class GTKBrowserDriver(BrowserDriver):
+    process_name = None
+    platform = 'gtk'
+
+    def prepare_env(self, device_id):
+        self.close_browsers()
+
+    def restore_env(self):
+        pass
+
+    def close_browsers(self):
+        self._terminate_processes(self.process_name)
+
+    @classmethod
+    def _launch_process(cls, args, env=None):
+        process = subprocess.Popen(args)
+        return process
+
+    @classmethod
+    def _terminate_processes(cls, process_name):
+        _log.info('Closing all processes with name %s' % process_name)
+        subprocess.call(['/usr/bin/killall', process_name])
+
+    @classmethod
+    def _screen_size(cls):
+        # load_subclasses() from __init__.py will load this file to
+        # check the platform defined. Do here a lazy import instead of
+        # trying to import the Gtk module on the global scope of this
+        # file to avoid ImportError errors on other platforms.
+        # Python imports are cached and only run once, so this should be ok.
+        from gi.repository import Gtk
+        screen = Gtk.Window().get_screen()
+        return screen.get_monitor_geometry(screen.get_primary_monitor())
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_drivergtk_minibrowser_driverpy"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py (0 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py                                (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+# Copyright (C) 2016 Igalia S.L. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import sys
+from gtk_browser_driver import GTKBrowserDriver
+
+_log = logging.getLogger(__name__)
+
+
+class GTKMiniBrowserDriver(GTKBrowserDriver):
+    process_name = 'MiniBrowser'
+    browser_name = 'minibrowser'
+
+    def prepare_env(self, device_id):
+        self._minibrowser_process = None
+        super(GTKMiniBrowserDriver, self).prepare_env(device_id)
+
+    def launch_url(self, url, browser_build_path):
+        args = ['Tools/Scripts/run-minibrowser', '--gtk']
+        args.append(&quot;--geometry=%sx%s&quot; % (self._screen_size().width, self._screen_size().height))
+        args.append(url)
+        _log.info('Launching Minibrowser with url: %s' % url)
+        self._minibrowser_process = GTKBrowserDriver._launch_process(args)
+
+    def close_browsers(self):
+        super(GTKMiniBrowserDriver, self).close_browsers()
+        if self._minibrowser_process and self._minibrowser_process.returncode:
+            sys.exit('MiniBrowser crashed with exitcode %d' % self._minibrowser_process.returncode)
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerhttp_server_driver__init__py"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -26,4 +26,5 @@
</span><span class="cx"> load_subclasses(
</span><span class="cx">     dirname=os.path.dirname(os.path.abspath(__file__)),
</span><span class="cx">     base_class_name='HTTPServerDriver',
</span><ins>+    base_class_file='http_server_driver.py',
</ins><span class="cx">     loader=http_server_driver_loader)
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerhttp_server_driversimple_http_server_driverpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx">     &quot;&quot;&quot;This class depends on unix environment, need to be modified to achieve crossplatform compability
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx"> 
</span><del>-    platforms = ['osx']
</del><ins>+    platforms = ['osx', 'gtk']
</ins><span class="cx"> 
</span><span class="cx">     def __init__(self):
</span><span class="cx">         self._server_process = None
</span><span class="lines">@@ -85,7 +85,8 @@
</span><span class="cx"> 
</span><span class="cx">     def kill_server(self):
</span><span class="cx">         try:
</span><del>-            self._server_process.terminate()
</del><ins>+            if self._server_process.poll() is None:
+                self._server_process.terminate()
</ins><span class="cx">         except OSError as error:
</span><span class="cx">             _log.info('Error terminating server process: %s' % (error))
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerutilspy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py (196978 => 196979)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py        2016-02-23 16:49:54 UTC (rev 196978)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/utils.py        2016-02-23 17:38:38 UTC (rev 196979)
</span><span class="lines">@@ -18,11 +18,10 @@
</span><span class="cx">     return inspect.isclass(child) and parent_name in [cls.__name__ for cls in inspect.getmro(child)]
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-def load_subclasses(dirname, base_class_name, loader):
-    for filename in os.listdir(dirname):
-        if not filename.endswith('.py') or filename in ['__init__.py']:
-            continue
-        module_name = filename[:-3]
</del><ins>+def load_subclasses(dirname, base_class_name, base_class_file, loader):
+    filelist = [base_class_file] + [f for f in os.listdir(dirname) if f.endswith('.py') and f not in ['__init__.py', base_class_file]]
+    for filename in filelist:
+        module_name = os.path.splitext(filename)[0]
</ins><span class="cx">         module = imp.load_source(module_name, os.path.join(dirname, filename))
</span><span class="cx">         for item_name in dir(module):
</span><span class="cx">             item = getattr(module, item_name)
</span></span></pre>
</div>
</div>

</body>
</html>