[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da

yutak at chromium.org yutak at chromium.org
Wed Dec 22 17:57:43 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 567f453172609ce19d370f81221d50c28e253811
Author: yutak at chromium.org <yutak at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Dec 3 11:27:50 2010 +0000

    2010-12-03  Sheriff Bot  <webkit.review.bot at gmail.com>
    
            Unreviewed, rolling out r73222.
            http://trac.webkit.org/changeset/73222
            https://bugs.webkit.org/show_bug.cgi?id=50449
    
            r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
            (Requested by yutak on #webkit).
    
            * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
            * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
            * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
            * Scripts/webkitpy/layout_tests/port/base.py:
            * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
            * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73259 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index c3c31eb..fbba1ec 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,5 +1,21 @@
 2010-12-03  Sheriff Bot  <webkit.review.bot at gmail.com>
 
+        Unreviewed, rolling out r73222.
+        http://trac.webkit.org/changeset/73222
+        https://bugs.webkit.org/show_bug.cgi?id=50449
+
+        r73211 seemed to break Chromium's "Webkit Win (dbg)(2)" bot.
+        (Requested by yutak on #webkit).
+
+        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+        * Scripts/webkitpy/layout_tests/layout_package/message_broker.py:
+        * Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py:
+        * Scripts/webkitpy/layout_tests/port/base.py:
+        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+        * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+
+2010-12-03  Sheriff Bot  <webkit.review.bot at gmail.com>
+
         Unreviewed, rolling out r73228.
         http://trac.webkit.org/changeset/73228
         https://bugs.webkit.org/show_bug.cgi?id=50448
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
index 880cc60..65d0b09 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py
@@ -98,7 +98,7 @@ class WatchableThread(threading.Thread):
 
 
 class TestShellThread(WatchableThread):
-    def __init__(self, port, options, worker_number,
+    def __init__(self, port, options, worker_number, worker_name,
                  filename_list_queue, result_queue):
         """Initialize all the local state for this DumpRenderTree thread.
 
@@ -106,6 +106,7 @@ class TestShellThread(WatchableThread):
           port: interface to port-specific hooks
           options: command line options argument from optparse
           worker_number: identifier for a particular worker thread.
+          worker_name: for logging.
           filename_list_queue: A thread safe Queue class that contains lists
               of tuples of (filename, uri) pairs.
           result_queue: A thread safe Queue class that will contain
@@ -115,7 +116,7 @@ class TestShellThread(WatchableThread):
         self._port = port
         self._options = options
         self._worker_number = worker_number
-        self._name = 'worker/%d' % worker_number
+        self._name = worker_name
         self._filename_list_queue = filename_list_queue
         self._result_queue = result_queue
 
@@ -183,9 +184,6 @@ class TestShellThread(WatchableThread):
     def get_num_tests(self):
         return self._num_tests
 
-    def name(self):
-        return self._name
-
     def next_timeout(self):
         """Return the time the test is supposed to finish by."""
         if self._next_timeout:
@@ -335,7 +333,7 @@ class TestShellThread(WatchableThread):
 
         class SingleTestThread(threading.Thread):
             def run(self):
-                result = worker._run_single_test(test_input, driver)
+                result = worker._run_single_test(driver, test_input)
 
         thread = SingleTestThread()
         thread.start()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
index 285b2e7..e520a9c 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker.py
@@ -26,7 +26,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-"""Module for handling messages and concurrency for run-webkit-tests.
+"""Module for handling messages, threads, processes, and concurrency for run-webkit-tests.
 
 Testing is accomplished by having a manager (TestRunner) gather all of the
 tests to be run, and sending messages to a pool of workers (TestShellThreads)
@@ -54,20 +54,29 @@ def get(port, options):
     """Return an instance of a WorkerMessageBroker."""
     worker_model = options.worker_model
     if worker_model == 'inline':
-        return _InlineBroker(port, options)
+        return InlineBroker(port, options)
     if worker_model == 'threads':
-        return _MultiThreadedBroker(port, options)
+        return MultiThreadedBroker(port, options)
     raise ValueError('unsupported value for --worker-model: %s' % worker_model)
 
 
-class _WorkerMessageBroker(object):
+class _WorkerState(object):
+    def __init__(self, name):
+        self.name = name
+        self.thread = None
+
+
+class WorkerMessageBroker(object):
     def __init__(self, port, options):
         self._port = port
         self._options = options
         self._num_workers = int(self._options.child_processes)
 
-        # This maps worker names to their TestShellThread objects.
-        self._threads = {}
+        # This maps worker names to their _WorkerState values.
+        self._workers = {}
+
+    def _threads(self):
+        return tuple([w.thread for w in self._workers.values()])
 
     def start_workers(self, test_runner):
         """Starts up the pool of workers for running the tests.
@@ -77,19 +86,13 @@ class _WorkerMessageBroker(object):
         """
         self._test_runner = test_runner
         for worker_number in xrange(self._num_workers):
-            thread = self.start_worker(worker_number)
-            self._threads[thread.name()] = thread
-        return self._threads.values()
+            worker = _WorkerState('worker-%d' % worker_number)
+            worker.thread = self._start_worker(worker_number, worker.name)
+            self._workers[worker.name] = worker
+        return self._threads()
 
-    def start_worker(self, worker_number):
-        # FIXME: Replace with something that isn't a thread.
-        # Note: Don't start() the thread! If we did, it would actually
-        # create another thread and start executing it, and we'd no longer
-        # be single-threaded.
-        return dump_render_tree_thread.TestShellThread(self._port,
-            self._options, worker_number,
-            self._test_runner._current_filename_queue,
-            self._test_runner._result_queue)
+    def _start_worker(self, worker_number, worker_name):
+        raise NotImplementedError
 
     def run_message_loop(self):
         """Loop processing messages until done."""
@@ -104,27 +107,43 @@ class _WorkerMessageBroker(object):
         pass
 
 
-class _InlineBroker(_WorkerMessageBroker):
+class InlineBroker(WorkerMessageBroker):
+    def _start_worker(self, worker_number, worker_name):
+        # FIXME: Replace with something that isn't a thread.
+        thread = dump_render_tree_thread.TestShellThread(self._port,
+            self._options, worker_number, worker_name,
+            self._test_runner._current_filename_queue,
+            self._test_runner._result_queue)
+        # Note: Don't start() the thread! If we did, it would actually
+        # create another thread and start executing it, and we'd no longer
+        # be single-threaded.
+        return thread
+
     def run_message_loop(self):
-        thread = self._threads.values()[0]
+        thread = self._threads()[0]
         thread.run_in_main_thread(self._test_runner,
                                   self._test_runner._current_result_summary)
         self._test_runner.update()
 
 
-class _MultiThreadedBroker(_WorkerMessageBroker):
-    def start_worker(self, worker_number):
-        thread = _WorkerMessageBroker.start_worker(self, worker_number)
+class MultiThreadedBroker(WorkerMessageBroker):
+    def _start_worker(self, worker_number, worker_name):
+        thread = dump_render_tree_thread.TestShellThread(self._port,
+            self._options, worker_number, worker_name,
+            self._test_runner._current_filename_queue,
+            self._test_runner._result_queue)
         thread.start()
         return thread
 
     def run_message_loop(self):
+        threads = self._threads()
+
         # Loop through all the threads waiting for them to finish.
         some_thread_is_alive = True
         while some_thread_is_alive:
             some_thread_is_alive = False
             t = time.time()
-            for thread in self._threads.values():
+            for thread in threads:
                 exception_info = thread.exception_info()
                 if exception_info is not None:
                     # Re-raise the thread's exception here to make it
@@ -137,7 +156,7 @@ class _MultiThreadedBroker(_WorkerMessageBroker):
                     some_thread_is_alive = True
                     next_timeout = thread.next_timeout()
                     if next_timeout and t > next_timeout:
-                        log_wedged_worker(thread.name(), thread.id())
+                        log_wedged_worker(thread.getName(), thread.id())
                         thread.clear_next_timeout()
 
             self._test_runner.update()
@@ -146,7 +165,8 @@ class _MultiThreadedBroker(_WorkerMessageBroker):
                 time.sleep(0.01)
 
     def cancel_workers(self):
-        for thread in self._threads.values():
+        threads = self._threads()
+        for thread in threads:
             thread.cancel()
 
 
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
index c006471..6f04fd3 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/message_broker_unittest.py
@@ -46,7 +46,7 @@ import message_broker
 class TestThread(threading.Thread):
     def __init__(self, started_queue, stopping_queue):
         threading.Thread.__init__(self)
-        self._id = None
+        self._thread_id = None
         self._started_queue = started_queue
         self._stopping_queue = stopping_queue
         self._timeout = False
@@ -54,10 +54,10 @@ class TestThread(threading.Thread):
         self._exception_info = None
 
     def id(self):
-        return self._id
+        return self._thread_id
 
-    def name(self):
-        return 'worker/0'
+    def getName(self):
+        return "worker-0"
 
     def run(self):
         self._covered_run()
@@ -65,7 +65,7 @@ class TestThread(threading.Thread):
     def _covered_run(self):
         # FIXME: this is a separate routine to work around a bug
         # in coverage: see http://bitbucket.org/ned/coveragepy/issue/85.
-        self._id = thread.get_ident()
+        self._thread_id = thread.get_ident()
         try:
             self._started_queue.put('')
             msg = self._stopping_queue.get()
@@ -117,11 +117,11 @@ class MultiThreadedBrokerTest(unittest.TestCase):
         options = mocktool.MockOptions(child_processes='1')
         starting_queue = Queue.Queue()
         stopping_queue = Queue.Queue()
-        broker = message_broker._MultiThreadedBroker(port, options)
+        broker = message_broker.MultiThreadedBroker(port, options)
         broker._test_runner = runner
         child_thread = TestThread(starting_queue, stopping_queue)
-        name = child_thread.name()
-        broker._threads[name] = child_thread
+        broker._workers['worker-0'] = message_broker._WorkerState('worker-0')
+        broker._workers['worker-0'].thread = child_thread
         child_thread.start()
         started_msg = starting_queue.get()
         stopping_queue.put(msg)
@@ -169,7 +169,7 @@ class Test(unittest.TestCase):
         child_thread.start()
         msg = starting_queue.get()
 
-        message_broker.log_wedged_worker(child_thread.name(),
+        message_broker.log_wedged_worker(child_thread.getName(),
                                          child_thread.id())
         stopping_queue.put('')
         child_thread.join(timeout=1.0)
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
index 94524fc..bc5a9aa 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
@@ -127,10 +127,6 @@ class Port(object):
         port."""
         return self._executive.cpu_count()
 
-    def default_worker_model(self):
-        """Return the concurrency model the port should use."""
-        return 'threads'
-
     def baseline_path(self):
         """Return the absolute path to the directory to store new baselines
         in for this port."""
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index 0b11d9b..f4e92a6 100755
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -603,7 +603,7 @@ class TestRunner:
         if not self._options.dry_run:
             threads = message_broker.start_workers(self)
         else:
-            threads = []
+            threads = {}
 
         self._printer.print_update("Starting testing ...")
         keyboard_interrupted = False
@@ -1338,8 +1338,7 @@ def run(port, options, args, regular_output=sys.stderr,
 
 def _set_up_derived_options(port_obj, options):
     """Sets the options values that depend on other options values."""
-    if options.worker_model is None:
-        options.worker_model = port_obj.default_worker_model()
+
     if options.worker_model == 'inline':
         if options.child_processes and int(options.child_processes) > 1:
             _log.warning("--worker-model=inline overrides --child-processes")
@@ -1570,10 +1569,9 @@ def parse_args(args=None):
         optparse.make_option("--child-processes",
             help="Number of DumpRenderTrees to run in parallel."),
         # FIXME: Display default number of child processes that will run.
-        # FIXME: Display default threading model (will be port-specific).
         optparse.make_option("--worker-model", action="store",
-            help=("controls worker model. Valid values are "
-            "'inline' and 'threads'.")),
+            default="threads", help=("controls worker model. Valid values are "
+            "'inline' and 'threads' (default).")),
         optparse.make_option("--experimental-fully-parallel",
             action="store_true", default=False,
             help="run all tests in parallel"),
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index 0ae9a09..6bb741a 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -47,7 +47,6 @@ from webkitpy.common import array_stream
 from webkitpy.common.system import outputcapture
 from webkitpy.common.system import user
 from webkitpy.layout_tests import port
-from webkitpy.layout_tests.port import test
 from webkitpy.layout_tests import run_webkit_tests
 from webkitpy.layout_tests.layout_package import dump_render_tree_thread
 from webkitpy.layout_tests.port.test import TestPort, TestDriver
@@ -187,7 +186,6 @@ class MainTest(unittest.TestCase):
 
     def test_batch_size(self):
         batch_tests_run = get_tests_run(['--batch-size', '2'])
-        self.assertEquals(len(batch_tests_run), 9)
         for batch in batch_tests_run:
             self.assertTrue(len(batch) <= 2, '%s had too many tests' % ', '.join(batch))
 
@@ -299,7 +297,6 @@ class MainTest(unittest.TestCase):
 
     def test_run_singly(self):
         batch_tests_run = get_tests_run(['--run-singly'])
-        self.assertEqual(len(batch_tests_run), 14)
         for batch in batch_tests_run:
             self.assertEquals(len(batch), 1, '%s had too many tests' % ', '.join(batch))
 
@@ -395,18 +392,6 @@ class MainTest(unittest.TestCase):
         self.assertRaises(ValueError, logging_run,
                           ['--worker-model', 'unknown'])
 
-    def test_worker_model__port_override(self):
-        class OverridePort(test.TestPort):
-            def default_worker_model(self):
-                return 'INVALID'
-
-        options, parsed_args = run_webkit_tests.parse_args(
-            ['--print', 'nothing', '--platform', 'test', '--noshow-results'])
-        port_obj = OverridePort(options=options)
-        self.assertRaises(ValueError, run_webkit_tests.run, port_obj,
-                          options, parsed_args)
-
-
 MainTest = skip_if(MainTest, sys.platform == 'cygwin' and compare_version(sys, '2.6')[0] < 0, 'new-run-webkit-tests tests hang on Cygwin Python 2.5.2')
 
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list